データベースから約 6,000 万以上のレコードを選択する必要があるという要件があります。ResultSet にすべてのレコードを取得したら、クライアントの要件 (日付形式と数値形式) に従っていくつかの列をフォーマットする必要があり、すべてのレコードをファイル (セカンダリ メモリ) に書き込む必要があります。
- 現在、DB から日単位でレコードを選択し (7 日間で 7 選択)、それらを HashMap に入れています。HashMap から読み取り、いくつかの列をフォーマットし、最後にファイル (7 日間の別のファイル) に書き込みます。
最後に、7 つのファイルすべてを 1 つのファイルにマージしています。
しかし、このプロセス全体が完了するまでに 6 時間かかります。このプロセスを改善するために、7 日間で 7 つのスレッドを作成し、すべてのスレッドが別々のファイルを書き込んでいます。
最後に、7 つのファイルすべてを 1 つのファイルにマージしています。このプロセスには 2 時間かかります。しかし、私のプログラムは1時間後にOutOfMemoryになります。
このシナリオに最適な設計を提案してください。キャッシュ メカニズムを使用する必要がありますか?
注: クライアントは、インデックスやストアド プロシージャの作成など、データベースで何も変更したくありません。データベースに触れたくありません。前もって感謝します。