2017-01-07 19 views
0

Я пытаюсь создать некоторое семейство столбцов в Cassandra, но у меня есть некоторые сомнения относительно основного/раздела ключа.
То, что я хочу следующее:Cassandra, раздел/первичный ключ: разбиение на разделы и ограничение

  • Распространение данных равномерно вокруг кластера
  • Минимизировать количество разделов чтения

Я знаю, что эти цели достижимы, выбрав соответствующий раздел/первичный но предположим, что выбранный раздел/первичный ключ позволяет ввести недопустимые данные в семействе colum, что вы делаете?

Предположим, что у меня есть следующий Колум семью:

CREATE TABLE group (
    groupname text, 
    username text, 
    PRIMARY KEY (groupname, username)) 

Предположим, что имя пользователя должно принадлежать только в одна группа с этим первичным ключом я могу достичь (с некоторым предположением), что предыдущие цели , но нет способа избежать того, чтобы имя пользователя помещалось в несколько групп.

Могу ли я сделать предположение о том, что будет в семействе столбцов, или есть способы избежать ввода недействительных данных?

+0

Невозможно c повторить эквивалент РСУБД «ограничения» в Кассандре. Если вам нужно убедиться, что неверные данные не написаны, вам нужно проверить это на уровне приложения. – Aaron

ответ

2

Объявление таблицы с именем в качестве первичного ключа будет обеспечивать только один отношения имя пользователя-к-группы существует:

CREATE TABLE group (username text, groupname text, PRIMARY KEY (username)); 

С lightweight transactions вы можете предотвратить обновления пользователя группы:

INSERT INTO group (username, groupname) VALUES ('joe', 'wheel') IF NOT EXISTS; 

Если вы хотите запросить у группы, создайте материализованное представление:

CREATE MATERIALIZED VIEW usersbygroup AS 
    SELECT groupname, username FROM group 
PRIMARY KEY (groupname, username); 
+0

В этот день я попробовал то, что вы мне сказали, и это кажется хорошим решением, спасибо! – LolloFake

 Смежные вопросы

  • Нет связанных вопросов^_^