锁定老帖子 主题:java两表大数据量明细对比问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-11-08
(1) 维护对账规则时将对等的字段动态建立索引值, 然后将对账规则解析成 AB两表关联的where 字句,然后分页进行查询,查询到的数据 就是对上的数据,记录标示,未查询到的数据视为差异数据。 (2) 维护对账规则时将对等的字段动态建立索引值,分批循环A表数据,解析对账规则从B表中查找数据,查找到数据记录标示,未查找到的数据视为差异数据。 但是这两种方式效率都不高,对账规则复杂的可能导致数据库临时表空间不足等系统问题,特发帖寻求有效解决方案,非常感谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-11-08
坐等高手出现
看看怎么解决内存和效率两个问题 |
|
返回顶楼 | |
发表时间:2013-11-13
这个跟你的业务紧密相关。 如果只是让客户制定表字段和上传数据,之后的主要业务是查询,查询过程不追求实时数据,我提供一种方法:在制定表和上传数据完成后,把这两个表做相应查询,把对的上的和对不上的分别放到两个新的表(或临时表)中,以后的查询都从这两个新的表中查询,才不到两百万的数据量,毫无问题。
|
|
返回顶楼 | |
发表时间:2013-11-13
才200w数据,直接把所有数据加载到内存,一个main方法足够了。
|
|
返回顶楼 | |
发表时间:2013-11-13
设置实时数据也没有问题,新增的数据跟新的两个表作比较,比较之后插入到对应的表就行。
而数据库从两个百万计的表中查询对应数据时间很轻松的事。 |
|
返回顶楼 | |
发表时间:2013-11-14
A、B表新建一个零时字段,对账之前,根据规则将值生成的值保存到零时字段,然后直接通过该字段进行对账操作,可以解决索引过多导致表空间不足。
|
|
返回顶楼 | |
发表时间:2013-11-14
同意2楼的看法,既然连对账的规则都不一样,是没有办法做到很简单的来对账的,这和业务的相关性太大
建议把每种对账规则封装成一种服务,尽可能重用,至于底层的数据,还是保留源数据 |
|
返回顶楼 | |
发表时间:2013-11-14
对账规则可分拆进行,降低规则的复杂度
|
|
返回顶楼 | |
发表时间:2013-11-16
须等待 写道 同意2楼的看法,既然连对账的规则都不一样,是没有办法做到很简单的来对账的,这和业务的相关性太大
建议把每种对账规则封装成一种服务,尽可能重用,至于底层的数据,还是保留源数据 是的,根据对账规则可能是要做全量匹配循环的,数据库处理 基本上是不行了,有的规则索引是不起作用的,现在的想法是牺牲内存, 将两边数据分成很多对进行处理,然后错开再比对,如 1-1 2-2 .... 再 1-2 2-3 ... 比对成功的数据就去除掉,A方所有份数据和比方比对完之后就结束任务。 内存量很大也是个很头疼的问题。也想用redis来做缓存数据存储,但是比对还是得把数据捞到应用上处理,内存也节省不了多少 |
|
返回顶楼 | |
发表时间:2013-11-16
houyujiangjun 写道 这个跟你的业务紧密相关。 如果只是让客户制定表字段和上传数据,之后的主要业务是查询,查询过程不追求实时数据,我提供一种方法:在制定表和上传数据完成后,把这两个表做相应查询,把对的上的和对不上的分别放到两个新的表(或临时表)中,以后的查询都从这两个新的表中查询,才不到两百万的数据量,毫无问题。
您说的是用数据库端进项比对的吗, 主要是比对的时候的性能问题, 两边两百万数据load到内存中的话,大概消耗2G左右的内存, 多个对账任务的话 数据量就会很大, 排队处理的话 其他任务等待时间就会很长,很头疼的问题 |
|
返回顶楼 | |