0

約320万件のレコードの大規模なコレクションがあり、このコレクションデータは毎月更新されていますが、ソースデータはそのまま取得されています。つまり、更新されたレコードだけでなく、すべてを取得しています。パフォーマンスの観点から、コレクションを削除してすべてを挿入するか、レコードごとに更新を行う方がよいでしょうか。また、既存のレコードをソースから読み取られているレコードと比較して、変更があるかどうかを確認する良い方法はありますか?

ありがとう。

4

1 に答える 1

0

また、既存のレコードをソースから読み取られているレコードと比較して、変更があるかどうかを確認する良い方法はありますか?

変更検出システムを探しています。これは、ETLシステムで一般的に説明されている問題です。ETLプロセスについて何か読むことをお勧めします(KimballのDatawarehouse ETL Toolkitは優れたソースです)。一般に、変更の検出は難しい問題であり、差異を計算するためにスナップショットを使用する必要があります。コレクションが常にmongoストレージに残ることが確実な場合は、mongoログをいじることが可能かどうかを確認できます。さらに、変更の検出はデータの構造と意味と非常に関連していることを考慮してください。たとえば、挿入のみのコレクションがある場合は、次のようにして変更されたデータを取得できます。_id。問題は複雑すぎて、「これを実行すれば、それが得られる」などの答えを出すことはできません。データを分析し、より良い方法を理解する必要があります。文献を参照して既知の解決策を見つけ、車輪の再発明を避けてください。

パフォーマンスの観点から、コレクションを削除してすべてを挿入するか、レコードごとに更新を行う方がよいでしょうか。

繰り返しになりますが、データがどのように構造化されているかを知る必要があります。一定の部分よりも多くの変更があるコレクションがある場合は、コレクション全体をリロードして、変更の追跡を回避することをお勧めします。コレクションにコレクション全体よりもかなり小さいチェンジセットがある場合、既存のドキュメントを更新するとパフォーマンスが向上します。

お役に立てれば。

于 2012-08-23T12:30:23.007 に答える