2013-07-30 4 views
3

В последнее время я делаю некоторые тесты производительности с различными дизайнами в cassandra. В настоящее время я использую cassandra в качестве проекта с интенсивной записью. Однако я собираюсь добавить часть с интенсивным чтением для экспорта данных с использованием инструкции select.cassandra composite, compund keys on multi node

Я делаю временные ряды со следующей таблицей;

CREATE TABLE events (
    date text, 
    n int, // it could be 1,2,3 
    id timeuuid, 
    PRIMARY KEY ((date, n), id) 
); 

У меня есть date|n как ключ раздела. Чтобы улучшить производительность чтения, я пытаюсь получить рычаги из концепции широких рядов. В документации указано, что;

Если ключи раздела одинаковы, они вставлены в один и тот же физический узел с расширением строки раздела.

Поэтому я использую n для равномерного распределения строк в случае получения горячих точек, которые указаны here;

Однако в многоузловом кластере, когда я вставляю следующее;

'2013-07-30'|1, some-timeuuid 
'2013-07-30'|1, another-timeuuid 

Я вижу, что они не находятся в одном физическом узле.

Я получаю информацию о узле;

nodetool getendpoint keyspace columnfamily some-timeuuid

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

Итак, любые идеи, что здесь происходит?

ответ

6

Если я не ошибаюсь, для того, чтобы выяснить, в какие узлы ваши строки сохраняются, вам нужно будет работать:

nodetool getendpoints keyspace columnfamily 2013-07-30:1

Используйте (композиционный раздел /) ключ строки вместо вашей колонки ключ.

Если вы используете SimpleStrategy для маркеров/вычисления реплики, это будет происходить внутри:

Вы вычислить MD5 хеш ключа. Создайте отсортированный список токенов , назначенных узлам в кольце. Найдите первый токен, превышающий хэш. Это первый узел. Далее в списке находится реплика, , которая зависит от РФ.

(нашел это в списке рассылки Cassandra http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/How-to-find-what-node-a-key-is-on-td6202253.html)

+3

Составной сепаратор (ОБНОВЛЕНО мой ответ по комментарию.): И вы не должны поставить кавычки вокруг строки, так как они будут включены в ключ. Таким образом, первым примером может быть «nodetool getendpoints keyspace columnfamily 2013-07-30: 1'. – Richard

+1

По-видимому, 'nodetool getendpoints' также дает вывод для несуществующих ключей. Он выводит физический узел ip после запуска алгоритма на ключ. вы правы в использовании 'getendpoints' – aacanakin