Как Cassandra хранит первичный ключ с несколькими столбцами (CQL)

У меня есть небольшое недопонимание о составных ключах строк с CQL в Cassandra. Допустим, у меня есть следующее

cqlsh:testcql> CREATE TABLE Note (
           ... key int,
           ... user text,
           ... name text
           ... , PRIMARY KEY (key, user)
           ... );
cqlsh:testcql> INSERT INTO Note (key, user, name) VALUES (1, 'user1', 'name1');
cqlsh:testcql> INSERT INTO Note (key, user, name) VALUES (1, 'user2', 'name1');
cqlsh:testcql>
cqlsh:testcql> SELECT * FROM Note;

 key | user  | name
-----+-------+-------
   1 | user1 | name1
   1 | user2 | name1

Как хранятся эти данные? Там 2 ряда или один?

Если два, то как можно иметь более одной строки с одним и тем же ключом? Если у вас есть записи с ключом = 1 и пользователем от «user1» до «user1000», означает ли это, что у него будет одна строка с ключом = 1 и 1000 столбцов, содержащих имена для каждого пользователя?

Кто-нибудь может объяснить, что происходит на заднем плане? Спасибо.


person Vladimir Prudnikov    schedule 17.07.2013    source источник


Ответы (1)


Итак, немного покопавшись и прочитав статью предложено Любеном Тодоровым (спасибо) Я нашел ответ на свой вопрос.

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

Теперь, что происходит в моем примере... В таблице Note у меня есть составной ключ, определенный как PRIMARY KEY (key, user). Только первый элемент этого ключа действует как ключ строки и называется ключом раздела. Внутри остальная часть этого ключа используется для построения составных столбцов.

В моем примере

 key | user  | name
-----+-------+-------
   1 | user1 | name1
   1 | user2 | name1

Это будет представлено в Cassandra в одной строке как

-------------------------------------
|   | user1:name    | user2:name    |
| 1 |--------------------------------
|   | name1         | name1         |
-------------------------------------

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

Обновление: позже я нашел эту запись в блоге Аарона Мортон объясняет то же самое более подробно.

person Vladimir Prudnikov    schedule 17.07.2013
comment
запись в блоге больше не существует =( - person Highstead; 20.03.2014
comment
@Highstead Обновлена ​​ссылка на новый адрес этого сообщения в блоге. - person Marius Waldal; 12.05.2014