Cassandra

Apache Cassandra 是一種分布式非關(guān)系型數(shù)據(jù)庫,具有高性能、可擴展、無中心化等特征。
一種column-based數(shù)據(jù)庫。
Cassandra所支持的基本數(shù)據(jù)模型。這些基本數(shù)據(jù)模型有:Column,Super Column,Column Family以及Keyspace。


Column

Super Column

(官方文檔對使用這個持謹慎意見)


Column Family

Keyspace

在抽象設(shè)計模型時,我們常常需要面對另外一個問題,那就是如何指定各Column Family所使用的各種鍵。在Cassandra相關(guān)的各類文檔中,我們常常會遇到以下一系列關(guān)鍵的名詞:Partition Key,Clustering Key,Primary Key以及Composite Key。那么它們指的都是什么呢?
Primary Key

Composite Key

Partition Key & Clustering Key

而在一個CQL語句中,WHERE等子句所標(biāo)示的條件只能使用在Primary Key中所使用的列。您需要根據(jù)您的數(shù)據(jù)分布決定到底哪些應(yīng)該是Partition Key,哪些應(yīng)該作為Clustering Key,以對其中的數(shù)據(jù)進行排序。

一個好的Partition Key設(shè)計常常會大幅提高程序的運行性能。首先,由于Partition Key用來控制哪個結(jié)點記錄數(shù)據(jù),因此Partition Key可以決定是否數(shù)據(jù)能夠較為均勻地分布在Cassandra的各個結(jié)點上,以充分利用這些結(jié)點。同時在Partition Key的幫助下,您的讀請求應(yīng)盡量使用較少數(shù)量的結(jié)點。這是因為在執(zhí)行讀請求時,Cassandra需要協(xié)調(diào)處理從各個結(jié)點中所得到的數(shù)據(jù)集。因此在響應(yīng)一個讀操作時,較少的結(jié)點能夠提供較高的性能。因此在模型設(shè)計中,如何根據(jù)所需要運行的各個請求指定模型的Partition Key是整個設(shè)計過程中的一個關(guān)鍵。一個取值均勻分布的,卻常常在請求中作為輸入條件的域,常常是一個可以考慮的Partition Key。

除此之外,我們也應(yīng)該好好地考慮如何設(shè)置模型的Clustering Key。由于Clustering Key可以用來在Partition內(nèi)部排序,因此其對于包含范圍篩選的各種請求的支持較好。


  • 去中心, 各個節(jié)點地位等同,通過多個副本機制避免單點故障。
  • 組成部分:節(jié)點、數(shù)據(jù)中心(相關(guān)節(jié)點集合?同一類數(shù)據(jù)嗎?)、集群(所有節(jié)點或者是所有數(shù)據(jù)中心)、提交日志(崩潰恢復(fù)機制,每個寫入操作都將寫入提交日志)、存儲表(提交日志后,數(shù)據(jù)將被寫入存儲表。有時,對于單列系列,將有多個內(nèi)容表。)SSTable(內(nèi)容達到閾值后,存儲到的數(shù)據(jù)磁盤文件)、Bloom filter(?特殊的緩存,每次查詢都會訪問,用途:用于測試元素是否是集合成員,通過這個找到SStable?)
  • 寫操作:
    寫操作

    數(shù)據(jù)首先被寫入節(jié)點的提交日志捕獲,然后存儲在內(nèi)存表中,當(dāng)內(nèi)存表滿時,數(shù)據(jù)將被寫入SStable。

  • 讀操作:
    讀操作
  • nosql偏好數(shù)據(jù)冗余,因為nosql一般無法做表關(guān)聯(lián)查詢
  • Keyspace相當(dāng)于一個數(shù)據(jù)庫, durable_writes表示是否在寫入數(shù)據(jù)前是否要進行 commit log,默認為true,如果為false則有可能丟失數(shù)據(jù)。還包括replication factory:復(fù)制因子(多少副本),Replica placement strategy : 復(fù)制策略(網(wǎng)絡(luò)結(jié)構(gòu))
  • Column Family:列家族, 可以認為是mysql中的表,是記錄的集合。
    column family示意圖
  • Column: Column Family由若干的記錄【像是一個大map】(key, column)組成,其中的key是一個主鍵,而column是這個鍵對應(yīng)的value。 而這個column呢, 實際還是一個map, 對應(yīng)著(column_name, column_value,timestamp[用于感知哪個是最新記錄])。(cassandra以列為中心,按列進行存儲,這應(yīng)該就是為什么叫做column-based的原因吧)
    column-based
  • cassandra的key:primary key(partition key+ clustering key),partition key:用于路由 記錄 至某個節(jié)點,clustering key:記錄按這個排序。
  • 整個數(shù)據(jù)結(jié)構(gòu)類似 map<partitionkey, sortedmap<clusterkey+column,value>> 所以查詢的時候只能由外層往內(nèi)層查詢。primarykey必須用=,因為指定分區(qū), clusterkey必須遵循最左匹配有點類似索引.
  • http://www.itdecent.cn/p/e678d6f812c3
  • 查詢

    整個primary key組成主鍵(不可重復(fù)),并且只能查主鍵。

  • 總結(jié)一下, 其實就是一個寫入快, 數(shù)據(jù)量大的一種查詢限定的數(shù)據(jù)庫。
  • 使用參見API。
  • cql很像sql, insert可以插入主鍵相同的數(shù)據(jù), 然后會覆蓋前一條, 在mysql is impossible!
  • 存儲是一列一列的, 整體是大的key-value對, 逐列向內(nèi)剝開。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容