分库分表场景分析

发布时间:2024年01月20日

背景:目前需支撑交易表日五千万数据,后续完全切量到此新系统

数据库:四个部署在Aix系统上的Oracle库、每个库一张交易主表(按日31个物理分区)、十二个交易历史表(无分区)

服务节点:每个Oracle库都对应着多个服务节点

流量入口:业务网关

路由规则:用户ID末两位进行路由


一阶段:此为正常上云后流程

????????流量经过业务网关路由后到达业务系统,根据当前轧差日期来放入交易主表具体分区,月初会新起调度节点进行历史数据的清理,上面描述了主表有31个物理分区(这里的分区对应表结构是一个字段,包含在唯一索引中),每天会将指定日期之前的数据挪移到十二张历史表中,在进行清理的时候理论上只会影响到当前所使用的分区,对不同物理分区处理基本不会影响主业务

二阶段

????????业务完全切量,需扩库进行性能冗余,下面粗糙的描述下当时的切量方案:
????????????????步骤I:在原本业务网关中增加配置,根据配置决定将业务发往哪个数据库上的服务
????????????????步骤II:起8个库,部分流量发往新库,进行数据查询的时候至多走两次查询
????????????????步骤III:陆续切量,直至所有的流量都按8库正常跑
????????????????步骤IV:待业务网关切量稳定后,上游开始切量(之前:流量->业务网关->业务, 现在:部分流量恢复之前状态:流量->业务)
????????????????待业务稳定后将所有量直接发往业务,下掉业务网关,由业务系统直连

????????在扩容阶段会开启特殊标记,表明此时所有订单查询将会路由两个库查询最终响应结果,因之前99用户会路由到4库,扩库之后会路由到8库,此时多出来的一次查询是其补偿机制,防止业务出现异常


上面描述的已经是业务基于当时现状选择的结果

其实在做分库分表分区的时候还需要考虑不少方面,下面列举部分:
????????技术选型

????????????????关系型数据库 NoSQL 还是类似于TIDB这样的newSQL,此时第一版还是采用的Oracle,后续将切到TDSQL
? ? ? ? 分库技术实现

? ? ? ? ? ? ? ? Client模式 和 Proxy模式,因框架天然支持对库路由,故业务为Client模型

????????分区字段的选择

????????????????这个需要根据业务常见需求选择,例如:业务需要用哪些字段进行查询,这里业务选择的是时间

????????扩容方案

????????????????上面二阶段其实就已经是雏形可供参考

? ? ? ? 分区索引

????????????????分区索引 和 全局索引,这里业务选择的是分区索引,对此时业务来说影响更小性能更优

????????复杂查询、分页等

????????????????因数据按照某些规则进行分离了,想要汇总查询是非常难受的,不依赖三方中间件的情况下没什么好的解决方案,目前采用?ES?做数据分离查询
????????????????
????????历史数据迁移

? ? ? ? ? ? ? ?业务拆分为1+12张表以及31个分区来实现历史业务的迁移

????????短时间订单量大爆发

????????????????冗余性能来应对这种流量


文章来源:https://blog.csdn.net/weixin_44700876/article/details/135708083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。