1

内部アプリケーションを作成していますが、関数の 1 つはリモート システムからデータをインポートする予定です。リモート システムからのデータは、CSV ファイルとして送信されます。システムのデータと CSV ファイルのデータを比較する必要があります。

システムに変更を適用する必要があります (追加と変更)。変更された各フィールドを追跡する必要があります。

私のデータベースは正規化されているので、CSV ファイルのデータに対応するために約 10 個のテーブルを扱っています。これを実装する最良の方法は何ですか? 各 CSV ファイルには、毎日処理される約 500,000 レコードがあります。まず、ルックアップ ID を使用して SQL データベースから行ごとにクエリを実行し、次に c# を使用してフィールドごとに比較し、必要に応じて更新または挿入します。ただし、これには時間がかかりすぎます。

助言がありますか?

4

3 に答える 3

3

次のことができます。

  • cvs ファイルをデータベースのステージング テーブルにロードします。
  • その上で検証とクリーンアップのルーチンを実行します (必要な場合)。
  • ライブデータで比較と更新を実行します
  • ステージング テーブルからすべてのデータを消去する

このアプローチを使用すると、RDBMS 機能を使用して、ほぼすべてのクリーンアップ、検証、および更新ロジックを実装できます。

RDBMS が SQL Server の場合、SQL Server Integration Services を利用できます。

于 2013-01-11T01:42:08.977 に答える
2

一意のキーとして機能するものがあれば、次のことができます。

  • 一意のキーとそのキーに関連付けられたすべてのフィールドのハッシュを含む新しいテーブル ハッシュを作成します ( .NET の object.GetHashCode() は使用しないでください。返される値は設計によって時々変化するためです。私は個人的に Google の CityHash を使用しますこれを C# に移植しました)。
  • 新しい CSV ファイルを取得したら、各キーのハッシュ値を計算します
  • CSV ファイルの各行のハッシュ テーブルを確認します。
  • 一意のキーのエントリがない場合は、エントリを作成して行を挿入します。
  • エントリがある場合は、ハッシュが変更されているかどうかを確認します。
  • 存在する場合は、ハッシュ テーブルのハッシュを更新し、データを更新します。
于 2013-01-11T01:43:16.887 に答える
0

あなたの質問への最初のコメントを拡張します。

csv ファイルの形式に一致する適切にインデックス付けされたテーブルを作成し、データを直接そこにダンプします。

アクティブなテーブルを更新/削除/挿入するための適切なクエリを含むストアド プロシージャを用意します。

一時テーブルを取り除きます。

于 2013-01-11T01:43:14.423 に答える