【分库分表】水平切分方式的路由过程和分片维度

水平切分方式是我们日常开发中最熟悉的分库分表方法。水平切分中需要注意的两点应该就是路由过程分片维度 了。

水平切分的路由过程

我们在设计表时需要确定对表按照什么样的规则进行分库分表。例如,当有新用户时,程序得确定将此用户的信息添加到哪个表中;同理,在登录时我们需要通过用户的账号找到数据库中对应的记录,所有这些都需要按照某一规则进行路由请求,因为请求所需要的数据分布在不同的分片表中。

针对输入的请求,通过分库分表规则查找到对应的表和库的过程叫作路由。例如,分库分表的规则是user_id % 4,当用户新注册了一个账号时,假设用户的ID是123,我们就可以通过123 % 4 = 3确定此账号应该被保存在User3表中。当ID为123的用户登录时,我们可通过123 % 4 = 3计算后,确定其被记录在User3中。相信这个列子是大家最常用,最好理解的例子,大多数候选人都会有这个例子来简单回答关于分表的问题。

水平切分的分片维度

对数据切片有不同的切片维度,这里只介绍两种最常用的切片维度,更多关于分片维度的知识可以参考Mycat分片规则 。

1. 按照哈希切片

对数据的某个字段求哈希,再除以分片总数后取模,取模后相同的数据为一个分片,这样的将数据分成多个分片的方法叫作哈希分片。

按照哈希分片常常应用于数据没有时效性的情况,比如所有数据无论是在什么时间产生的,都需要进行处理或者查询,例如支付行业的客户要求可以对至少1年以内的交易进行查询和退款,那么1年以内的所有交易数据都必须停留在交易数据库中,否则就无法查询和退款。

如果这家公司在一年内能做10亿条交易,假设每个数据库分片能够容纳5000万条数据,则至少需要20个表才能容纳10亿条交易。在路由时,我们根据交易ID进行哈希取模来找到数据属于哪个分片,因此,在设计系统时要充分考虑如何设计数据库的分库分表的路由规则。

这种切片方式的好处是数据切片比较均匀,对数据压力分散的效果较好,缺点是数据分散后,对于查询需求需要进行聚合处理。

2. 按照时间切片

与按照哈希切片不同,这种方式是按照时间的范围将数据分布到不同的分片上的,例如,我们可以将交易数据按照月进行切片,或者按照季度进行切片,由交易数据的多少来决定按照什么样的时间周期对数据进行切片。

这种切片方式适用于有明显时间特点的数据,例如,距离现在1个季度的数据访问频繁,距离现在两个季度的数据可能没有更新,距离现在3个季度的数据没有查询需求。

针对这种情况,可以通过按照时间进行切片,针对不同的访问频率使用不同档次的硬件资源来节省成本:假设距离现在1个季度的数据访问频率最高,我们就用更好的硬件来运行这个分片;假设距离现在3个季度的数据没有任何访问需求,我们就可以将其整体归档,以方便DBA操作。

在实际的生产实践中,按照哈希切片和按照时间切片都是常用的分库分表方式,并被广泛使用,有时可以结合使用这两种方式,例如:对交易数据先按照季度进行切片,然后对于某一季度的数据按照主键哈希进行切片。

你可能感兴趣的:(【分库分表】水平切分方式的路由过程和分片维度)