ScrollableResults を使用して大規模なデータ セットを処理する
大規模なデータセットを扱う場合、データ取得の最適化が重要になります。このシナリオでは、Hibernate の ScrollableResults を使用して 9,000 万件のデータベース レコードを読み取ると、データセット全体を RAM にロードしようとするため、メモリが枯渇する可能性があります。
これを回避するには、setFirstResult メソッドと setMaxResults メソッドを使用することをお勧めします。 。これらのメソッドでは、結果を反復処理する際に、データセットの特定の部分を指定して一度に取得できるため、メモリのボトルネックを効果的に回避できます。ただし、オフセットが増加すると、パフォーマンスが低下する可能性があります。
別の解決策は、カスタム SQL クエリ アプローチを採用することです。増加するオフセットに基づいてデータのサブセットを段階的に取得することにより、メモリのオーバーヘッドを削減できます。次のクエリ テンプレートは、この戦略を示しています。
SELECT * FROM person WHERE id > <offset> AND <other_conditions> ORDER BY id asc LIMIT <batch_size>
このクエリは、追加の条件に基づいてフィルタリングし、指定されたオフセットより大きい ID を持つレコードのバッチを取得します。このアプローチの増分的な性質により、メモリ リソースを過剰に消費することなく効率的なデータ取得が保証されます。
さらに、MySQL クエリ自体を最適化することでパフォーマンスを向上させることができます。適切なインデックスを使用し、最適化された条件を確保すると、処理時間を大幅に短縮できるため、この方法は大規模なデータセットを処理するための実行可能なソリューションになります。
以上がメモリを使い果たさずに 9,000 万件のデータベース レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。