大量のデータ (10,000,000 行を含むテーブルから最大 100,000 行) を抽出することを目的とするアプリケーションを担当しました。残念ながら、抽出は Java + Hibernate で記述されており、パフォーマンスは比較的劣っています。Java + Hibernate を使用した 100,000 行の抽出には、約 1 分 30 秒かかります。Talendを使用した同じ抽出には、約 30 秒かかります (3 分の 1)。
コードの例を次に示します。
Launcher.initStatelessSession();
Launcher.beginStatelessTransaction();
//Creation of the Criteria crit, no join, only a single table is read.
int fetchSize = 1000;
crit.setFetchSize(fetchSize);
crit.setCacheable(false);
crit.setReadOnly(true);
ScrollableResults result = crit.scroll(ScrollMode.FORWARD_ONLY);
// Most of the time is spent from HERE ...
while (result.next()) {
// Some code but insignificant time compared to the result.next().
// I replaced this code with continue; and the speed did not really change.
}
// ... to HERE
このクエリを高速化できる最適化に関するアイデアはありますか? 現時点では、Hibernate を別の目的で放棄する予定はありません。