2017-04-27 44 views
0

我的Cassandra集羣中有兩個密鑰空間,其中第二個密鑰空間已作爲第一個(使用sstableloader)的副本(模式和數據)創建。如何比較兩個cassandra密鑰空間的內容

如何比較(檢查)第一個密鑰空間的所有數據是否也以有效的方式存儲在第二個密鑰空間中?

問(疑惑):

  1. 有很多在這些keyspaces數據,因此從兩個keyspaces掃描所有行,並比較它們的東西,我想避免的。
  2. 我可以以某種方式比較sstable文件(* Data.db)嗎?密鑰空間具有完全相同的結構,因此可能* Data.db文件應該是相同的(或幾乎相同)?
  3. 也許還有另一種有效的方法?

回答

0

除了比較每個你想避免的其他密鑰存在的方法之外,其他方式都沒有。數據文件不會是相同的原因沖刷和壓縮不會總是寫出完全相同的分區鍵到相同的文件。

您可以使用nodetool cfstats比較估計數字鍵的,但只會給你一個指示

話雖如此,由分區鍵查詢表是一個非常快速的操作,因此對於一個給定的表,其中col1是關鍵,SELECT col1 from MYTABLE where col1=<key to check>應該跑得相當快。如果您使用其中一個驅動程序,則可以利用分頁功能將結果集限制爲可管理的塊。

作爲例子說,爲python driver,你可以做這樣的事情(注意我沒有測試這個!)

from cassandra.query import SimpleStatement 
query1 = "SELECT key FROM keyspace1.table1" 
statement1 = SimpleStatement(query1, fetch_size=1000) 
for row1 in session.execute(statement1): 
    # search second table here 

這是一個有點遞歸的,你可能會調整一些驅動程序設置,使這個效率更高,但我只想說明驅動程序如何以這種方式進行分頁。

希望這會有幫助

+0

但是,行是基於集羣密鑰在文件中排序的。所以,假設我已經將所有數據刷新並壓縮了,數據文件應該幾乎相同,對嗎?也許有辦法只檢查文件的相關部分? – pWoz

+0

@pWoz你可以嘗試,但它不是我見過的。您需要使用'sstable2json'(早期版本)或'sstabledump'(稍後發佈3.0版本)解碼文件。這些文件也不一定具有相同的名稱 – markc