Sharding几乎是复制的对立面,尽pipe它们是正交的概念,并且可以很好地协同工作。
分片(Sharding)也称为分区(partitioning),是通过密钥分割数据, 而复制也称为镜像,就是复制所有的数据。
分片可以提高性能,减less任何资源的命中和内存负载。 复制对读取的高可用性很有用。 如果您从多个副本中读取数据,则还会降低所有资源的命中率,但所有资源的内存要求保持不变。 应该注意的是,虽然你可以写入一个从机,但复制只有主机 – >从机。 所以你不能用这种方式来扩展写入。
假设你有以下元组:[1:苹果],[2:香蕉],[3:樱桃],[4:榴莲],我们有两台机器A和B.使用分片,我们可以存储键2,4机器A; 和机器B上的键1,3。通过复制,我们在机器A上存储键1,2,3,4和在机器B上存储1,2,3,4。
分片通常通过对密钥执行一致的散列来实现。 上面的例子是用下面的哈希函数h(x){return x%2 == 0?A:B}实现的。
为了结合这些概念,我们可能会复制每个分片。 在上述情况下,机器A的所有数据(2,4)都可以在机器C上复制,而机器B的所有数据(1,3)可以在机器D上复制。
任何键值存储(Redis只是其中一个例子)都支持分片,尽pipe某些交叉键function将不再起作用。 Redis支持开箱即用的复制。