数据系统在分布式系统中会有三级划分:
数据集(如 Database、Bucket)——分片(Partition)——数据条目(Row、KV)。
通常,每个分片只属于一个数据集,每个数据条目只属于一个分片。单个分片,就像一个小点的数据库。但是,跨分区的操作的,就要复杂的多。
本章首先会介绍数据集切分的方法,并讨论索引和分片的配合;然后将会讨论分片再平衡,集群节点增删会引起数据再平衡;最后,会探讨数据库如何将请求路由到相应的分片并执行。
分片通常和复制结合使用。每个分片有多个副本,可以分散到多机上去(更泛化一点:多个容错阈);同时,每个机器含有多个分片,但通常不会有一个分片的两个副本放到一个机器上。
如果使用多副本使用主从模型,则分片、副本、机器关系如下:
分片(Partition) 的本质是对数据集合的划分。但在实践中,可以细分为两个步骤:
因此,在分片时,有一些基本要求:
这两条是互相依赖和制约的。比如说,假设分片数目确定,为了分片均匀,每来一条数据,我们可以等概率随机选择一个分片;但在查询每个数据条目时,就得去所有机器上都查一遍。