2015-05-28 93 views

回答

5

你可以得到卡桑德拉告訴你哪個節點(或多個)特定的鍵與nodetool getendpoints

$ nodetool getendpoints mykeyspace tbl '8546200' 
192.168.73.188 
192.168.73.190 

我不知道這是你在找什麼或不是。 AFAIK沒有辦法平坦地查詢表或鍵空間中所有行的負責節點。但正如Blake指出的那樣,您的應用程序並不需要擔心這一點。

如果你真的想知道,你可以使用分區鍵上的token函數來查詢你的表。這裏有一個使用Blake模式的例子:

SELECT token(partition_key),partition_key FROM tbl; 

這會列出你的分區密鑰的散列標記。然後,您可以運行一個nodetool ring列出每個節點的令牌範圍,並查看哪個節點負責該範圍。請注意,如果您使用的是vNode,則輸出會非常大(默認情況下,每個輸出爲256行)。

+0

謝謝!這正是我所期待的 – user3376961

2

Cassandra對行的分區鍵使用一致的哈希來確定數據的存儲位置。令牌被分配給節點,並且分區密鑰的一致散列決定哪個節點將存儲該行。

分區鍵是主鍵在你的表定義或嵌套的括號環和一致性哈希上

CREATE TABLE tbl (
partition_key INT, 
clus_key TEXT, 
..., 
PRIMARY KEY((partition_key), clus_key); 

一些閱讀here第一部分。您可能正在使用vNodes,所以我也會在這裏讀一下。

在查詢的時候,你不必擔心哪個節點有什麼。您的C *驅動程序將從列表中選擇一個協調節點,該節點將根據您的查詢查找行。

如果你想看到什麼查詢在CQLSH做,嘗試啓用跟蹤的詳細信息:

> TRACING ON; 
> SELECT * FROM table; 

> Tracing session: 1f6b4440-050f-11e5-ba41-672ef88f159d 
> .... 
> <Details about the query> 
> .... 
+0

感謝您的快速響應!環和一致的哈希值是有道理的,但有沒有辦法看到幕後所有這些事情。特別是,有沒有辦法知道給每個節點分配了哪些散列值範圍,以及分區鍵產生的散列值(然後知道哪些數據存儲在哪個節點)? – user3376961

+0

Bryce提供的答案有一些答案: nodetool getendpoints 和CQL中的「token()」函數。 –

相關問題