取自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毫秒,我們仍然有不一致的時間窗口。我想知道處理這種情況的「正確/實用」方法。