您好,登錄后才能下訂單哦!
如何進行Cassandra模型以及架構的分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
NoSql的世界紛繁復雜,出去掉Redis等內存型的數據庫之外,在整個NoSQl領域比較認可的是 Cassandra,Hbase,以及MongoDB。
對于Mongo,目前本ID的系列博文已經有部分,而Hbase有關的部分還未補充,待補。
1:Cassandra采用了gossip作為集群中節點的通信協議,該協議整個節點都處于同等的地位,沒有主從
之分,這就使得任一節點的推出都不會導致整個集群的失效。
2:Cassandra 和Hbase在底層的架構設計都是借鑒了 Google Big Table的思想來構建自己的系統,而
Cassandra的創新就是將原本用在文件共享架構的P2P (Peer to Peer)引入到了NoSql
P2P的一大特點就是去中心化,集群之中的所有節點都有著同等的地位,這極大的避免了單個節點退出,
而使整個集群不能工作的可能,與之形成對比的是Hbase采用了Master/Slave的方式,這就存在了單點失效的可能。
1.2:高擴展性
隨著時間的推移,集群中原有的規模不足以存儲新增加的數據,目前NoSql的數據都已經實現了
級聯的擴展,非常容易實現添加新的節點到已有集群,操作簡單。
1.3:最終一致性
在這里再次強調一下最終一致性:Cassandra采用了最終的一致性:
最終的一致性是指分布式系統之中的一個數據對象的多個副本盡管在短時間內可能出現不一致,但是經過
一段時間以后,這些副本最終會達到一致。
Cassandra是優先保證了AP,也就是我們經常說到的可用性,和分區容錯性。
通常而言,大部分的NoSQL key-value的模式都是寫入非常的高效,畢竟是為了大量數據的插入所涉及,
可是在數據的讀取方面那就依據不同的情況而不同。
1 :如果是單個讀取指定了的key,那就回很快的返回結果。 -》指定key查詢。
2 : 如果是范圍查詢,由于查詢的目標可能存儲在多個節點之上,這就需要要對多個節點
來進行查詢,速度會比較慢。
3 :全表掃。毫無疑問,全表掃描數據,會非常的低效。
由于 Cassandra采用了類似與BigTable的數據結構組織,Cassandra和Hbase比較類似。所以Cassandra和Hbase相比也存在著許多相同的概念。
如果抽象來看Cassandra。整個Cassandra都是一個五維的空間
column:列,在Cassandra之中是最小的一個數據單元,它包含了一個三元的數據類型:
1: { // 這是一個column 2: name: "美麗新世界", 3: value: "gpcuster@gmali.com", 4: timestamp: 123456789 5: }
upercolumn:超級列
我們可以將SuperColumn想象成Column的數組,他包含一個name。以及一系列的Column
將一個SuperColumn 用JSON的形式表示如下
{ // 這是一個SuperColumn 2: name: “美麗的新世界", 3: // 包含一系列的Columns 4: value: { 5: street: {name: "street", value: "1234 x street", timestamp: 123456789}, 6: city: {name: "city", value: "san francisco", timestamp: 123456789}, 7: zip: {name: "zip", value: "94107", timestamp: 123456789}, 8: } 9: }
Columns和SuperColumns都是一個Key Value ,一個name和一個String的組合,最大的不同在于Column的Value是一個“String”,而SuperColumn的value是一個Cloumns的Map
Column family是一個包含了一個許多行[Row]的結構,你可以將它想象成RDBMS中的Table,每一個行都包含有Clinet提供的Key和該KEY關聯的的一系列的Column,我們可以看到如下的結構:
1: UserProfile = { // 這是一個ColumnFamily 2: phatduckk: { // 這是對應ColumnFamily的key 3: // 這是Key下對應的Column 4: username: "gpcuster", 5: email: "gpcuster@gmail.com", 6: phone: "6666" 7: }, // 第一個row結束 8: ieure: { // 這是ColumnFamily的另一個key 9: //這是另一個Key對應的column 10: username: "pengguo", 11: email: "pengguo@live.com", 12: phone: "888" 13: age: "66" 14: }, 15: }
1: UserProfile = { // 這是一個ColumnFamily 2: phatduckk: { // 這是對應ColumnFamily的key 3: // 這是Key下對應的Column 4: username: "gpcuster", 5: email: "gpcuster@gmail.com", 6: phone: "6666" 7: }, // 第一個row結束 8: ieure: { // 這是ColumnFamily的另一個key 9: //這是另一個Key對應的column 10: username: "pengguo", 11: email: "pengguo@live.com", 12: phone: "888" 13: age: "66" 14: }, 15: }
ColumnFamily的類型可以是Standard,也可以是Super的類型,我們剛剛看到的例子是一個Stand類型的ColumnFamily。除此之外,還有另外的一種形式,也就是不每一行不僅僅只是一個列,還可能是一個CF
如下所示:
1: AddressBook = { // 這是一個Super類型的ColumnFamily 2: phatduckk: { // key 3: friend1: {street: "8th street", zip: "90210", city: "Beverley Hills", state: "CA"}, 4: John: {street: "Howard street", zip: "94404", city: "FC", state: "CA"}, 5: Kim: {street: "X street", zip: "87876", city: "Balls", state: "VA"}, 6: Tod: {street: "Jerry street", zip: "54556", city: "Cartoon", state: "CO"}, 7: Bob: {street: "Q Blvd", zip: "24252", city: "Nowhere", state: "MN"}, 8: ... 9: }, // row結束 10: ieure: { // key 11: joey: {street: "A ave", zip: "55485", city: "Hell", state: "NV"}, 12: William: {street: "Armpit Dr", zip: "93301", city: "Bakersfield", state: "CA"}, 13: }, 14: }
注意,在Hbase之中也有一個CL的概念。
3:keySpace
KeySpace是我們最外層的數據結構,通常的情況,我們的應用程序只有一個KeySpace,簡單點來講,keySpace,可以把keySpace想象成為RDBMS之中的 database。
相對與關系型的數據庫的三層結構:
database -> table -> colum而言。
cassandra的結構層次如下:
keyspace->column family>【column|super column】
看完上述內容,你們掌握如何進行Cassandra模型以及架構的分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。