我刚刚负责一个应用程序,其目标是提取大量数据(从包含 10,000,000 行的表中提取多达 100,000 行)。不幸的是,提取是用Java + Hibernate编写的,性能相对较差。使用 Java + Hibernate 提取 100,000 行大约需要 1 分 30 秒。使用Talend进行相同的提取大约需要 30 秒(少 3 倍)。
以下是代码的示例:
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 去做其他事情。