业务系统开发中,产品经常提出这样的功能,要求系统系统支持excel格式数据导出,这种功能再常见不过,熟练的程序员可能几个小时就搞定了,然后随着数据量的增加,使用频率的提高,有没有遇到一下情况呢 ?
那么这些问题改如何解决呢?提几个问题,大家可以先思考下
说一下笔者之前所在业务部门的背景,曾有过一段计费系统开发经历,涉及客户数量在百万级,每个客户每月的账单明细是需要供内部业务人员和外部客户人员查询或者导出,这个账单明细量级在数千到上千万不等,这是无论是使用频率和导出数量都是需要解决的问题,下面具体谈谈我们的方案演进
最早的方案,web输入条件,点导出,后台循环查询全部落入内存,然后往excel文件写,限制一次导出2万条,碰到大数据的开始找DBA,提流程。后来慢慢的数据安全要求越来越严,审批流程越来越长,研发每天大量时间花在找人,提流程上,无意义的事,所以必须想办法。
方案选型:
为什么选第二种呢?说一下理由:
接下来说一下我们需要达成的目标
账单明细数据涉及的数据范围主要是核心业务数据(比如:订单,采购单等这种需要计费的数据),还有一部分非核心数据,比如:商家信息,四级地址信息,仓库信息,配置信息,这两种数据有如下特点:
基于以上这些特性,我们架构设计是这样的
最后总结一下,一切设计都要围绕业务诉求和现有的问题点,比如频繁的导出影响数据库,影响服务,我们就要考虑是否剥离,走从库可以不?频繁的跨多库查询,就要考虑是否吧一些非核心不长变的数据缓存。海量数据导出就要是否可以分批次,多机并行执行,这一切都要结合业务特性来考虑。