Do NoSQL数据中心感知功能可在节点分布在高延迟连接上时实现快速读取和写入



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

理想情况下,我希望使用一个分布式系统,该系统允许快速的本地读写,并在后台处理慢速连接上的复制和写传播。Voldemort或Cassandra中的数据中心感知功能是否提供了这一功能?

要么是这样,要么我们自己滚动,可能是基于使用类似的东西收集文章rsync和自己解决冲突。

你应该能够使用伏地魔获得你想要的行为。(我不能和卡桑德拉说话,但想象一下使用它也是可能的。)

配置中的关键设置为:

  • 复制因子--这是存储数据的总次数。每个放入或删除操作最终都必须命中这么多节点。复制因子n意味着可以容忍多达n-1个节点的故障而不会丢失数据。

  • 必需读取--在不引发异常的情况下可以成功读取的最少次数。

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

因此,对于您的情况,复制将被设置为对您的冗余需求有意义的任何数字,而必需的读取必须的写入都将被设置成1。读取和写入将快速返回,同时存在数据陈旧或丢失的风险,并且数据只会在之后复制到其他节点。

我对伏地魔没有任何经验,所以我只能评论卡桑德拉。

您可以将Cassandra部署到DC间延迟超过几毫秒的多个数据中心(请参阅http://spyced.blogspot.com/2010/04/cassandra-fact-vs-fiction.html)。

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

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

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

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

最新更新