バックグラウンド:
Access データベース (.mdb) ファイルが 1 つあり、そのファイルには 6 つのテーブルが含まれています。このファイルは最大 300MB の大きさなので、巨大ではありませんが、効率的にするのに十分な大きさです。その中には、クライアント テーブルという 1 つの主要なテーブルがあります。他のテーブルには、行われた相談のようなデータが保存されます。いくつかの追加の多対 1 対 1 フィールドなどです。
仕事:
この Access データベースを一連の XML ファイル (クライアントごとに 1 つずつ) に変換するプログラムを作成する必要があります。これはデータベース変換アプリケーションです。
オプション:
(私の考えでは)
Access データベース全体
List
を不変オブジェクトの形式でメモリにロードし、Linq を使用してこれらのリストで必要な関連データを検索します。- 利点:
- 簡単に並列化。
ThreadPool
クライアントごとにスレッドを開始します。すべてのオブジェクトは不変であるため、スレッド間で自由に共有できます。つまり、すべてのスレッドが常にすべてのデータにアクセスでき、一度だけ読み込まれます。
- 簡単に並列化。
- (可能) 短所:
- 追加のメモリを使用したり、孤立したアイテムをロードしたり、不要になったアイテムをロードしたりする可能性があります。
- 利点:
Jet を使用してデータベースに対してクエリを実行し、必要に応じてデータを抽出します。
- 利点:
- 軽量化の可能性。必要なときに必要なデータのみをロードします。
- (可能) 短所:
- 潜在的に重い!アイテムを複数回ロードする可能性があるため、より多くのメモリを使用します。
- Jet/OleDb が同時クエリをサポートしない限り、おそらく並列化するのは難しいでしょう (誰かがこれを確認/拒否できますか?)
- 利点:
他のアイデア?
この問題にアプローチする最善の方法について、StackOverflows はどのような考えを持っていますか?