当节点分布在高延迟连接上时,NoSQL数据中心感知功能是否支持快速读写?

当节点分布在高延迟连接上时,NoSQL数据中心感知功能是否支持快速读写?,nosql,Nosql,我们有一个数据系统,可以在几个地理位置进行写入和读取,这些地理位置之间有很高的网络延迟(跨越几个大陆,但不跨越)。我们可以接受“最后一次写入成功”冲突解决方案,尤其是因为编辑无法进行有意义的合并 理想情况下,我希望使用一个分布式系统,它允许快速的本地读写,并在后台处理通过慢速连接进行的复制和写传播。Voldemort或Cassandra中的数据中心感知功能是否能够实现这一点 要么是这样,要么我们自己滚,可能是基于使用类似 我们自己解决冲突 您应该能够获得您想要使用的行为。(我无法与卡桑德拉交谈,

我们有一个数据系统,可以在几个地理位置进行写入和读取,这些地理位置之间有很高的网络延迟(跨越几个大陆,但不跨越)。我们可以接受“最后一次写入成功”冲突解决方案,尤其是因为编辑无法进行有意义的合并

理想情况下,我希望使用一个分布式系统,它允许快速的本地读写,并在后台处理通过慢速连接进行的复制和写传播。Voldemort或Cassandra中的数据中心感知功能是否能够实现这一点

要么是这样,要么我们自己滚,可能是基于使用类似
我们自己解决冲突

您应该能够获得您想要使用的行为。(我无法与卡桑德拉交谈,但想象一下,同样可以使用它。)

中的关键设置将是:

  • 复制因子-这是数据存储的总次数。每个put或delete操作最终都必须命中这么多节点。复制因子为n意味着可以在不丢失数据的情况下容忍多达n-1个节点故障

  • required reads—在不引发异常的情况下可以成功执行的最少读取次数

  • required writes(必需写入)-在客户端不返回异常的情况下可以成功的最少写入次数


因此,对于您的情况,复制将被设置为符合冗余要求的任何数字,而必需的读取和必需的写入都将被设置为1。读和写操作会很快返回,并伴随着数据过时或丢失的风险,数据只会在之后复制到其他节点。

我没有伏地魔的经验,所以我只能对卡桑德拉发表评论

您可以将Cassandra部署到多个DC间延迟高于几毫秒的数据中心(请参阅)

为了确保快速本地读取,您可以配置集群将数据复制到每个数据中心的特定数量的节点(请参阅)。例如,您指定每个数据中心中应始终有两个副本。因此,即使您丢失了数据中心中的一个节点,您仍然可以在本地读取数据

写请求可以发送到Cassandra集群中的任何节点。因此,对于快速写入,您的客户端将始终与本地节点通信。接收请求的节点(“协调器”)将在后台将数据复制到其他节点(在其他数据中心)。如果节点关闭,写入请求仍将成功,协调器将在稍后将数据复制到失败的节点(“提示切换”)

冲突解决基于客户端提供的时间戳


如果您需要的不仅仅是最终的一致性,Cassandra提供了几种一致性选项(包括支持数据中心的选项)。

如果您打算否决投票,如果您可以添加评论让我知道原因,那就太好了?我认为这是一个合理的问题。向克里斯和布拉迪布拉致歉和感谢。显然,虽然这两个都是很好的答案,但我不允许分享奖金(参见)。