Как изменить схему разбиения Cassandra на сохранение порядка? - PullRequest
0 голосов
/ 11 марта 2019

Я установил Apache Cassandra в кластер с одним узлом.Когда я создаю семейство столбцов, данные разделяются из-за разделителя murmur3 на основе первичных ключей, и таблица не сохраняет порядок первичных ключей.Таким образом, вывод SStable, который я вижу, будет отсортирован по позициям, но порядок первичных ключей изменился бы.

По моему требованию я не хочу, чтобы порядок первичных ключей был перетасован.Итак, как мне изменить схему разбиения Cassandra?Я заглянул в файл cassandra.yaml , но нет инструкции о том, как перейти с стандартного разделителя murmur3.Будет ли какое-либо влияние, если значение по умолчанию будет изменено?

Это таблица, которую я создал:

CREATE TABLE ycsb.expt (
y_id varchar,
field0 varchar,
field1 varchar,
field2 vachar,
PRIMARY KEY (y_id, field0) WITH CLUSTERING ORDER BY (field0 ASC);

После добавления данных в таблицу, это мой вывод, когда я "select * from expt"

     y_id   | field0     | field1       | field2
    --------+------------+--------------+------------
     user48 |   ?O3 :<5[ |       *B-0Qa |          .
     user14 |         .J |     (=~/0`"4 |         03
     user40 |       (Uu' |          +.0 |          ;
     user42 |         // |          ((* |         3O
      user8 |          , |     =Ao3[??< |   4.2(Hm6O

Я хочу, чтобы эти выходные данные были в том же порядке, в котором я вставлял данные, и я вставил их в отсортированном порядке (например: User8, User 14, User40).Несмотря на создание ключа кластеризации, он перемешал данные.

Как убедиться, что выходные данные отсортированы в приведенной выше таблице?

1 Ответ

0 голосов
/ 12 марта 2019

Конфигурация "partitioner" в cassandra.yaml определяет, какой разделитель используется кластером. У вас есть 3 варианта здесь, но я подозреваю, что вы действительно хотите Murmur3 Partitioner.

Документация может объяснить далее, как работают другие варианты: https://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archPartitionerAbout.html

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

См. Ответ, опубликованный здесь, для объяснения различных способов настройки первичного ключа: Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?

Получив ключ кластеризации, которым вы довольны, вы сможете использовать директиву ORDER BY для этих столбцов в ваших CQL-запросах.

...