每日 3000万订单,如何分库分表?( 五 )


每日 3000万订单,如何分库分表?

文章插图
 
疑问:
疑问 1:上述案例的数据库只能支撑 10 年,10 年以后的数据怎么存储?
有过网购经验的小伙伴应该都很少去查询 3 年前的数据,因此,我们可以设置一个冷热数据,比如按 3 年划分,3 年内数据可以放到数据库做热数据,3 年前的数据可以归档到 ElasticSearch/hive,做冷数据查询 。
疑问 2:如何查询某一时间段的订单?
可以同步到 ElasticSearch/hive,这样就可以很方便的按时间段来查询 。
疑问 3:上述案例是基于新业务,如果已经有线上服务和数据,该如何分库分表?
这个场景是很多公司面临的问题,因此这里给出一个切分的常用处理流程:
立项讨论:
这个步骤需要完成和相关部门以及人员确认分库分表事项、实施日程、后期周知、风险以及应对方案等事宜 。
技术方案:
技术方案需要给出详细迁移方案,包括分库分表方案,代码改造,服务器过渡到新库新表方案,数据迁移方案,风险处理方案等 。
代码改造:
代码改造,主要会涉及到几个部分:服务如何过渡到新库新表,如何灵活支持灰度读写操作,如何进行数据全量迁移、一致性校验等任务 。
分库分表方案:
分库分表方案需要确认分库分表的字段,库和表的数量等问题,可以参考上文 社区电商分库分表落地方案 。
数据同步:
数据同步有全量数据迁移、增量数据同步以及数据校验、优化和补偿 。
数据全量迁移常用方案:开发代码将老库数据迁移到新库;使用中间件同步工具(比如:阿里的 canal)将老库数据同步到新库 。
增量数据同步常用方案:同步双写,在写数据库的地方修改成写两份数据;异步双写,写老库,监听 binlog 异步同步到新库;中间件同步:通过中间件(比如:阿里的 canal)将数据同步到目标库表 。
数据校验常用方案:增量数据校验 和 全量数据校验 和 人工抽检 。
数据校验核心流程:分别读取老库数据和新库数据,然后比较,数据一致则继续比较下一条数据,数据不一致则进行补偿 。
数据补偿核心流程:新库存在老库不存在,则新库删除数据;新库不存在老库存在,则新库插入数据;新库存在老库存在,则比较所有字段,不一致则将新库更新为老库数据 。
风险处理方案:
风险处理包含部门间配合,技术方案的处理(服务回滚,数据修复等)
八、总结
首先,本文从分库分表的理论到分库分表的实例落地分享,但是百种业务百种架构,百种架构百种方案,本文可以给分库分表一个很好的参考意义 。
其次,数据分库分表技术难度比较大,特别是从现有业务改造,需要考虑数据的迁移以及服务器平稳过渡到新库新表,因此整个迁移过程都是一个很大的考验 。
最后,我们分享了一个分库分表的常用流程,因为涉及点太多,所以只能给出一个业内常用的方案,很多细节点还需要在实施前充分去补充和完善 。
作者:猿JAVA

【每日 3000万订单,如何分库分表?】


推荐阅读