合众首创——按业务维度的水平数据拆分

数据库拆分,简单来说就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库上面以达到分散单库负载的效果。当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分。拆分模式有垂直(纵向)拆分、水平(横向)拆分。

合众IT为解决数据量大的问题,经过近1年的探索和实践,首创按业务维度的水平数据拆分新模式。

· 整体设计思路

拿寿险核心业务系统为例,寿险业务是围绕保单开展。在找出与该保单相关的全量数据后,把数据均迁移至新库,再把迁移的数据从源库删除,这个是要达到的重点目标。在这之前,先来看看如何评估出“全量”与该保单相关的记录。

首先,根据业务主表,来评估相关业务模块的主表。在源库新增表来记录涉及表范围及表间依赖关系;

然后,根据业务模块的主表,评估与之相关的业务明细表。同样保存业务明细表范围及表间依赖关系。寻找依赖关系,不只是数据库数据字典里的外键依赖,须把各表的业务依赖分析出来维护至自建的依赖关系表。具体迁移取数是根据自建的表来进行取数,这样才能把需拆分的业务数据从系统中全量取出。

最后,从系统中取出待拆分的业务数据之后,我们需要记录待拆分的各表主键值。拆分时根据表的顺序、主键值把数据依次写入新库,然后将数据从源库删除。因记录了表的拆分顺序、主键值,可按拆分的反向顺序,将数据回写至源库,且不需再进行业务取数。

在整个拆分环节中,有个比较灵活的“属性调整”。即根据表间关联关系,调整表的类型及拆分先后顺序,以保证业务逻辑中关联各表时取数能正确取值、数据顺利拆分。

对于业务数据拆分口径,可优先将业务处理概率低的拆分至新库,新库数据只供查询使用;若要对新库数据进行业务处理,可先将数据回写至源库。

数据拆分至多库后,查询新库数据的业务逻辑,只需增加连接新库的数据源,业务关联关系不用修改。对于双库统计汇总类逻辑,需分别查询汇总统计后,再进行后续业务逻辑处理。为保证多库基表数据的一致性,可考虑在新库把基表改为物化视图,让系统自动同步。

最后来看看常见的数据拆分方式,及按业务维度的水平数据拆分的优点。

·垂直拆分

一个数据库由很多表的构成,每个表对应着不同的业务,垂直拆分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。

·水平拆分

垂直拆分后遇到单机瓶颈,可以使用水平拆分。水平拆分是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式。一般水平拆分的方式有范围、枚举、时间、取模、哈希、指定等。

· 按业务维度的水平数据拆分

与常规的水平拆分方式对比:

新的数据拆分模式还在实践中,有解决常规水平拆分方式的很多缺点,在摸索中碰到很多细节问题没能穷尽。在碰到系统性能瓶颈时,大家可根据工作自身系统问题及资源情况,选择最适合自身系统的数据拆分方式。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180713G0PQVN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券