在Cassandra中,每行(由一個鍵尋址)包含一個或多個「列」。列本身是鍵值對。列名不需要預定義,即結構不固定。一行中的列根據其鍵(名稱)按排序順序存儲。
在某些情況下,您可能在一行中包含非常大量的列(例如,充當用於啓用特定種類查詢的索引)。 Cassandra可以高效地處理這種大型結構,並且可以檢索特定範圍的列。
還有一個更高層次的結構(不太常用)稱爲超級列,其中列包含嵌套(子)列。
您可以將整體結構視爲嵌套散列表/字典,其中包含2或3級密鑰。
普通列族:
row
col col col ...
val val val ...
超級列族:
row
supercol supercol ...
(sub)col (sub)col ... (sub)col (sub)col ...
val val ... val val ...
也有更高層次的結構 - 列科和keyspaces - 可以用來瓜分或將您的數據分組在一起。
也看到這個問題:從http://wiki.apache.org/cassandra/ArticlesAndPresentations
重新Cassandra: What is a subcolumn
或數據建模鏈接:面向文檔的數據庫對比 - 後者通常插入整個文件(通常是JSON),而在卡桑德拉可以處理各個列或超級列,並單獨更新這些列,即它們以不同的粒度級別工作。每列都有其自己的單獨時間戳/版本(用於協調分佈式羣集中的更新)。
Cassandra列值只是字節,但可以鍵入爲ASCII,UTF8文本,數字,日期等
當然,您可以通過插入包含JSON的列將Cassandra用作原始文檔存儲 - 但您不會獲得真正的面向文檔的存儲的所有功能。
來源
2011-09-27 08:13:33
DNA
那麼面向列的就像關係數據庫的表一樣,但翻轉過來,沒有模式要求?如果我要將Cassandra術語與MySQL術語進行比較,我該怎麼做?是一個像列家族還是密鑰空間的表?在面向文檔的情況下,你是否說你無法更新文檔中的單個關鍵字?看起來Casandra可以有子結構。 MongoDB和其他人喜歡它有這個功能嗎? – Luke
列家族就像一張桌子。一行就像一個表格行。列有點像數據庫列,只不過它們可以實時定義,所以在某些情況下可能有一個非常稀疏的表,或者每行中可能有不同的列。 – DNA
這取決於數據庫。在MongoDB中(面向文檔),你也可以更新每一個密鑰。 –