之前我们讲解了数据的复制,也就是说让多台机器保留相同的副本,适合用于读多写少的问题,我们这里讲的是数据的分片,分片的目的是将数据进行切分让他们分布到不同的机器上,其中一个动机是数据可能很大如果单纯存放到一个机器的话,可能一个机器存不下,或者多台机器协同工作,地理位置分布不同,需要读取的数据也不同,我们也可以把他们想要的数据存在离他们比较近的地理位置上。

数据的分片和路由-LMLPHP

  • 分片通常结合复制来使用
  • 分片是不公平的,这种情况叫做数据的偏斜
  • 负载比较高的地方叫做热点

范围分片

所有的数据都是以(k,v)的形式存放的,将所有含有记录的主键进行排序,按照范围划分不同的分片最后存放在不同的机器上。 数据的管理采用LSM树。

哈希分片

减少偏斜和热点的影响,当然是设计一个好的哈希函数。
哈希分片的方式

一致性哈希算法

分片和次级索引

什么是二级索引:比如一个student表 主键是id 然后我想查找id = 1并且穿红色衣服的人学生姓名,然后我的二级索引就可以是衣服颜色
分为基于文档的二级索引和基于关键词的二级索引,基于文档的二级索引 每个分片是完全独立的,存取文档的时候需要特别注意。根据关键词的分片读取很有效率,但是存的时候很费劲。

分片再平衡

01-02 16:54