1

大規模なデータベースがあり、ユーザーが情報を一括更新できる機能を実装したいと考えています。ユーザーが Excel ファイルをダウンロードして変更を加えると、システムは Excel ファイルを受け入れます。

  1. ユーザーは Web インターフェイス (ASP.NET) を使用して、データベースから Excel にデータをダウンロードします。
  2. ユーザーが Excel ファイルを変更します。DB への他のマップとして、特定のデータのみを変更できます。
  3. ユーザーが変更に満足したら、ASP.NET インターフェイスを介して、変更した Excel ファイルをアップロードします。
  4. Excelファイルからデータを吸い上げ(Gemboxを使用)、データベースに対してデータを検証するのはサーバーの仕事です(これが私が問題を抱えている場所です)
  5. 検証が完了すると、検証結果が別の ASP.NET ページに表示されます。検証はソフトであるため、DB へのインデックス マッピングが欠落している場合にのみハード エラーが発生します。(欠落しているデータは無視などを引き起こします)
  6. ユーザーは、実行されるアクションが適切かどうかを決定できます。これらを受け入れると、システムは変更を適用します。(追加、変更、または無視)

ユーザーが行った変更や追加を適用する前に、ユーザーによる間違いを避けるためにデータを検証する必要があります。(意図せずに誤って削除された日付)

更新が必要な行が 65k を超えるのはそれほど難しくありません。

問題は、データを解析して検証を行い、変更セットと追加セットを構築するための最良の方法は何ですか?

Excel データを検証する必要があるすべてのデータをメモリにロードすると、既にメモリを消費しているアプリケーションに不必要に影響を与える可能性があります。Excel ファイル内のすべてのタプルに対してデータベース ヒットを実行すると、65,000 を超えるデータベース ヒットが表示されます。

ヘルプ?

4

4 に答える 4

3

私が過去に使用したのを見たアプローチは次のとおりです。

  1. ユーザーのデータをデータベースの「スクラッチ」テーブルに一括ロードします。
  2. 単一のストアドプロシージャ(一連のクエリの実行)を介してスクラッチテーブルのデータを検証し、検証に失敗した行、更新が必要な行をマークします。
  3. 必要に応じて、マークされた行を実行します。

これは、欠落している列や有効なキー値などを検証する場合に適しています。個々のフィールドの形式を確認する場合にはあまり適していません(SQLに文字列をプルさせないでください)。

ご存知のように、データベースにビジネスロジックを配置することに不快感を覚える人もいますが、このアプローチでは、アプリケーションが行うデータベースヒットの数を制限し、すべてのデータを一度にメモリに保持することを回避します。

于 2009-02-12T02:49:10.913 に答える
1

あなたの問題は、一括アップロードとデータクレンジングが(通常の)作業の中核部分であるデータウェアハウスシステムで非常に一般的です。ETL (Extract Transform Load) やステージング テーブルについてググってみることをお勧めします。

あなたの問題に対する幅広い答えとして、チェックのために「データをメモリにロード」する場合、DBエンジンの一部を独自のコードで効果的に再実装しています。それがより速くて賢いなら、それは良いことかもしれません。たとえば、Excel 抽出の有効な日付の範囲が狭い場合は、テーブルに結合して日付が範囲内にあるかどうかを確認する必要はありません。ただし、外部キーなどの他のデータについては、DB が得意とすることを行います。

データ ボリュームが大きくなるため、ステージング テーブル/データベース/サーバーを使用するのが一般的なソリューションです。ところで、ユーザーが Excel のデータを消去できるようにすることは非常に良い考えですが、重要なデータを「誤って」削除できるようにすることは非常に悪い考えです。これを防ぐためにセル/列をロックしたり、基本的な検証を Excel に入れたりできますか。フィールドに入力する必要があり、日付である必要がある場合は、数行の Excel で確認できます。問題を見つける前にアップロードする必要がないので、ユーザーは満足するでしょう。

于 2009-02-12T03:20:40.853 に答える
0

これに適切に答えるには、次の情報が役立ちます

  1. ユーザーに障害をどのように通知しますか?
  2. 検証に 1 回失敗すると、64,999 件のレコードが読み込まれるのでしょうか、それともまったく読み込まれないのでしょうか?
于 2009-02-12T02:22:09.433 に答える
0

最初に、一括アップロードを使用してテキスト ファイル データから一時テーブルに保存します。次に、これを取得し、作成したインターフェースを使用して検証します。検証後、メインテーブルまたはDBに保存します

于 2009-04-03T07:06:23.453 に答える