私は単純なインポーターを持っています。かなり大きな csv の各行を通過し、データベースにインポートします。
私の質問は、別のメソッドを呼び出して各オブジェクトを挿入する必要があるか (DO を生成し、マッパーに挿入するように指示する)、またはインポート メソッドで挿入プロセスをハードコードしてコードを複製する必要があるかどうかです。
エレガントなことは 2 番目のメソッドを呼び出すことだとわかっていますが、関数呼び出しはコストがかかるということを頭の中で聞き続けています。
どう思いますか?
私は単純なインポーターを持っています。かなり大きな csv の各行を通過し、データベースにインポートします。
私の質問は、別のメソッドを呼び出して各オブジェクトを挿入する必要があるか (DO を生成し、マッパーに挿入するように指示する)、またはインポート メソッドで挿入プロセスをハードコードしてコードを複製する必要があるかどうかです。
エレガントなことは 2 番目のメソッドを呼び出すことだとわかっていますが、関数呼び出しはコストがかかるということを頭の中で聞き続けています。
どう思いますか?
多くの RDBMS ブランドは、一括インポートを行うための特別なコマンドをサポートしています。例えば:
LOAD DATA INFILECOPYBULK INSERTSQL*Loaderこれらのコマンドを使用すると、CSV データ ソースから一度に 1 行ずつ挿入するよりも優先されます。これは、バルク ロード コマンドは通常、少なくとも 1 桁速く実行されるためです。
挿入にはおそらくphpコードよりも桁違いに時間がかかるため、問題にはなりません。
他の人が述べているように、一括挿入はより多くの利益をもたらします。これらの行レベルの最適化は、より高いレベルの優れた最適化を盲目にするだけです。
よくわからない場合は、両方の方法で簡単なタイミングをとってください。見つけるのに数分以上かかることはありません.
一度にメモリ/時間/....の制限に達する場合は、両方のアプローチを組み合わせてバッチ挿入を行うことを検討してください。
これはあまり重要ではないと思います。一括挿入を検討してください。少なくともトランザクションを使用していることを確認し、挿入する前にインデックスを無効にすることを検討してください。