取自http://www.ibm.com/developerworks/library/os-apache-cassandra/中的示例。假设我们关心两个实体:书籍和标签。一本书有多个标签,所以它们之间的关系是1:M。cassandra:不一致的列族
根据文章,我们应该创建两个列族:Books
和Tags2BooksIndex
。前者存储关于一本书的所有信息(包括其所有标签),而后者是一个从标签映射到书籍的索引,因此对于给定的标签,我们可以快速找到具有该标签的所有书籍。所有这些看起来很好。但我有一个问题:
考虑如何将新书添加到数据库:(1)将新行添加到列家族Books
,(2)更新Tags2BooksIndex
将新书添加到所有与这本书。
假设我们完成步骤(1)2秒后,新的书籍行已被复制到它应该去的所有节点,并且步骤(2)仍在继续。现在,如果我从books
读取这个新书籍以获取标签,然后使用此标签检查Tags2BooksIndex
,则可能发生以下情况:我无法从Tags2BooksIndex
中找到新书,因为它尚未完全更新,或者更新尚未被复制到所有副本节点。
如何处理这种情况?更换2秒2毫秒,我们仍然有不一致的时间窗口。我想知道处理这种情况的“正确/实用”方法。