V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tom
V2EX  ›  问与答

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

  •  1
     
  •   tom · 2019-06-03 13:21:51 +08:00 · 1949 次点击
    这是一个创建于 2003 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教各位个问题,我们现在要做的项目,主要实现的功能是这样的:

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

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

    谢谢!
    4 条回复    2019-06-05 09:45:22 +08:00
    tom
        1
    tom  
    OP
       2019-06-03 15:34:43 +08:00
    先谢谢大家了
    chmaple
        2
    chmaple  
       2019-06-03 16:15:02 +08:00   ❤️ 1
    1、数据同步到本机的时候,是否会写入到 DB 或者 ES 中?可以考虑在存储的时候添加额外字段便于统计;如果不方便在原表上统计,可以根据记录主键建立关联表进行统计;统计的结果,可以放缓存累加处理
    2、缓存框架,个人觉得用不到,要用到缓存的场景在这个需求下面可能就是一次性把目标记录全都载入然后一次性处理,如果记录数过多很容易出问题,不如换成迭代的方式,分页一批一批搞;
    3、如果题主所提及的缓存框架是为了存储这几十万数据,马马虎虎也行,但是非结构化数据存储、解析还是费工夫的,来回折腾的话,有点麻烦;
    4、个人建议同步归同步,处理归处理,统计归统计;边同步边统计的话,一方面万一系统挂了重启了又要从头开始,另一方面代码分离各搞各的好配任务(个人习惯,仅供参考)
    tom
        3
    tom  
    OP
       2019-06-04 19:02:02 +08:00
    @chmaple #2 多谢!
    同步过来后会写入到数据库。然后再进行分析对比。
    不好意思,我主题里没描述清楚,举个例子来说:
    A 表里有 1 万条数据,B 表有 10 万条数据。我需要对 A 表的数据逐条分析,分析 A 表每条数据的时候,需要用到 B 表的 10 万条数据,每次都查询 B 表 10 万条数据,这样效率会不会很低啊
    chmaple
        4
    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 一批,然后计算结果保存,最后汇总。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1176 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.