您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Hibernate的ScrollableResults缓慢读取9000万条记录

使用Hibernate的ScrollableResults缓慢读取9000万条记录

我知道,使用setFirstResult和setMaxResults是您唯一的选择。

传统上,可滚动结果集将仅根据需要将行传输到客户端。不幸的是,MysqL Connector / J实际上是伪造的,它执行了整个查询并将其传输到客户端,因此驱动程序实际上将整个结果集加载到了RAM中,并将其滴加给您(由内存不足问题证明) 。您有正确的想法,这只是MysqL Java驱动程序中的缺点。

我没有办法解决这个问题,因此使用常规的setFirst / max方法加载大块数据。对不起,带来坏消息。

只要确保使用无状态会话,就不会有会话级缓存或脏跟踪等。

编辑:

除非您脱离MysqL J / Connector,否则UPDATE 2是最好的。尽管没有理由不能限制查询的上限。如果您有足够的RAM来容纳索引,那么这应该是一个便宜的操作。我会稍作修改,一次抓取一个批次,并使用该批次的最高ID来抓取下一个批次。

注意:仅当 使用等于(不允许使用范围条件)并且索引的最后一列为 。

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>
其他 2022/1/1 18:15:00 有392人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶