请问大神们,有哪些千万条数据通过分布式进行合计的可行方案吗?

mysql中,5000万条数据被均分在10张分表中,表结构为组织id、客户id以及订单金额,现在想通过分布式处理的方式统计所有组织下所有客户订单的金额,有好一点的实现方案吗?

补充个信息:组织有1000个,客户有10000个

我用groupby功能对一个分表数据以组织id和客户id进行分组并sum金额,需要的时间就花了15分钟。

目前想到的解决方案如下:启动一个client,启动5个worker(1-5),client查组织表取出所有的组织id,然后分别发送给5个worker。worker的处理逻辑相同,遍历组织id列表,针对每个组织id都执行如下操作:

select a.forgid,a.fcustomerid,sum(a.famount) amount

from(select * from t_amount_0 where forgid='org0.0.0'
union ALL

select * from t_amount_1 where forgid='org0.0.0') a

GROUP BY a.fcustomerid ORDER BY a.fcustomerid

遍历完毕后每个worker就能得到当前对应的两个分表中所有组织id的每个客户单据总额。

然后worker把结果返回到client。

当client得到全部5个worker的返回结果后,对5个返回结果进行合并,最终能得到结果。

这种方案是我目前能像到的唯一方案了。

但是这种方案还是很慢。

给表的佛瑞的建个索引会不会快点?

现在这个表已经有三个索引了,分别是orgid、customerid和两者的组合索引

图片说明
表结构如图

你说worker 既然都能返回对应的金额 为什么你还要在sql 中计算, 还有 你重写一下你的worker处理过程, 在work中去计算 然后返回的结果再去合计