Cassandra數據模型設計

本文是Cassandra數據模型設計第一篇(全兩篇),該系列文章包含了eBay使用Cassandra數據模型設計的一些實踐。其中一些最佳實踐咱們是經過社區學到的,有些對咱們來講也是新知識,還有一些仍然具備爭議性,可能在要經過進一步的實踐才能從中獲益。數據庫

本文中,我將會講解一些基本的實踐以及一個詳細的例子。即便你不瞭解Cassandra,也應該能理解下面大多數內容。spa

說說Cassandra在ebay的使用狀況

咱們嘗試使用Cassandra已經超過1年時間了。Cassandra如今正在服務一些用例,涉及到的業務從大量寫操做的日誌記錄和跟蹤,到一些混合工 做。其中一項服務是咱們的「Social Signal」項目,支撐着ebay的pruduct pages裏like/own/want特性。咱們開發的一些用例已經上線運行,但更多的仍是處於開發階段。設計

咱們的Cassandra集羣規模並不龐大,但正在穩步的增加中。在過去幾個月裏,咱們共部署了幾十個節點,它們分佈在幾個跨機房的小型集羣中。你可能會 問,爲何要多個集羣?咱們經過的職能部門和業務來劃分集羣。相同職能部門的相同業務的用例共享一個集羣,但它們存在於不一樣的keyspaces中。日誌

RedLaser, Hunch和其它ebay的合做夥伴也在嘗試cassandra解決現實中各類問題。除了Cassandra,咱們也在使用MongoDB和Hbase,本文中我不會討論它們,但我相信它們都有各自的優勢。orm

我相信此時你必定有不少問題,在這篇文章裏暫時不會一一說明。在即將到來的Cassandra Summit大會,我將更詳細的講解咱們每一個用例場景,數據模型和多數據中心部署,以及經驗教訓和其它知識。對象

本文重點講述咱們在ebay應用的Cassandra數據模型設計最佳實踐。下面讓咱們先看看這系列文章會用到的一些術語。ci

術語和約定

  • 術語「Column Name」 和 「Column Key」被認爲是同樣的。一樣的,「Super Column Name」 和 「Super Column Key」也認爲是相同的。開發

  • 下圖表示一個 Column Family (簡稱CF)中的一個row字符串

    Cassandra數據模型設計最佳實踐

    基於上面的內容,讓咱們開始第一個實踐吧!部署

    不要把Cassandra model想象成關係型數據庫table

    取而代之,應該把它想象成事一個有序的map結構。

    對於一個新手來講,下面關係型數據庫術語經常被對應到Cassandra模型

    Cassandra數據模型設計最佳實踐

    這種對比能夠幫助咱們從關係型數據庫轉換到非關係型數據庫。可是當設計Cassandra column famiy的時候請不要這樣去類比。取而代之,考慮它是一個map中嵌入另外一個map:外部map的key爲row key,內部map的key爲column key,兩個map的key都是有序的。以下:

    • 下圖表示一個 Super Column Family (簡稱SCF)中的一個row    

      Cassandra數據模型設計最佳實踐

    • 下圖表示一個Column Family中一個row,它包含Composite Columns。Composite Columns的屬性經過分隔符’|’鏈接。請注意,這裏看到的只是數據的表現形式,Cassandra內置了Composite Column,它是一個對象,並非使用’|’做爲屬性分隔符的字符串。(順便說下,本文不要求你掌握Super Column和Composite Column方面知識。)    

      Cassandra數據模型設計最佳實踐

相關文章
相關標籤/搜索