发布于 2010-02-24 00:01:52
切分几乎是复制的对立面,尽管它们是正交的概念,并且很好地结合在一起。
切分(也称为分区)是按键将数据拆分;复制(也称为镜像)是复制所有数据。
分片有助于提高性能,减少任何一个资源的命中和内存负载。复制对于获得高可用性的读取非常有用。如果从多个副本读取,也会降低所有资源的命中率,但所有资源的内存需求保持不变。应该注意的是,虽然您可以写入一个从,复制是主->从只。所以你不能用这种方式来书写。
假设您有以下元组: 1:Apple,2:香蕉,3:Cherry,4:榴莲,我们有两台机器A和B。通过分片,我们可以在机器A上存储密钥2,4;在机器B上存储密钥1,3;在机器B上,我们存储密钥1,2,3,4在机器A上,1,2,3,4在机器B上。
切分通常是通过对键执行一致的散列来实现的。上面的示例是用以下哈希函数h(X){返回x%2==0?A:B}实现的。
为了组合这些概念,我们可以复制每个碎片。在上述情况下,机器A的所有数据(2,4)都可以复制到机器C上,而机器B的所有数据(1,3)可以复制到机器D上。
任何键值存储( Redis只是其中的一个例子)都支持切分,尽管某些交叉键功能将不再起作用。Redis支持立即复制。
发布于 2010-11-09 05:43:53
简单地说,这两个概念之间的根本区别是分片用于缩放写入,而复制用于缩放读取。正如Alex已经提到的,复制也是实现HA的解决方案之一。
是的,如果您考虑如何在集群中的节点之间复制碎片,它们通常都一起使用。
关于您的第三个问题,而不是RAM-刷新选项,最好使用Redis追加的文件(AOF)。只需花费少量的代价(就写入速度而言),您的写操作就可以获得更高的可靠性。它非常像mysql二进制日志。1fsync/秒是建议使用的选项。
发布于 2021-07-14 12:20:17
使用复制并将分割在一起
如果您同时需要高可用性和更好的性能,则可以同时使用复制和分片来提供此功能。通过切分,您将拥有两个或多个实例,它们都具有基于键的特定数据。然后,您可以复制这些实例中的每一个来生成一个同时被复制和分片的数据库,这将同时提供可靠性和速度!

https://stackoverflow.com/questions/2139443
复制相似问题