0

MySQLにビッグデータセット(ユーザー、企業、連絡先)がありますか?約100万レコード。

そして今、私は約100000レコードのインポートファイル(csv)から新しいユーザー、会社、連絡先をインポートする必要があります。ファイルからの記録には、3つのエッセンス(ユーザー、会社、連絡先)すべてのすべての情報が含まれています。さらに、本番環境ではLOAD DATAを使用できません(あまり多くの権限を持っていないだけです:()。

したがって、そのデータセットに適用する必要がある3つのステップがあります。-既存のDBデータと比較します-更新します(前の手順で何かが見つかった場合)-新しいレコードを挿入します

私はそれを行うためにサーバー上でphpを使用しています。私は2つのアプローチを見ることができます:

  • ファイルからすべてのデータを一度に読み取り、このBIGアレイを操作して、これらの手順を適用します。
  • または、ファイルから1行ずつ読み取り、各行を手順に通します

どのアプローチがより効率的ですか?CPU、メモリ、または時間の使用量

トランザクションを使用できますか?または、本番システム全体の速度が低下しますか?

ありがとう。

4

3 に答える 3

2

ファイル全体の読み取りはわずかに速くなりますが、CPU時間/時間はそれほど多くありません。ただし、このような大規模なデータ セットの場合、すべてのレコードをメモリに読み込むために必要な追加メモリは、時間の利点を大幅に上回ります。

于 2012-05-14T08:41:33.967 に答える
0

phpMyAdminには、大きなSQLファイルの「再開可能なインポート」という優れた機能があることをご存知ですか?

[部分的なインポート]セクションの[インポートの中断を許可する]をオンにするだけです。そして出来上がり、PhpMyAdminは停止し、すべてのリクエストが実行されるまでループします。

「車輪の再発明」よりも「ツールを使用する」方が効率的かもしれません

于 2012-05-14T08:41:16.113 に答える
0

私は、2番目のアプローチがより受け入れられると思います:

  1. 変更リストを作成します (別のテーブルになります)
  2. 行ごとに更新を行います(たとえば、「updflag」フィールドを使用して各行を更新済みとしてマークします)
  3. このプロセスは、トランザクションを使用してバックグラウンドで実行します。
于 2012-05-14T08:57:49.747 に答える