2010-03-01 42 views
21

當卡桑德拉嘗試我觀察到卡桑德拉寫入以下文件:Cassandra文件結構 - 如何使用這些文件?

/.../cassandra/commitlog/CommitLog-<id>.log 
/.../cassandra/data/Keyspace1/Standard1-1-Data.db 
/.../cassandra/data/Keyspace1/Standard1-1-Filter.db 
/.../cassandra/data/Keyspace1/Standard1-1-Index.db 
/.../cassandra/data/system/LocationInfo-1-Data.db 
/.../cassandra/data/system/LocationInfo-1-Filter.db 
/.../cassandra/data/system/LocationInfo-1-Index.db 
/.../cassandra/data/system/LocationInfo-2-Data.db 
/.../cassandra/data/system/LocationInfo-2-Filter.db 
/.../cassandra/data/system/LocationInfo-2-Index.db 
/.../cassandra/data/system/LocationInfo-3-Data.db 
/.../cassandra/data/system/LocationInfo-3-Filter.db 
/.../cassandra/data/system/LocationInfo-3-Index.db 
/.../cassandra/system.log 

一般結構似乎是:

/.../cassandra/commitlog/CommitLog-ID.log 
/.../cassandra/data/KEYSPACE/COLUMN_FAMILY-N-Data.db 
/.../cassandra/data/KEYSPACE/COLUMN_FAMILY-N-Filter.db 
/.../cassandra/data/KEYSPACE/COLUMN_FAMILY-N-Index.db 
/.../cassandra/system.log 

什麼是Cassandra的文件結構?更具體地說,如何使用data,0 commitlog目錄以及data目錄(Data/Filter/Index)中文件的結構如何?

+3

途徑潛水並且瞭解Cassandra在引擎蓋下發生了什麼! – Brian 2010-03-05 16:41:08

回答

29

對Cassandra節點的寫入首先碰到CommitLog(順序)。 (然後Cassandra將值存儲到列家族特定的內存數據結構中,稱爲Memtables。每超過一個可配置的閾值時,Memtables將刷新到磁盤。(1,memtable中的datasize。2,#對象達到一定限制, 3)memtable的生命期到期))

數據文件夾包含每個鍵空間的子文件夾。每個子文件夾包含三個類型的文件:

  • 數據文件:一個的SSTable(從谷歌借來的命名 )代表 排序字符串表,是 鍵值串對(由 鍵排序)的文件。
  • 指數文件:(重點,偏移)對(點分成多個數據文件)
  • Bloom filter:在數據文件中
+1

+1:很好的答案!謝謝! – knorv 2010-03-02 21:42:55

+0

謝謝。如果您想對Cassandra中使用的術語和命名有更深入的瞭解/描述,Cassandra wiki是一個很好的開始。 – Schildmeijer 2010-03-02 22:03:13

21

Cassandra File Format in detail

每個ColumnFamily中(如對象)中分離出來的SSTable文件中的所有鍵

ColumnFamilyName-version-#-Data.db 
ColumnFamilyName-version-#-Index.db 
ColumnFamilyName-version-#-Filter.db 

enter image description here

相關問題