ホームページ >データベース >mysql チュートリアル >OutOfMemoryErrors を回避して Hibernate で 9,000 万レコードを効率的にストリーミングするにはどうすればよいですか?

OutOfMemoryErrors を回避して Hibernate で 9,000 万レコードを効率的にストリーミングするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 07:36:13122ブラウズ

How Can I Efficiently Stream 90 Million Records with Hibernate, Avoiding OutOfMemoryErrors?

Hibernate の制限付き ScrollableResults を使用して 9,000 万レコードをストリーミング

その名前にもかかわらず、Hibernate の ScrollableResults は大規模な結果セットを効率的に処理するのには適していません。ユーザーが発見したように、9,000 万レコードでこれを使用しようとすると、ドライバーが結果セット全体をメモリにロードするため、OutOfMemoryError が発生します。

代替手段である setFirstResult と setMaxResults も、大規模なデータセットには実用的ではありません。

1 つの解決策は、SQL クエリを使用してレコードを手動で取得することです。主キーに条件を指定し、返されるレコードの数を制限することで、メモリを過負荷にすることなくデータのチャンクをストリーミングできます。

もう 1 つのアプローチには、setFirstResult/setMaxResults 戦略の変更が含まれます。オフセットを徐々に増やす代わりに、前のバッチの主キーの最大値を使用して次のバッチを取得できます。この方法は、テーブルが主キーによって順序付けされており、追加の条件で最後にインデックス付けされた列に限定された等価比較を使用する場合に特に効果的です。

これらの戦略に従うことで、Hibernate の ScrollableResults の制限を回避し、効率的に処理することができます。大規模なデータセットをストリーミング形式で。

以上がOutOfMemoryErrors を回避して Hibernate で 9,000 万レコードを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。