составные ключи столбцов и составные ключи строк

Я пытаюсь понять концепцию составного ключа столбца и составного ключа строки, но не могу его получить. Я думаю, что он используется для получения диапазона значений, но не можем ли мы использовать для этой цели столбец меток времени в качестве ключа кластера? Каков вариант использования, преимущества, недостатки и реализация. Пожалуйста, объясните, используя CQL 3.

Ключ составного столбца: http://i.stack.imgur.com/qLboK.png

Составной ключ строки: http://i.stack.imgur.com/xA6Hz.png


person Robin Jain    schedule 10.09.2014    source источник


Ответы (1)


Возможно, вы путаете оба термина, которые относятся к тому, как cassandra хранит составные первичные ключи. Я объясню, как работают составные ключи и как легко физически храниться с помощью Cassandra 2.0 и CQL3.

Cassandra хранит все логические строки с одним и тем же ключом раздела в виде одной физической широкой строки. Ключ раздела делится на (partition_key, clustering_key).

  • partition_key: идентифицирует строку в Cassandra. Все регистры с одним и тем же ключом partition_key перейдут на один и тот же компьютер и будут храниться вместе. Вы можете составить partition_key.
  • clustering_key: сохранить данные с тем же упорядоченным partition_key. Вы можете указать несколько ключей кластеризации, разделенных запятыми.

Представьте, что у вас есть покупка стола с таким определением:

CREATE TABLE purchase(
  user text,
  item text,
  time timestamp,
  PRIMARY KEY ((user, item), time)
);

И эти данные

john  car  09/01/14...
john  car 09/05/13...
john  house 09/07/11...
penny laptop  09/08/08...
penny laptop 09/03/11...
rachel tv 09/01/09...

Cassandar сохранит эти данные

john || car  || 09/05/13 - 09/01/14
john || house || 09/07/11
penny || laptop || 09/08/08 - 09/03/11
rachel || tv || 09/01/09

Если вы хотите получить автомобили, которые купил Джон, вы можете убедиться, что два регистра хранятся вместе и упорядочены по времени.

Для запросов вы всегда должны устанавливать поля ключа раздела ( = ), и вы можете, если хотите, сравнить порядок ключей кластеризации с помощью ( ‹ или > ).

Примеры:

  • выберите * из покупки, где user='penny' и item='laptop'. Вернуть 2 регистра.
  • выберите * из покупки, где user='john' и item='car', где дата 01.01.14. Вернуть 1 регистр.

Надеюсь, поможет.

person gasparms    schedule 10.09.2014
comment
Конечно, это добавило мне знаний о том, как он хранит первичные ключи, но я спрашиваю об этом в приведенных выше ссылках на изображения, где данные хранятся в форме ‹TimeUUID:User_ID› как имя/ключ столбца (имя/ключи составного столбца), как в : ebaytechblog.com/wp-content/uploads/2012/07 /optionbest.png - person Robin Jain; 11.09.2014
comment
Эта ссылка просто показывает один из способов моделирования для определенного запроса. - person gasparms; 11.09.2014
comment
Пожалуйста, помогите, как ddmmyyhh | тип события используется в качестве ключа строки в i.stack.imgur.com/xA6Hz.png ? - person Robin Jain; 12.09.2014
comment
Вы говорите, что когда мы делаем PRIMARY KEY ((user, item, time)) тогда это представляется как: i.stack.imgur.com/xA6Hz.png и когда мы делаем PRIMARY KEY ((user, (item, time)) он представляется как: i.stack.imgur.com/qLboK.png ? - person Robin Jain; 12.09.2014
comment
На этом изображении i.stack.imgur.com/xA6Hz.png ПЕРВИЧНЫЙ ключ ( (час, тип события), timeuuid) и в i.stack.imgur.com/qLboK.png is (itemid, timeuuid, userid), где у вас есть два ключа кластеризации, сначала упорядоченные по timeuuid, а затем упорядоченные по userid. - person gasparms; 12.09.2014
comment
Yhea, хорошо, теперь я получил эту ссылку, просто покажите один из способов моделирования для определенного запроса;) Спасибо. - person Robin Jain; 12.09.2014