2014-01-30 56 views
0

這是根據官方文件。cassandra的寫作操作序列。爲什麼它沒有問題?

All writes are sequential, which is the primary reason that writes perform so well in 
Cassandra. No reads or seeks of any kind are required for writing a value to Cassandra 
because all writes are append operations. 

很困惑,因爲萬一有插入操作和重複的主鍵的情況下,將卡珊德拉首先從memTable中或在需要的情況下搜索,如果數據被刷新到的SSTable。

因此,如果用戶ID值123已經存在,我們插入123行,它失敗,因爲它內部它根據該密鑰讀取。這是我的疑問,如果有人可以澄清請求。

回答

2

卡桑德拉沒有重複鍵的概念。每次寫入Cassandra的更改都有一個時間戳,Cassandra會執行時間戳解析,這意味着具有最新時間戳的數據總是會獲得並返回。在讀取路徑中,如果存在並且具有最新時間戳的數據被返回,則來自SSTable的密鑰的內容與memtable中的相同密鑰的內容合併。沒有任何值得每列都有時間戳。

在例如:

假設在時間139106495223456你寫了以下內容:

 
123 => {column1:foo column1_timstamp:139106495223456} 

再經過幾微秒(139106495223470),你寫的是同一個鍵:

 
123 => {column1:bar column1_timstamp:139106495223470} 

兩個操作會成功。當你嘗試閱讀kay時,由於它具有最新的時間戳,因此將返回帶有column1:bar的那個。

現在你可能想知道這是如何與刪除工作。除了正在刪除的列/鍵將用墓碑標記外,刪除的寫法與此相同。如果墓碑具有激光時間戳,則該行或列將被視爲已刪除。

您可能想知道這是如何在順序寫入磁盤時發揮作用的,因爲這些墓碑或舊列會消耗空間。這是真的。這就是爲什麼壓實存在,並且需要緊縮和移除過期的Tomstones。

你可以閱讀更多關於Cassandra的讀/寫路徑在這裏:

http://www.planetcassandra.org/blog/category/Cassandra%20read%20path http://www.datastax.com/docs/1.1/dml/about_writes

+0

感謝。這有助於。 – user2775185

相關問題