自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Cassandra數(shù)據(jù)模型

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文將為大家介紹的是Cassandra數(shù)據(jù)模型,希望通過這些例子,能讓大家更好的理解NoSQL的精髓。

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

Cassandra的特點(diǎn)如下:

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

2.支持range查詢:可以對(duì)Key進(jìn)行范圍查詢。

3.高可用,可擴(kuò)展:?jiǎn)吸c(diǎn)故障不影響集群服務(wù),可線性擴(kuò)展。
我們可以將Cassandra的數(shù)據(jù)模型想象成一個(gè)四維或者五維的Hash。

Column

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

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

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

為了簡(jiǎn)單起見,我們可以忽略timestamp。就把column想象成一個(gè)name/value即可。

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

SuperColumn

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

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

  1. {     
  2. // 這是一個(gè)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是一個(gè)“string”,而SuperColumn的value是Columns的Map。

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

ColumnFamily

ColumnFamily是一個(gè)包含了許多Row的結(jié)構(gòu),你可以將它想象成RDBMS中的Table。

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

我們可以看看結(jié)構(gòu):

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

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

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

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

這是一個(gè)簡(jiǎn)單的例子:

  1. AddressBook = { // 這是一個(gè)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結(jié)束   
  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都屬于某一個(gè)Keyspace。一般來說,我們的一個(gè)程序應(yīng)用只會(huì)有一個(gè)Keyspace。

簡(jiǎn)單測(cè)試

我們將Cassandra運(yùn)行起來以后,啟動(dòng)命令行,執(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. 

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

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

image 

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

  1. cassandra> get Keyspace1.Standard1['jsmith']   
  2.   (column=agevalue=42timestamp=1249930062801)   
  3.   (column=firstvalue=Johntimestamp=1249930053103)   
  4.   (column=lastvalue=Smithtimestamp=1249930058345)   
  5. Returned 3 rows. 

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

排序

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

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

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

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

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

當(dāng)我們storage-conf.xml文件中指定排序的類型為L(zhǎng)ongType時(shí):

<!--
      ColumnFamily 在 storage-conf.xml 中定義
-->
<ColumnFamily CompareWith="LongType" Name="CF_NAME_HERE"/>

排序后的數(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.       ColumnFamily 在 storage-conf.xml 中定義  
  3. -->   
  4. <ColumnFamily CompareWith="UTF8Type" Name="CF_NAME_HERE"/> 

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

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

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

對(duì)于SuperColumn,我們有一個(gè)額外的排序維度,所以我們可以指定CompareSubcolumnsWith來進(jìn)行另一個(gè)維度的排序類型。

假設(shè)我們的原始數(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,那么排序后的結(jié)果為:

  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的排序功能是允許我們自己實(shí)現(xiàn)的,只要你繼承org.apache.cassandra.db.marshal.IType就可以了。

原文標(biāo)題:大話Cassandra數(shù)據(jù)模型

鏈接: http://www.cnblogs.com/gpcuster/archive/2010/03/12/1684072.html

【編輯推薦】
  1. 詳解NoSQL數(shù)據(jù)庫Apache Cassandra的配置
  2. 漫談Cassandra客戶端的使用
  3. 關(guān)系數(shù)據(jù)庫的末日是否已經(jīng)來臨
  4. 超越關(guān)系型數(shù)據(jù)庫 pureXML技術(shù)應(yīng)用及展望
  5. 新興數(shù)據(jù)庫打破整個(gè)舊規(guī)則
  6. 探尋關(guān)系數(shù)據(jù)庫和ORM的最佳替代者
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2022-11-15 08:21:49

物聯(lián)網(wǎng)數(shù)據(jù)模型Apache

2021-02-28 22:20:25

2009-09-18 14:07:51

LINQ to SQL

2012-03-05 10:54:03

NoSQL

2021-01-27 05:34:33

Python對(duì)象模型

2010-02-22 09:09:02

Visual Stud

2010-05-31 17:18:39

Cassandra數(shù)據(jù)

2017-06-27 10:08:29

數(shù)據(jù)倉庫模型

2016-11-02 12:32:47

數(shù)據(jù)分析大數(shù)據(jù)模型

2010-08-11 09:29:25

FlexJava數(shù)據(jù)模型

2010-03-16 14:05:19

Cassandra

2021-07-14 10:09:05

架構(gòu)模型數(shù)據(jù)

2022-08-15 14:49:12

物聯(lián)網(wǎng)數(shù)據(jù)模型存儲(chǔ)

2022-12-09 09:39:01

數(shù)據(jù)治理

2020-10-14 06:28:38

數(shù)據(jù)倉庫模型

2016-01-07 11:25:12

數(shù)據(jù)模型訓(xùn)練數(shù)據(jù)

2009-11-12 16:39:02

ADO.NET實(shí)體數(shù)據(jù)

2009-07-20 14:14:03

PowerDesign

2023-02-26 17:46:03

2024-11-15 11:43:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)