Нужно ли использовать все столбцы, определенные как первичный ключ, для запроса базы данных Cassandra? - PullRequest
3 голосов
/ 26 февраля 2020

Я использую базу данных Cassandra и мне нужно определить первичный ключ, который является комбинацией ключа раздела и ключей кластеризации. Запрос к базе данных cassandra должен выполняться на основе комбинации двух полей, например номер клиента и createAt (Unix значение метки времени), согласно бизнес-требованиям. Эти столбцы нельзя использовать в качестве первичного ключа, поскольку они не могут однозначно идентифицировать строку в базе данных. Итак, правильно ли добавить столбец uuid из базы данных в качестве ключа кластеризации, чтобы сделать первичный ключ уникальным, чтобы первичный ключ стал комбинацией - customerNumber (ключ раздела ), создалAt (ClusteringKey), uuid (ключ кластеризации). Однако база данных никогда не будет запрашиваться на основе всего первичного ключа. Он всегда будет запрашиваться на основе части первичного ключа, т.е. Customer Number и creationAt . uuid никогда не будет использоваться для запроса базы данных.

1 Ответ

1 голос
/ 26 февраля 2020

Так что, если я правильно понимаю, ваше определение PRIMARY KEY выглядит следующим образом:

PRIMARY KEY (customerNumber,createdAt,uuid)

Оно всегда будет запрашиваться на основе части первичного ключа

Да, запрос по части определения PRIMARY KEY в порядке. Cassandra пытается ограничить запросы одним узлом, и это достигается за счет того, что весь раздел записывается в один узел (а затем реплицируется). Из-за этого вам действительно нужно только указать ключ раздела для ваших запросов (customerNumber), и они должны работать.

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

tl; dr;

Запросы по customerNumber и createdAt будет просто отлично.

...