用 hibernate处理过单表数据超过千万条数据系统的进来侃侃!
公司有套系统打算使用hibernate实现持久层,部分表数据量超过千万,具体实现有啥建议或者有啥注意的地方,性能要求比较高
------解决方案--------------------最好不要了,Ibatis吧
------解决方案--------------------千万条数据太恐怖了吧
hql可不可以应付是个问题
持久层就是耗内存
我也想知道可不可以处理千万条数据
------解决方案--------------------千万条数据也不怕啊,电信计费的系统我们都用它,你又不是一下子返回很多数据。
------解决方案--------------------大不了做临时表,不用担心,没问题的。
------解决方案--------------------又不是要每秒查询千万条
------解决方案--------------------数据越多越要用hibernate
因为hibernate提供了对象池缓存,大多数的时候都是直接从内存中取数据出来。
尽量使用单表查询,即使要做很多次查询,也比一个hql查出来性能要高,而且这样更容易命中缓存
------解决方案--------------------我们做的一个银行项目用的就是hibernate,数据千万条不是什么问题。有以下3条经验。
(1)尽量的对关联表使用懒加载的方式;
(2)必须分页,否则即使虚拟机设置1.5G内存同样狂抛
内存溢出。
(3)使用3.1以后版本的hibernate,之前版本对中文支持会导致海量的Class.forName操作,同时耗尽内存。
------解决方案--------------------1、HQL可以很容易实现多表连接查询吧。
2、内存溢出一般是Cache没清理的缘故,跟lazy load没关系。不清Cache经常会out of memory。
再,Hibernate不保证在有第三方程序的情况下Cache与DB的同步,这跟Entity bean是完全不一样的。总之,依赖二级Cache是很危险的。
3、建立关联可以让程序赏心悦目,不过请注意hibernate reference有关章节的最后一句话: "更实用的是使用HQL. " ---当然,建立关联跟HQL查询不是冲突的,HQL同样可以从关联中得到好处。
4、如果建立了关联,必须要注意N+1删除问题。
------解决方案--------------------经常见到这种问题,很奇怪发问的人到底有没有写过sql查询分页代码。
因为无论查多少条也只返回一页1~100条,这用什么编程方式都不成问题。
如果真是要显示百万条以上,首先是服务器会崩溃,其次是客户端会崩溃
,和负载量有关,和语言没什么关系。
------解决方案--------------------wo ding