2

データベースビューに対する直接SQLクエリを使用するJava 1.4から、Java 8、ドメインオブジェクト、および休止状態を使用したorm永続性に移行しました。

私のバッチ プロセスは、データベースから 300,000 行を読み取る必要があり、次のようになります。

HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);

List<?> list = hibernateTemplate.find("from Widgets widgets where widget.status=?", status);

ただし、これは非常に遅く (データベース クエリの 30 秒に対して 9 分)、多くのメモリを消費します。

休止状態をオンにするshow_sqlと、3 つの異なるテーブルからドメイン オブジェクトをロードするのに多くの時間を費やしていることがわかります (ウィジェットには Wobjet と Wudget が含まれています)。

そして、私は全体を必要としないのでlist(行ごとにバッチ処理を行うことができます)、私は疑問に思います:

よりメモリ効率の高い(そしてより速い)休止状態のある種のResultSetはありますか?

ちなみに、Spring Batch を使用しており、バッキング データベースは Oracle です (ただし、これは変更される可能性があります)。

HibernateTemplateレイヤー内の他のすべての操作は同じテンプレートを使用するため、可能であれば、 でこれを操作する方が簡単ですDao(ただし、これは大量のデータをバッチ処理する最初の操作です)。

4

0 に答える 0