日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

cassandra框架模型之一——Colum排序,分区策略 Token,Partitioner bloom-filter,HASH

發布時間:2024/6/21 综合教程 51 生活家
生活随笔 收集整理的這篇文章主要介紹了 cassandra框架模型之一——Colum排序,分区策略 Token,Partitioner bloom-filter,HASH 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://asyty.iteye.com/blog/1202072

一、Cassandra框架
二、Cassandra數據模型
Colum / Colum Family, SuperColum / SuperColum Family
Colum排序
三、分區策略
Token,Partitioner
bloom-filter,HASH
四、副本存儲
五、網絡嗅探
六、一致性
Quorum NRW
維護最終一致性
七、存儲機制
CommitLog
MenTable
SSTable

一、Cassandra框架

圖1Cassandra

Cassandra是社交網絡理想的數據庫,適合于實時事務處理和提供交互型數據。以Amazon的完全分布式的Dynamo為基礎,結合了Google BigTable基于列族(Column Family)的數據模型,P2P去中心化的存儲,目前twitter和digg中都有使用。

在CAP特性上,HBase選擇了CP,Cassandra更傾向于AP,而在一致性上有所減弱。

Cassandra的類Dynamo特性有以下幾點:

l對稱的,P2P架構

n無特殊節點,無單點故障

l基于Gossip的分布式管理

l通過分布式hash表放置數據

n可插拔的分區

n可插拔的拓撲發現

n可配置的放置策略

l可配置的,最終一致性

類BigTable特性:

l列族數據模型

n可配置,2級maps,Super Colum Family

lSSTable磁盤存儲

nAppend-only commit log

nMentable (buffer and sort)

n不可修改的SSTable文件

l集成Hadoop

二、Cassandra數據模型

Colum / Colum Family, SuperColum / SuperColum Family

Column是數據增量最底層(也就是最小)的部分。它是一個包含名稱(name)、值(value)和時間戳(timestamp)的三重元組。

下面是一個用JSON格式表示的column:

{//這是一個Column

name:"emailAddress",

value:"arin@example.com",

timestamp:123456789

}

需要注意的是,name和value都是二進制的(技術上指byte[]),并且可以是任意長度。

與HBase相比,除了Colum/Colum Family外,Cassandra還支持SuperColum/SuperColum Family。

SuperColum與Colum的區別就是,標準Column的value是一個“字符串”,而SuperColumn的value是一個包含多個Column的map,另一個細微的差別是:SuperColumn沒有時間戳。

{//這是一個SuperColumn

name:"homeAddress",

//無限數量的Column

value:{

street:{name:"street",value:"1234xstreet",timestamp:123456789},

city:{name:"city",value:"sanfrancisco",timestamp:123456789},

zip:{name:"zip",value:"94107",timestamp:123456789},

}

}

Column Family(CF)是某個特定Key的Colum集合,是一個行結構類型,每個CF物理上被存放在單獨的文件中。從概念上看,CF像數據庫中的Table。

SuperColum Family概念上和Column Family(CF)相似,只不過它是Super Colum的集合。

Colum排序

不同于數據庫可以通過Order by定義排序規則,Cassandra取出的數據順序是總是一定的,數據保存時已經按照定義的規則存放,所以取出來的順序已經確定了。另外,Cassandra按照column name而不是column value來進行排序。

Cassandra可以通過Colum Family的CompareWith屬性配置Colume值的排序,在SuperColum中,則是通過SuperColum Family的CompareSubcolumnsWith屬性配置Colum的排序。

Cassandra提供了以下一些選:BytesType,UTF8Type,LexicalUUIDType,TimeUUIDType,AsciiType,Column name識別成為不同的類型,以此來達到靈活排序的目的。

三、分區策略

Token,Partitioner

Cassandra中,Token是用來分區數據的關鍵。每個節點都有一個第一無二的Token,表明該節點分配的數據范圍。節點的Token形成一個Token環。例如使用一致性HASH進行分區時,鍵值對將根據一致性Hash值來判斷數據應當屬于哪個Token。

圖3 Token Ring

分區策略的不同,Token的類型和設置原則也有所不同。Cassandra (0.6版本)本身支持三種分區策略:

RandomPartitioner:隨機分區是一種hash分區策略,使用的Token是大整數型(BigInteger),范圍為0~2^127,Cassandra采用了MD5作為hash函數,其結果是128位的整數值(其中一位是符號位,Token取絕對值為結果)。因此極端情況下,一個采用隨機分區策略的Cassandra集群的節點可以達到2^127+1個節點。采用隨機分區策略的集群無法支持針對Key的范圍查詢。

OrderPreservingPartitioner:如果要支持針對Key的范圍查詢,那么可以選擇這種有序分區策略。該策略采用的是字符串類型的Token。每個節點的具體選擇需要根據Key的情況來確定。如果沒有指定InitialToken,則系統會使用一個長度為16的隨機字符串作為Token,字符串包含大小寫字符和數字。

CollatingOrderPreservingPartitioner:和OrderPreservingPartitioner一樣是有序分區策略。只是排序的方式不一樣,采用的是字節型Token,支持設置不同語言環境的排序方式,代碼中默認是en_US。

分區策略和每個節點的Token(Initial Token)都可以在storage-conf.xml配置文件中設置。

bloom-filter, HASH

Bloom Filter是一種空間效率很高的隨機數據結構,本質上就是利用一個位數組來表示一個集合,并能判斷一個元素是否屬于這個集合。Bloom Filter的這種高效是有誤差的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合,而在能容忍低錯誤率的場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節省。

原理:位數組+ K個獨立hash(y)函數。將位數組中hash函數對應的值的位置設為1,查找時如果發現所有hash函數對應位都是1說明存在,很明顯這個過程并不保證查找的結果是完全正確的。

在Cassandra中,每個鍵值對使用1Byte的位數組來實現bloom-filter。

圖4 Bloom Filter

總結

以上是生活随笔為你收集整理的cassandra框架模型之一——Colum排序,分区策略 Token,Partitioner bloom-filter,HASH的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。