日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Cassandra數(shù)據(jù)模型

Cassandra是一個開源的分布式數(shù)據(jù)庫,結合了Dynamo的Key/Value與Bigtable的面向列的特點。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設、網(wǎng)站制作與策劃設計,濟寧網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:濟寧等地區(qū)。濟寧做網(wǎng)站價格咨詢:028-86922220

Cassandra的特點如下:

1.靈活的schema:不需要象數(shù)據(jù)庫一樣預先設計schema,增加或者刪除字段非常方便(on the fly)。

2.支持range查詢:可以對Key進行范圍查詢。

3.高可用,可擴展:單點故障不影響集群服務,可線性擴展。
我們可以將Cassandra的數(shù)據(jù)模型想象成一個四維或者五維的Hash。

Column

Column是Cassandra中最小的數(shù)據(jù)單元。它是一個3元的數(shù)據(jù)類型,包含:name,value和timestamp。

將一個Column用JSON的形式表現(xiàn)出來如下:

 
 
 
 
  1. {  // 這是一個column     
  2. name: "逖靖寒的世界",    
  3. value: "gpcuster@gmali.com",   
  4. timestamp: 123456789  
  5. }  

為了簡單起見,我們可以忽略timestamp。就把column想象成一個name/value即可。

注意,這里提到的name和value都是byte[]類型的,長度不限。

SuperColumn

我們可以將SuperColumn想象成Column的數(shù)組,它包含一個name,以及一系列相應的Column。

將一個SuperColumn用JSON的形式表現(xiàn)如下:

 
 
 
 
  1. {     
  2. // 這是一個SuperColumn     
  3. name: "逖靖寒的世界",  
  4.  // 包含一系列的Columns   
  5. value: {    
  6. street: {name: "street", value: "1234 x street", timestamp: 123456789},     
  7.  city: {name: "city", value: "san francisco", timestamp: 123456789},     
  8. zip: {name: "zip", value: "94107", timestamp: 123456789},    
  9. }    

Columns和SuperColumns都是name與value的組合。最大的不同在于Column的value是一個“string”,而SuperColumn的value是Columns的Map。

還有一點需要注意的是:SuperColumn’本身是不包含timestamp的。

ColumnFamily

ColumnFamily是一個包含了許多Row的結構,你可以將它想象成RDBMS中的Table。

每一個Row都包含有client提供的Key以及和該Key關聯(lián)的一系列Column。

我們可以看看結構:

 
 
 
 
  1. UserProfile = {   
  2. // 這是一個ColumnFamily   
  3. phatduckk: {     
  4. // 這是對應ColumnFamily的key    
  5. // 這是Key下對應的Column    
  6.  username: "gpcuster",    
  7.  email: "gpcuster@gmail.com",   
  8. phone: "6666"     
  9.  }, // 第一個row結束   
  10. ieure: {    
  11.  // 這是ColumnFamily的另一個key   
  12. //這是另一個Key對應的column   
  13.  username: "pengguo",   
  14.  email: "pengguo@live.com",    
  15.  phone: "888"   
  16.  age: "66"    
  17.  },    
  18.  }  

ColumnFamily的類型可以為Standard,也可以是Super類型。

我們剛剛看到的那個例子是一個Standard類型的ColumnFamily。Standard類型的ColumnFamily包含了一系列的Columns(不是SuperColumn)。

Super類型的ColumnFamily包含了一系列的SuperColumn,但是并不能像SuperColumn那樣包含一系列Standard ColumnFamily。

這是一個簡單的例子:

 
 
 
 
  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.  }  

Keyspace

Keyspace是我們的數(shù)據(jù)最外層,你所有的ColumnFamily都屬于某一個Keyspace。一般來說,我們的一個程序應用只會有一個Keyspace。

簡單測試

我們將Cassandra運行起來以后,啟動命令行,執(zhí)行如下操作:

 
 
 
 
  1. cassandra> set Keyspace1.Standard1['jsmith']['first'] = 'John'   
  2. Value inserted.   
  3. cassandra> set Keyspace1.Standard1['jsmith']['last'] = 'Smith'   
  4. Value inserted.   
  5. cassandra> set Keyspace1.Standard1['jsmith']['age'] = '42'   
  6. Value inserted. 

這個時候,Cassandra中就已經(jīng)有3條數(shù)據(jù)了。

其中插入數(shù)據(jù)的各個字段含義如下:

接下來,我們執(zhí)行查詢操作:

 
 
 
 
  1. cassandra> get Keyspace1.Standard1['jsmith']   
  2.   (column=age, value=42; timestamp=1249930062801)   
  3.   (column=first, value=John; timestamp=1249930053103)   
  4.   (column=last, value=Smith; timestamp=1249930058345)   
  5. Returned 3 rows. 

這樣,我們就可以將之前插入的數(shù)據(jù)查詢出來了。

排序

有一點需要明確,我們使用Cassandra的時候,數(shù)據(jù)在寫入的時候就已經(jīng)排好順序了。

在某一個Key內(nèi)的所有Column都是按照它的Name來排序的。我們可以在storage-conf.xml文件中指定排序的類型。

目前Cassandra提供的排序類型有:BytesType, UTF8Type,LexicalUUIDType, TimeUUIDType, AsciiType,和LongType。

現(xiàn)在假設你的原始數(shù)據(jù)如下:

 
 
 
 
  1. {name: 123, value: "hello there"},   
  2. {name: 832416, value: "kjjkbcjkcbbd"},   
  3. {name: 3, value: "101010101010"},   
  4. {name: 976, value: "kjjkbcjkcbbd"} 

當我們storage-conf.xml文件中指定排序的類型為LongType時:


排序后的數(shù)據(jù)就是這樣的:

 
 
 
 
  1. {name: 3, value: "101010101010"},     
  2. {name: 123, value: "hello there"},   
  3. {name: 976, value: "kjjkbcjkcbbd"},   
  4. {name: 832416, value: "kjjkbcjkcbbd"} 

如果我們指定排序的類型為UTF8Type

 
 
 
 
  1.    
  2.  

排序后的數(shù)據(jù)就是這樣的:

 
 
 
 
  1. {name: 123, value: "hello there"},      
  2. {name: 3, value: "101010101010"},   
  3. {name: 832416, value: "kjjkbcjkcbbd"},   
  4. {name: 976, value: "kjjkbcjkcbbd"} 

大家可以看到,指定的排序類型不一樣,排序的結果也是完全不同的。

對于SuperColumn,我們有一個額外的排序維度,所以我們可以指定CompareSubcolumnsWith來進行另一個維度的排序類型。

假設我們的原始數(shù)據(jù)如下:

 
 
 
 
  1. { // first SuperColumn from a Row   
  2.     name: "workAddress",   
  3.     // and the columns within it   
  4.     value: {   
  5.         street: {name: "street", value: "1234 x street"},   
  6.         city: {name: "city", value: "san francisco"},   
  7.         zip: {name: "zip", value: "94107"}   
  8.     }   
  9. },   
  10. { // another SuperColumn from same Row   
  11.     name: "homeAddress",   
  12.     // and the columns within it   
  13.     value: {   
  14.         street: {name: "street", value: "1234 x street"},   
  15.         city: {name: "city", value: "san francisco"},   
  16.         zip: {name: "zip", value: "94107"}   
  17.     }   

然后我們定義CompareSubcolumnsWith和CompareWith的排序類型都是UTF8Type,那么排序后的結果為:

 
 
 
 
  1. {   
  2.     // this one's first b/c when treated as UTF8 strings   
  3.     { // another SuperColumn from same Row   
  4.         // This Row comes first b/c "homeAddress" is before "workAddress"              
  5.         name: "homeAddress",   
  6.         // the columns within this SC are also sorted by their names too   
  7.         value: {   
  8.             // see, these are sorted by Column name too   
  9.             city: {name: "city", value: "san francisco"},                  
  10.             street: {name: "street", value: "1234 x street"},   
  11.             zip: {name: "zip", value: "94107"}   
  12.         }   
  13.     },          
  14.     name: "workAddress",   
  15.     value: {   
  16.         // the columns within this SC are also sorted by their names too   
  17.         city: {name: "city", value: "san francisco"},              
  18.         street: {name: "street", value: "1234 x street"},   
  19.         zip: {name: "zip", value: "94107"}   
  20.     }   

再額外提一句,Cassandra的排序功能是允許我們自己實現(xiàn)的,只要你繼承org.apache.cassandra.db.marshal.IType就可以了。


名稱欄目:詳解Cassandra數(shù)據(jù)模型
文章出自:http://www.5511xx.com/article/ccosgeh.html