2012-06-01 65 views
3

假設我們有CF與用戶信息:的Apache Cassandra的架構設計與JSON

{ 
    123 => { first_name => Nick, last_name => Schiff, age => 23, city = NY } 
} 

還假設我們不要被列名進行搜索,我們使用這些信息只是爲了顯示數據。 列名也不經常更新個性。 (例如FIRST_NAME的變化)

可能是在這種情況下,單個編碼JSON是更好的主意:

{ 
    123 => { data = [json], city = NY } 
} 

,並留下「城市」,因爲我們必須說,我們會經常更新。

JSON的優點是:

  1. 容易的非正規化 - 你只是拷貝一列 - 例如「數據」。
  2. 你不需要知道列名,所以你不需要在刪除之前切片()。
  3. 模仿超級柱沒有組合鍵 - 這就像位(1)

的缺點,我可以看到:

  1. 沒有JSON的驗證值
  2. 卡桑德拉不知道存儲的值。

有人是這樣的嗎?有什麼我在這裏失蹤?

回答

2

這可能是一個合理的策略,具體取決於您的使用模式。以blob格式存儲數據的最大缺點是如何處理併發更新。假設您有2個進程,一個嘗試更新first_name字段,另一個嘗試更新age字段。每個進程都必須讀取該行以獲取當前blob,然後更新要更改的字段並將其寫回Cassandra。當所有的數據存儲在一個blob中時,第二個writer將基本上撤銷第一個的更改。

如果這些存儲爲單獨的列,則不存在更新衝突。

但是,也許您的記錄是不可變的,在這種情況下,此併發更新問題不會成爲問題。

+0

是的,正確的,我沒有提到它,但JSON(blob)數據沒有改變,至少不是獨立的。你要麼改變一切,要麼改變一切(沒有人需要改變名字)。 – Nick