1
tom OP 先谢谢大家了
|
2
chmaple 2019-06-03 16:15:02 +08:00 1
1、数据同步到本机的时候,是否会写入到 DB 或者 ES 中?可以考虑在存储的时候添加额外字段便于统计;如果不方便在原表上统计,可以根据记录主键建立关联表进行统计;统计的结果,可以放缓存累加处理
2、缓存框架,个人觉得用不到,要用到缓存的场景在这个需求下面可能就是一次性把目标记录全都载入然后一次性处理,如果记录数过多很容易出问题,不如换成迭代的方式,分页一批一批搞; 3、如果题主所提及的缓存框架是为了存储这几十万数据,马马虎虎也行,但是非结构化数据存储、解析还是费工夫的,来回折腾的话,有点麻烦; 4、个人建议同步归同步,处理归处理,统计归统计;边同步边统计的话,一方面万一系统挂了重启了又要从头开始,另一方面代码分离各搞各的好配任务(个人习惯,仅供参考) |
3
tom OP @chmaple #2 多谢!
同步过来后会写入到数据库。然后再进行分析对比。 不好意思,我主题里没描述清楚,举个例子来说: A 表里有 1 万条数据,B 表有 10 万条数据。我需要对 A 表的数据逐条分析,分析 A 表每条数据的时候,需要用到 B 表的 10 万条数据,每次都查询 B 表 10 万条数据,这样效率会不会很低啊 |
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 一批,然后计算结果保存,最后汇总。 |