我最近需要创建一个批处理来读取具有数百万行的表。该表大约有 12 列,我只需要做一个read
操作。但是我需要所有字段,因此我考虑使用持久性对象。
我真的只使用了最基本的代码来实现这一点并且没有任何调整。JPA
很烦人,因为它迫使我使用自定义分页maxResults
和minResults
。如果您有兴趣,可以查看下面的大致代码超链接。除了默认的 XML 文件等之外,真的没有别的东西了。
JPA 代码:http
://codeviewer.org/view/code:297e
Hibernate 代码:http
://codeviewer.org/view/code:297f
JDBC 代码:同上,但末尾带有“d” (对不起,我只能发布 2 个链接)
完成操作的时间结果是这样的。我只是在谈论读取操作:
JPA: Per 5 seconds: 1.000||Per Minute: 12.000||Per Hour: 720.000
Hibernate: Per 5 seconds: 20.000||Per Minute: 240.000||Per Hour: 14.400.000
JDBC: Per 5 seconds: 50.000-80.000||Per Minute: 600.000-960.000||Per Hour: 36.000.000-57.600.000
我无法解释,但 JPA 很荒谬。这只能是一个很大的坏笑话。有趣的是,它以与 Hibernate 代码相同的速度启动,但在大约 30.000 条记录之后,它变得越来越慢,直到它稳定在每 5 秒 1.000 次读取操作。它在完成大约 100.000 条记录后达到了这一点。但老实说……这样的速度毫无意义。
为什么呢?请给我解释一下。我真的不知道我做错了什么。但我也认为它不应该那么慢,即使使用默认设置。不可能,也不应该!相比之下,休眠和JDBC
速度一直是可以接受和稳定的。