Cassandra 的數據模型是基於列族(Column Family)的四維或五維模型。它借鑒了 Amazon 的 Dynamo 和 Google's Big Table 的數據結構和功能特點,采用Memtable的方式進行存儲。在 Cassandra 寫入數據之前,需要先記錄日志 ( Commitlog),然后數據開始寫入到 Column Family 對應的 Memtable 中,Memtable 是一種按照 key 排序數據的內存結構,在滿足一定條件時,再把 Memtable 的數據批量的刷新到磁盤上,存儲為 SSTable 。
1. Cassandra 的數據模型圖:
2.Cassandra 的數據模型的基本概念:
Cluster:Cassandra 的節點實例,它可以包含多個Keyspace。
Keyspace::用於存放 ColumnFamily 的容器,相當於關系數據庫中的 Schema 或 database。
ColumnFamily::用於存放 Column 的容器,類似關系數據庫中的 table 的概念 。
SuperColumn::它是一個特列殊的 Column, 它的 Value 值可以包函多個Column。
Column::Cassandra 的最基本單位。由name , value , timestamp組成。
3.Cassandra中數據存放規則
data:存儲真正的數據文件,既后面的SStable文件,可以指定多個目錄。
commitlog:存儲未寫入SSTable中的數據(在每次寫入之前先放入日志文件)。
cache:存儲系統中的緩存數據(在服務重啟的時候從這個目錄中加載緩存數據)。
4.Cassandra的特點如下:
1.靈活的schema:不需要象數據庫一樣預先設計schema,增加或者刪除字段非常方便(on the fly)。
2.支持range查詢:可以對Key進行范圍查詢。
3.高可用,可擴展:單點故障不影響集群服務,可線性擴展。
5.Cassandra內部數據的排序
有一點需要明確,我們使用Cassandra的時候,數據在寫入的時候就已經排好順序了。在某一個Key內的所有Column都是按照它的Name來排序的。我們可以在storage-conf.xml文件中指定排序的類型。目前Cassandra提供的排序類型有:BytesType, UTF8Type,LexicalUUIDType, TimeUUIDType, AsciiType,和LongType。Cassandra的排序功能是允許我們自己實現的,只要你繼承org.apache.cassandra.db.marshal.IType就可以了。
本文參考:http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/
http://www.cnblogs.com/ggzwtj/archive/2011/07/21/2113350.html
http://database.51cto.com/art/201005/202153.htm
感謝以上文章作者的奉獻和分享。