数据库中间件分片的一些思考

这是学习笔记的第 1917 篇文章


  今天对一套集群环境进行了分布式改造,通过分片规则对原来的大表进行了多粒度的拆分。

    对此我整理了如下的简单的图表:

数据库中间件分片的一些思考

其实对分片的规则设置,基本就是两种思路来拆分,一种是基于数据库,一种是基于表。

为了进一步的表述,我们先对表的情况做一下梳理,目前的环境中存在的表有两类,一类是固定表,即表的数据量是相对稳定的,数据操作是覆盖型写入的,这类表随着业务的增长会有用户量的提升,比如从2000万用户增长到3000万,但是相对来说增长幅度不大,从改造为分布式方案的思路来说,就是基于表的粒度来拆分的,比如把一张表拆分为40份,在分布式架构中很可能就需要配置40个数据库来对应,扩展力度上相对有限,比如一个表有4亿,拆分为400份,单表的数据量是在100万,如果是4个物理分片节点,那么每个节点对应100个数据库。

另外一类是具有时间属性的,目前的主要是年,季,月,周,日这几类时间维度的表,其中日表是最为常见的,也是目前在分布式改造中使用频率最高的。它的扩展能力是极强的,比如一个日表的划分,每天一个日表,拆分成16份,那么一年下来累计是16*365=5840张表,几乎没有满足不了的场景了。

同时在表名的设计上也有一定的技巧,

对于固定表来说,相对简单,比如:

ü dbo_test_score

ü dbo_test_credit

对于周期表来说,有一些策略和命名规则,比如:

ü tda_test_20190321   --

ü tma_test_201903 --

ü twa_test_201901 --

ü tya_test_2019 --年    

ü tqa_test_201901 --季度

按照目前的配置策略,原来的方式表里会有近万张表,而现在的方式只有几十张,全年也就400张左右:

+---------------------+

| Tables in testdb  |

+---------------------+

| dbo_grw_test_credit      |

| dbo_grw_testscore |

| dbo_grw_testcount  |

| dbo_grw_testtime   |

| dbo_grw_score       |

| tda_grw_20190313    |

| tda_grw_20190314    |

| tda_grw_20190315    |

| tda_grw_20190316    |

| tda_grw_20190317    |

| tda_grw_20190318    |

| tda_grw_20190319    |

| tda_grw_20190320    |

| tma_grw_201903      |

| tma_grw_201904      |

| tqa_grw_201901      |

| tqa_grw_201902      |

| tqa_grw_201903      |

| tqa_grw_201904      |

| twa_grw_201901      |

| twa_grw_201902      |

| twa_grw_201903      |

| twa_grw_201904      |

| twa_grw_201905      |

| tya_grw_2019        |

+---------------------+

25 rows in set (0.00 sec)

数据库中间件分片的一些思考