之前我们讲解了数据的复制,也就是说让多台机器保留相同的副本,适合用于读多写少的问题,我们这里讲的是数据的分片,分片的目的是将数据进行切分让他们分布到不同的机器上,其中一个动机是数据可能很大如果单纯存放到一个机器的话,可能一个机器存不下,或者多台机器协同工作,地理位置分布不同,需要读取的数据也不同,我们也可以把他们想要的数据存在离他们比较近的地理位置上。
- 分片通常结合复制来使用
- 分片是不公平的,这种情况叫做数据的偏斜
- 负载比较高的地方叫做热点
范围分片
所有的数据都是以(k,v)的形式存放的,将所有含有记录的主键进行排序,按照范围划分不同的分片最后存放在不同的机器上。 数据的管理采用LSM树。
好处 | 缺点 |
---|---|
扫描比较方便甚至可以建立联合索引之类的 | 特定的访问模式会导致热点 |
哈希分片
减少偏斜和热点的影响,当然是设计一个好的哈希函数。
哈希分片的方式
R:实现简单,但是灵活性比较低
为了解决R的问题 引入了虚拟桶这个东西。
可扩展哈希在我之前的博客写过了,这里不再赘述。
一致性哈希算法