1

バックグラウンド:

Access データベース (.mdb) ファイルが 1 つあり、そのファイルには 6 つのテーブルが含まれています。このファイルは最大 300MB の大きさなので、巨大ではありませんが、効率的にするのに十分な大きさです。その中には、クライアント テーブルという 1 つの主要なテーブルがあります。他のテーブルには、行われた相談のようなデータが保存されます。いくつかの追加の多対 1 対 1 フィールドなどです。

仕事:

この Access データベースを一連の XML ファイル (クライアントごとに 1 つずつ) に変換するプログラムを作成する必要があります。これはデータベース変換アプリケーションです。

オプション:

(私の考えでは)

  1. Access データベース全体Listを不変オブジェクトの形式でメモリにロードし、Linq を使用してこれらのリストで必要な関連データを検索します。

    • 利点:
      • 簡単に並列化。ThreadPoolクライアントごとにスレッドを開始します。すべてのオブジェクトは不変であるため、スレッド間で自由に共有できます。つまり、すべてのスレッドが常にすべてのデータにアクセスでき、一度だけ読み込まれます。
    • (可能) 短所:
      • 追加のメモリを使用したり、孤立したアイテムをロードしたり、不要になったアイテムをロードしたりする可能性があります。
  2. Jet を使用してデータベースに対してクエリを実行し、必要に応じてデータを抽出します。

    • 利点:
      • 軽量化の可能性。必要なときに必要なデータのみをロードします。
    • (可能) 短所:
      • 潜在的に重い!アイテムを複数回ロードする可能性があるため、より多くのメモリを使用します。
      • Jet/OleDb が同時クエリをサポートしない限り、おそらく並列化するのは難しいでしょう (誰かがこれを確認/拒否できますか?)
  3. 他のアイデア?

この問題にアプローチする最善の方法について、StackOverflows はどのような考えを持っていますか?

4

4 に答える 4

0

この音からすれば、それは 1 回限りの操作です。セットアップ全体をメモリにロードする実際のプロセスは、これを行う効率的な方法とはまったく思えないため、強くお勧めしません。

また、ニーズによっては、Access -> XML から直接抽出できる場合があります。

とにかく、データベースが小さいので、一度に 1 つずつ実行すると、私の意見では、いくつかの特別に作成されたクエリを使用すると、管理が容易になり、作成が速くなり、エラーが発生しにくくなります。

于 2009-08-20T14:10:51.243 に答える