В последнее время я делаю некоторые тесты производительности с различными дизайнами в 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 млрд столбцов. (который является пределом размера столбцов)
Итак, любые идеи, что здесь происходит?
Составной сепаратор (ОБНОВЛЕНО мой ответ по комментарию.): И вы не должны поставить кавычки вокруг строки, так как они будут включены в ключ. Таким образом, первым примером может быть «nodetool getendpoints keyspace columnfamily 2013-07-30: 1'. – Richard
По-видимому, 'nodetool getendpoints' также дает вывод для несуществующих ключей. Он выводит физический узел ip после запуска алгоритма на ключ. вы правы в использовании 'getendpoints' – aacanakin