2015-05-28 2 views
3

Есть ли какая-либо команда или какой-либо способ узнать, какие данные хранятся на каких узлах Кассандры?Какой узел хранит данные Cassandra?

Im довольно новый для Кассандры, и у меня не было много удачи в этом вопросе.

Спасибо!

ответ

5

Вы можете получить Cassandra, чтобы сказать вам, какой узел (s) конкретный ключ на с nodetool getendpoints ,

$ nodetool getendpoints mykeyspace tbl '8546200' 
192.168.73.188 
192.168.73.190 

Я не знаю, если это то, что вы ищете или нет. AFAIK не существует способа вывести запрос на ответственные узлы для всех строк в таблице или в пространстве ключей. Но, как заметил Блейк, ваше приложение действительно не должно беспокоиться об этом.

Если вы действительно хотите узнать, вы можете запросить свою таблицу с помощью функции token на вашем ключе ключа. Вот пример использования схемы Блейка:

SELECT token(partition_key),partition_key FROM tbl; 

Это будет список хеш-маркеров с вашими ключами разделов. Затем вы можете запустить nodetool ring, чтобы перечислять диапазоны токенов для каждого узла и видеть, какие узлы несут ответственность за этот диапазон. Обратите внимание: если вы используете vNodes, ваш вывод будет довольно большим (по умолчанию 256 строк для каждого).

+0

Спасибо! Это именно то, что я искал – user3376961

2

Кассандра использует последовательное хеширование ключа раздела раздела, чтобы определить, где хранятся данные. Токены назначаются узлам, а согласованный хэш ключа раздела определяет, какие узлы (ы) будут хранить строку.

ключ Partition является первой частью первичного ключа в вашем определении таблицы или вложенных скобок

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

Спасибо за быстрый ответ! Кольцо и последовательное хеширование имеют смысл, но есть способ увидеть все это за сценой. В частности, есть ли способ узнать, какие хеш-диапазоны назначаются каждому узлу, и что hashvalue получается из ключа раздела (чтобы узнать, какие данные хранятся на каком узле)? – user3376961

+0

Ответ на этот вопрос Брайза: nodetool getendpoints и функция "token()" на CQL. –

 Смежные вопросы

  • Нет связанных вопросов^_^