データベースサーバー(私の場合はOracle)にクエリを実行して大量のデータを取得するAPIに取り組んでいます。(これは実際には JDBC 上のレイヤーです。)
私が作成した API は、クエリされたすべての情報のメモリへのロードを可能な限り制限しようとします。つまり、メモリ内のすべての行をロードして後で処理するのではなく、結果セットを反復処理して返された行を 1 つずつ処理することを好みます。
しかし、いくつかの問題があるため、これがベストプラクティスであるかどうか疑問に思っています。
- 結果セットは処理全体で保持されます。処理がデータの取得と同じくらい長い場合、結果セットが 2 倍長く開かれることを意味します。
- 処理ループ内で別のクエリを実行すると、既に結果セットを使用しているときに別の結果セットを開くことになります。同時に多くの結果セットを開くことはお勧めできません。
一方で、いくつかの利点があります。
- 私のクエリは約 100,000 行を返す傾向があるため、結果セットのメモリ内に複数のデータ行があることはありません。それは価値があるかもしれません。
- 私のフレームワークは関数型プログラミングの概念に大きく基づいているため、複数の行が同時にメモリにあることに依存することはありません。
- データベース エンジンがまだ他の行を返している間に、返された最初の行で処理を開始すると、パフォーマンスが大幅に向上します。
ガンダルフに応えて、さらに情報を追加します。
- 結果セット全体を常に処理する必要があります
- 行の集計は行っていません
マスター データ管理アプリケーションと統合し、データを検証するか、さまざまな形式 (ERP、Web プラットフォームなど) を使用してエクスポートするためにデータを取得しています。