Hibernate の制限付き ScrollableResults を使用して 9,000 万レコードをストリーミング
その名前にもかかわらず、Hibernate の ScrollableResults は大規模な結果セットを効率的に処理するのには適していません。ユーザーが発見したように、9,000 万レコードでこれを使用しようとすると、ドライバーが結果セット全体をメモリにロードするため、OutOfMemoryError が発生します。
代替手段である setFirstResult と setMaxResults も、大規模なデータセットには実用的ではありません。
1 つの解決策は、SQL クエリを使用してレコードを手動で取得することです。主キーに条件を指定し、返されるレコードの数を制限することで、メモリを過負荷にすることなくデータのチャンクをストリーミングできます。
もう 1 つのアプローチには、setFirstResult/setMaxResults 戦略の変更が含まれます。オフセットを徐々に増やす代わりに、前のバッチの主キーの最大値を使用して次のバッチを取得できます。この方法は、テーブルが主キーによって順序付けされており、追加の条件で最後にインデックス付けされた列に限定された等価比較を使用する場合に特に効果的です。
これらの戦略に従うことで、Hibernate の ScrollableResults の制限を回避し、効率的に処理することができます。大規模なデータセットをストリーミング形式で。
以上がOutOfMemoryErrors を回避して Hibernate で 9,000 万レコードを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。