2014-07-15 87 views
1

我一直在看Datastax的Architecture in brief網頁(以及其他一些網頁),但是我發現它並沒有真正回答我所遇到的關鍵問題。因此,我繼續撰寫了Datastax網頁的編輯副本(請參閱http://benslade.com/wordpress/?p=152,歡迎所有反饋意見)。關於Cassandra架構的概述問題

我知道我可以通過實際設置一個Cassandra數據庫來解決問題,但我不喜歡通過必須弄清楚「它是如何實現的」開發商。跨

  • 概覽說,「數據在集羣中的所有節點之間分配每個節點交換信息:

    所以,我對事情的工作在卡桑德拉如何在架構層面幾個問題。每秒都有集羣「。後來又說集羣是「所有寫入都自動分區並在整個集羣中複製」。集羣和數據中心之間的關係是什麼? IE瀏覽器。是一個數據中心,是整個集羣的一部分。所有數據中心中的所有節點是否每秒都相互交換信息?對特定數據中心中的任何節點的寫入是否會傳播到其他數據中心,這與在當前數據中心中傳播的數據中心相同?

  • 概述說:「一旦內存結構(memtable)已滿,數據就會寫入SSTable數據文件中的磁盤」。同一個數據可以同時存儲在memtable和SSTable中。 IE瀏覽器。是SSTable的數據緩存memtable?

回答

2

未來,請儘量將您的帖子限制在一個問題上。

集羣和數據中心之間的關係是什麼?

羣集可以包含一個或多個邏輯數據中心。 Cassandra具有數據中心意識,這意味着您可以在每個數據中心的基礎上改變您的複製策略。此外,Cassandra具有「locality」的概念,這意味着snitch可以限制對特定數據中心中的節點的請求。 EX:通過LOCAL_QUORUM查詢將僅從數據中心中被確定爲「最接近」(網絡方式)的節點查詢數據。而通過QUORUM查詢將從(N/2 + 1)個節點查詢,而不管數據中心(其中N =節點數)。

所有數據中心的所有節點是否每秒都互相交換信息?

同樣,snitch處理副本的分佈並確保所有節點都保持與配置的複製因子一起保持最新狀態。當然,隨着卡桑德拉接受CAP定理的高可用性,分區容忍的一面,所有副本都運行在「最終一致性」的概念上。意思是說,它們都會得到更新,但在請求數據之前可能會發生,也可能不會發生。

對特定數據中心中的任何節點的寫入是否會傳播到與當前數據中心傳播相同的其他數據中心?

是的,但它又取決於配置的複製因子。請看下面的密鑰空間定義:

CREATE KEYSPACE stackoverflow WITH replication = { 
    'class': 'NetworkTopologyStrategy', 
    'WestCoastDC': '2', 
    'EastCoastDC': '3' 
}; 

利用這種結構,飛賊會確保在任何數據中心的一個副本的寫操作將被傳播到我的「WestCoastDC」,直到它有兩個數據副本。同樣,我的「EastCoastDC」將有三份相同的數據。請注意,您的複製因子必須等於或小於該數據中心中的節點數。

相同的數據可以在同一個 時間的memtable和SSTable中。 IE瀏覽器。是SSTable的數據緩存memtable?

我不相信會發生這種情況。 Cassandra中的所有寫入操作都應該寫入內存Memtable中,並通過提交日誌同時保存在磁盤上。然後,一旦達到你的memtable門限,memtable內容應該刷新並持續到SSTables。當然,如果你的節點經歷了一個插件式的事件,提交日誌將被驗證和協調,以確保其內容存在於SSTables中。