对账系统数据量大,怎么设计

对账服务,系统每天定时去第三方下载账单,然后放在内存中进行遍历,去和库里的数据比对。如果下载的账单数量巨大内存装不下。这种情况怎么处理?

一次必须下完?不能下一点处理一点吗

用流的方式处理,下载后放入流(比如队列)中,然后在流里处理账单。

会spark用spark流式处理 不会的就用中间件代替 把数据读出来放在kafka等消息队列里面 然后你的程序从消息队列读取 处理

  1. 一般情况,账单不是一次下载完的,否则对方的系统也受不了
  2. 下载的账单数据先保存在数据库中,
  3. 根据业务特点,拆分数据分别对账,比如按业务拆,每个拆分用一个线程去对账,可以提高效率,也方便分布式处理
    拆分原则:数据独立,互不干扰;拆份后,每份数据的数量大致平均
  4. 对账时,每次从数据库取适量的数据比对,比如一次10w笔,直至比对完所有数据
    对账对完成时间没有很高的要求,可以用时间换空间。。。

离线库+离线计算。
时效性可以t+1