ShardingRelating
拆分
在集中式数据库中是一个大表,在分布式数据库中则创建多个分片表。
1、水平拆分
万言不如一例。
设表Customer
Id |
Name |
1 |
A |
2 |
B |
3 |
C |
4 |
D |
5 |
D |
假设有2个虚拟分片,按字段Id进行分片则有
Id |
Name |
拆分算法 |
所在分片 |
1 |
A |
1%2 |
B |
2 |
B |
2%2 |
A |
3 |
C |
3%2 |
B |
4 |
D |
4%2 |
A |
5 |
D |
5%2 |
B |
于是数据以行为单位拆分到不同的分片数据库中去
Shard A 数据库
|
Shard B 数据库
|
同理,若按字段Name进行分片则有
Id |
Name |
拆分算法 |
所在分片 |
1 |
B |
B.hashCode %2 = 66 %2 |
A |
2 |
C |
C.hashCode %2 = 67 %2 |
B |
3 |
C |
C.hashCode %2 = 67 %2 |
B |
4 |
D |
D.hashCode %2 = 68 %2 |
A |
5 |
D |
D.hashCode %2 = 68 %2 |
A |
综合
类型 |
描述 |
例子 |
Global |
每个分片都存储着相同的copy |
Table Customer: 5 recs. Shard 1: 5 recs, shard 2: 5 recs. |
Random |
简单地随机分片 |
Table Customer: 5 recs. Shard 1: 1 recs, shard 2: 4 recs. |
水平拆分 |
按各种分片算法及拆分字段,把数据按行拆分 |
算法如: 虚拟ShardId = shardingKeyValue%虚拟分片数(long) 虚拟ShardId = shardingKeyValue.hashCode%虚拟分片数 (string) |
垂直拆分 |
把数据按列拆分 |
(后补) |