大批量数据对比计算问题 - Java

2019-06-03 13:21:51 +08:00
 tom
请教各位个问题,我们现在要做的项目,主要实现的功能是这样的:

1. 每天从其他几个系统分别同步几十万条数据。
2. 数据同步完成后,对这些数据进行分析,例如查找有没有半个小时内同一个用户的工单记录,根据编号,分析一个系统的工单是不是来自于另一个系统,等等。

后台用的 spring boot,请教下处理思路,是不是需要用到缓存框架、应当怎么处理效率最高?

谢谢!
1869 次点击
所在节点    问与答
4 条回复
tom
2019-06-03 15:34:43 +08:00
先谢谢大家了
chmaple
2019-06-03 16:15:02 +08:00
1、数据同步到本机的时候,是否会写入到 DB 或者 ES 中?可以考虑在存储的时候添加额外字段便于统计;如果不方便在原表上统计,可以根据记录主键建立关联表进行统计;统计的结果,可以放缓存累加处理
2、缓存框架,个人觉得用不到,要用到缓存的场景在这个需求下面可能就是一次性把目标记录全都载入然后一次性处理,如果记录数过多很容易出问题,不如换成迭代的方式,分页一批一批搞;
3、如果题主所提及的缓存框架是为了存储这几十万数据,马马虎虎也行,但是非结构化数据存储、解析还是费工夫的,来回折腾的话,有点麻烦;
4、个人建议同步归同步,处理归处理,统计归统计;边同步边统计的话,一方面万一系统挂了重启了又要从头开始,另一方面代码分离各搞各的好配任务(个人习惯,仅供参考)
tom
2019-06-04 19:02:02 +08:00
@chmaple #2 多谢!
同步过来后会写入到数据库。然后再进行分析对比。
不好意思,我主题里没描述清楚,举个例子来说:
A 表里有 1 万条数据,B 表有 10 万条数据。我需要对 A 表的数据逐条分析,分析 A 表每条数据的时候,需要用到 B 表的 10 万条数据,每次都查询 B 表 10 万条数据,这样效率会不会很低啊
chmaple
2019-06-05 09:45:22 +08:00
@tom
以你所举的例子,我分两种情况来说:
1、A 表每条记录关联 B 表中一部分记录,并且可以以 GroupBy A.id 之类的方式进行统计,最终需要的结果以 A 为主得到 B 的关联统计数据。这种情况好好捣鼓 SQL 应该可以一步到位,拉数据的时候可以对 A 先做分页和限制,一批一批计算和拉取系统压力会小一点;
2、A 表每条记录都要和整个 B 表进行关联查询,并且 B 表整个表都有用。这种情况,没有实际业务场景下就只能说暴力轮询吧,如果内存扛得住就把比较小的表全都载入到内存中,然后大表分页分段来遍历处理,扛不住就自己设计笛卡尔积计算流程吧,大概就是 A 一批 B 一批,然后计算结果保存,最后汇总。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/570290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX