2015-11-07 4 views
1

У меня есть проблема с пониманием одну вещи из этой статьи - http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modelingCassandra - разница в эффективности между простым и составным ключом

упражнения - Мы хотим, чтобы получить все пользователь по имя_группе.

Решение:

CREATE TABLE groups (
    groupname text, 
    username text, 
    email text, 
    age int, 
    PRIMARY KEY (groupname, username) 
); 

SELECT * FROM groups WHERE groupname = 'footballers'; 

Но найти всех пользователей в группе мы можем установить: PRIMARY KEY (groupname) и работать также.

Зачем нужен в этом случае ключ кластеризации (имя пользователя)? Я знаю, что когда мы устанавливаем имя пользователя в качестве ключа кластеризации, мы можем использовать его в предложении WHERE. Но найти пользователей только по имени группы - это разница между PRIMARY KEY (groupname) и PRIMARY KEY (groupname, username) с точки зрения эффективности запроса?

ответ

3

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

Но найти всех пользователей в группе мы можем установить: PRIMARY KEY (groupname)

Попробуйте сделать это один раз. Создайте новую таблицу, используя только groupname в качестве вашего ПЕРВИЧНОГО КЛЮЧА, а затем попробуйте вставить несколько username s для каждой группы. Вы обнаружите, что будет только одна группа, и что столбец username будет перезаписан для каждого нового пользователя в этой группе.

Но найти пользователей только groupname есть какая-то разница между PRIMARY KEY (groupname) и PRIMARY KEY (groupname, username) с точки зрения эффективности запросов?

Если PRIMARY KEY (groupname) работает быстрее, наиболее вероятной причиной является то, что может быть возвращена только одна строка.

В этом случае определение username как ключ кластеризации обеспечивает:

  1. Возможность сортировки по username в группе.

  2. Возможность запроса определенного username внутри группы.

  3. Возможность добавления нескольких групп username s внутри группы.

+1

Это то, что я хотел знать. Большое спасибо. – Bakus123

1

Вам не нужен ключ кластеризации, если вы хотите запросить имя группы.

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

+0

Хорошо, я понимаю, но является ли этот заказ тем, что поиск пользователей по имени группы происходит быстрее? – Bakus123

+0

Ничего не меняет. Заказ кластеризации заказывается на диске, чтобы ваша запись всегда сортировалась. Но порядок возрастания наиболее эффективен, чем убывающий. –

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