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