首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cassandra:不一致的柱族

cassandra:不一致的柱族
EN

Stack Overflow用户
提问于 2014-10-22 19:11:51
回答 1查看 72关注 0票数 0

取自http://www.ibm.com/developerworks/library/os-apache-cassandra/中的示例。假设我们关注两个实体:书籍和标签。一本书有多个标签,所以它们之间的关系是1:M。

根据这篇文章,我们应该创建两个列族:BooksTags2BooksIndex。前者存储关于一本书的所有信息(包括它的所有标签),而后者是一个从标签映射到书籍的索引,因此对于给定的标签,我们可以快速找到具有该标签的所有书籍。所有这些看起来都很好。但我有一个问题:

考虑如何将新书添加到数据库:(1)将新行添加到列族Books中,(2)更新Tags2BooksIndex以将新书添加到与此书关联的所有标记行。

假设在我们完成步骤(1)后2秒,新书行已经复制到它应该运行的所有节点,并且步骤(2)仍在进行中。现在,如果我从books读取新书行以获取标记,然后使用此标记检查Tags2BooksIndex,则可能无法从Tags2BooksIndex找到新书,因为它尚未完全更新,或者更新尚未复制到所有副本节点。

如何处理这种情况?将2秒替换为2毫秒,我们仍然有一个不一致的时间窗口。我想知道处理这种情况的“正确/实际”方法。

EN

回答 1

Stack Overflow用户

发布于 2014-10-22 23:00:32

Cassandra属于CAP的AP一侧。它牺牲了一致性。对于Cassandra2.x中的批处理语句,有一些方法可以提供帮助:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/batch_r.html

尽管这里真正的问题是,这种不一致的后果会是什么?这是一个2分钟的窗口,在此期间,您的搜索不会返回一个标签的新书?这是灾难性的吗?在容错分布式系统中,您经常不得不接受不一致的情况,或者牺牲可用性,因为分区可以并且将会发生。如果您的数据模型确实需要两个单独的原子突变,那么批处理语句可以提供帮助,但它会占用一些可用性。如果你可以接受一点不一致,那么你仍然是可用的。这归结于您特定的业务需求,即什么是可接受的,什么是不能接受的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26506130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档