2011-07-11 7 views
0

最初に "sample"というデータベースを作成し、大容量のCSVファイルからデータを更新しました。大きなcsvファイルが変更されたときにmysqlデータベースを更新する方法

.csvファイルに小さな変更が加えられた(一部のデータが追加/削除/変更される)たびに、これもデータベースで更新する必要があります。常に.csvファイル全体(大)を更新するのは効率的ではありません。

変更されたデータを.csvファイルからデータベースに効率的に更新する方法はありますか?

+0

データベースに余分な行を追加するときに、次のクエリを使用できます。 "LOAD DATA INFILE 'file_name' IGNORE INTO TABLE' tbl_name'。既存のデータを変更するときに行うべきこと。 – Junior

答えて

0

これを行う簡単な方法はありません。

古いバージョンのCSVをどこかに保存し、古いバージョンと新しいバージョンの間で差分プログラムを実行し、その結果の出力を使用して更新済み、変更済み、削除済みのファイルを特定し、それに応じてデータベースを更新します。

これは少し信頼性が低く、遅く、実装に多少の努力が必要です。可能であれば、CSVファイルのソースを適合させてデータベースを直接更新するほうがよいでしょう。

0

csvファイルに存在しないエントリも削除したいので、毎回完全なcsvファイルをロードして(最初にテーブルを切り捨てて)1:1コピーを取得する必要があります。

もっと便利な同期のためには、多少のスクリプト言語(PHP、Pythonなど)を利用する必要があります。

私が知っているすべてのthats申し訳ありませんが...

私の経験で
0

それはあなたの「マスター・データ・セット」として定期的に変更し、データ・ファイルを検討することはほとんど不可能です:あなたは何とかmasterdata示しdiffファイルを生成することができない限り、あなたは常にcsvファイル全体を実行し、対応するレコードを返すようにデータベースに問い合わせてから、何もしない(同じ場合)、挿入する(新しい場合)、または更新する(変更した場合)必要があります。多くの場合、テーブルを落として全体をリロードするほうが速いかもしれませんが、それは深刻な運用上の問題につながる可能性があります。

そのため、可能であれば、データベースをmasterdataとみなしてそこからcsvファイルを生成します。

関連する問題