まず、シナリオについて簡単に説明します。データベースはSybaseです。いくつかの2〜3kのストアドプロシージャがあります。ストアドプロシージャは、膨大なデータ(約100万レコード)を返す可能性があります。必要なプロシージャを呼び出し、データをxml形式でクライアントにフラッシュするサービス(サーブレット/スプリングコントローラ)があります。
(複数の列と複数の条件で)フィルタリング(複数の列と複数の条件)/並べ替え(いくつかの動的基準に基づく)を行う必要があります。これを実行しました。
問題は、データが膨大であるため、メモリ内ですべてのフィルタリング/並べ替えを行うのは適切ではないということです。私は以下のオプションを考えました。
オプション1: ResultSetオブジェクトを取得したら、X番号を読み取ります。レコードの数をフィルタリングし、ファイルに保存し、すべてのデータが読み取られるまでこのプロセスを繰り返します。次に、ファイルを読み取り、データをクライアントにフラッシュします。
フィルタリング/並べ替えを高速化するために、ファイル内のデータを並べ替える方法と、オブジェクトをファイルに保存する方法を理解する必要があります。
オプション2: データを取得してフィルタリングし、指定された基準に基づいて並べ替えてストリームとして返すJavaAPIを探します
オプション3: hsqldb、h2databaseなどのインメモリデータベースを使用しますが、これは役立つのではなくオーバーヘッドになると思います。最初にデータを挿入してからデータをクエリする必要があります。これにより、ファイルシステムも使用されます。
注ストアドプロシージャを変更したくないので、データベースでフィルタリング/並べ替えを行うオプションはオプションではないか、他に何も機能しない場合は最後のオプションになる可能性があります。
また、役立つ場合は、ResultSetから読み取ったすべてのレコードをマップに保存します。キーは列名であり、このマップはリストに保存され、そこにフィルタリングと並べ替えが適用されます。
メモリフットプリント、スケーラブル、パフォーマンスの観点から、またはこのシナリオに適したその他のオプションに適していると思うオプションはどれですか。
ありがとう