Требовать дубликаты первичных ключей в Кассандре - PullRequest
0 голосов
/ 04 января 2019

Я знаю, что не могу иметь дубликаты первичных ключей в любой базе данных, но cassandra ограничивает мою возможность запрашивать только 1 из ключей в составном первичном ключе.

Мой пример использования следующий:

File 1
    variableA
    variableB
    variableC

File 2
    variableC
    variableD
    variableE

Я хочу создать таблицы следующим образом:

variables
==================
variable_id PK
file_id     PK
UUID        PK

files
==================
file_id     PK
...other_columns

Я анализирую файлы и вставляю переменные втаблица переменных.Позже я хочу найти все файлы с переменной C.Однако, хотя у меня есть file_id, когда я создаю запись, у меня нет file_id во время запроса.В отличие от других кассетных БД, я должен указать оба PK в своем запросе.Это невозможно.

Мне нужны некоторые идеи о том, как преодолеть эту проблему моделирования.

Потенциально будут триллионы переменных, поэтому ALLOW FILTERING и вторичные индексы не подходят.Это не может быть уникальным вариантом использования.Как другие преодолели эту проблему?

1 Ответ

0 голосов
/ 04 января 2019

Вы не можете иметь дубликаты первичных ключей в Cassandra (а также не в реляционных базах данных).

Но вы можете хранить для каждого variable_id file_ids, в который включена переменная, например:

Использовать (variable_id, file_id) в качестве первичного ключа и сохранять временную метку или, если переменная включена толькоодин раз в каждом файле фактическое значение в этой таблице.Помните, что variable_id - это ключ раздела, а file_id - это столбец кластера в этом случае.Таким образом, вы можете легко запросить все file_ids и значения для данного variable_id.

Если это хорошо подходит, зависит от вашего варианта использования.Возможно, вам нужно будет поместить file_ids в bin, если файлов слишком много.Или было бы неплохо сгруппировать их по дням, месяцам или другим критериям, чтобы разделы не становились слишком большими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...