一、分库分表相关术语
- 读写分离:不同的数据库,同步相同的数据,分别只负责数据的读和写;
- 分区:指定分区列表达式,把记录拆分到不同的区域中(必须是同一服务器,可以是不同硬盘),应用看来还是同一张表,没有变化;
- 分库:一个系统的多张数据表,存储到多个数据库实例中;
- 分表:对于一张多行(记录)多列(字段)的二维数据表,又分两种情形:
- ①垂直分表:竖向切分,不同分表存储不同的字段,可以把不常用或者大容量、或者不同业务的字段拆分出去;
- ②水平分表(最复杂):横向切分,按照特定分片算法,不同分表存储不同的记录。
二、全局ID生成策略
1、全局ID映射表:
在全局Redis中为每张数据表创建一个ID的键,记录该表当前最大ID;每次申请ID时,都自增1并返回给应用;Redis要定期持久至全局数据库。
2、UUID(128位)
在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。
UUID由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。形如:550e8400-e29b-41d4-a716-446655440000。
UUID的计算因子包括:以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。UUID是个标准,其实现有几种,最常用的是微软的GUID(GlobalsUniqueIdentifiers)。
-
优点:简单,全球唯一。
-
缺点:存储和传输空间大,无序,性能欠佳。
3、COMB(组合)
组合GUID(10字节)和时间(6字节),达到有序的效果,提高索引性能。
三、分片策略
1、连续分片
根据特定字段(比如用户ID、订单时间)的范围,值在该区间的,划分到特定节点。
-
优点:集群扩容后,指定新的范围落在新节点即可,无需进行数据迁移。
-
缺点:如果按时间划分,数据热点分布不均(历史数冷当前数据热),导致节点负荷不均。
2、ID取模分片
-
缺点:扩容后需要迁移数据。
3、一致性Hash算法
-
优点:扩容后无需迁移数据。
转载链接
https://mp.weixin.qq.com/s/0ExWz5xoxqRPFgGJjJYD6g