Подтвердить что ты не робот

Кассандра имеет лимит в 2 миллиарда ячеек на раздел, но какой раздел?

В Cassandra Wiki говорится, что для раздела существует ограничение 2 billion cells (rows x columns). Но мне непонятно, что такое раздел?

У нас есть один раздел на node для каждого семейства столбцов, что означает, что максимальный размер семейства столбцов будет 2 billion cells * number of nodes в кластере.

Или Кассандра создаст столько разделов, сколько потребуется для хранения всех данных семейства столбцов?

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

4b9b3361

Ответ 1

С появлением CQL3 терминология немного изменилась по сравнению со старыми экономными терминами.

В принципе

Create Table foo (a int , b int, c int, d int, PRIMARY KEY ((a,b),c))

Сделаю таблицу CQL3. Информация в и b используется для создания ключа раздела, он описывает, на каком узле будет находиться информация. Это тот "раздел", о котором говорится в пределе 2 миллиардов ячеек.

Внутри этого раздела информация будет организована c, известным как ключ кластеризации. Вместе a, b и c определяют уникальное значение d. В этом случае количество ячеек в разделе будет c * d. Таким образом, в этом примере для любой данной пары a и b может быть только 2 миллиарда комбинаций c и d.

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

Посмотрите это видео, чтобы узнать больше о моделировании данных в Кассандре. Datamodel мертв, да здравствует модель данных

Изменение: еще один пример из комментариев

Create Table foo (a int , b int, c int, d int, e int, f int, PRIMARY KEY ((a,b),c,d))

Разделы будут однозначно идентифицированы комбинацией a и b.

Внутри раздела c и d будут использоваться для упорядочения ячеек внутри раздела, поэтому макет будет выглядеть примерно так:

(a1,b1) --> [c1,d1 : e1], [c1,d1  :f1], [c1,d2 : e2] ....  

Таким образом, в этом примере вы можете иметь 2 миллиарда ячеек, каждая из которых содержит:

  • Значение с
  • Значение d
  • Значение либо е, либо е

Таким образом, ограничение в 2 миллиарда относится к сумме уникальных кортежей (c,d,e) и (c,d,f).

Ответ 2

От: http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/create_table_r.html


Использование составного ключа раздела

Составной ключ раздела - это ключ раздела, состоящий из нескольких столбцов. Вы используете дополнительный набор круглых скобок, чтобы заключать столбцы, составляющие составной ключ раздела. Столбцы в определении первичного ключа, но вне вложенных круглых скобок представляют собой столбцы кластеризации. Эти столбцы образуют логические наборы внутри раздела для облегчения поиска.

CREATE TABLE Cats (
  block_id uuid,
  breed text,
  color text,
  short_hair boolean,
  PRIMARY KEY ((block_id, breed), color, short_hair)
);

Например, составной раздел ключа состоит из block_id и породы. Кластерные столбцы, цвет и short_hair определяют порядок кластеризации данных. Как правило, Cassandra будет хранить столбцы с одним и тем же block_id, но другой породой на разных узлах, а столбцы с одинаковым block_id и размножаются на одном и том же node.


Проявление

== > Разделение - это наименьшая единица репликации (которая сама по себе не делает sh ** нет смысла.:))

== > Каждая комбинация block_id и breed представляет собой a раздел.

== > На любой заданной машине в кластере либо все , либо не будут существовать ни одна из строк с одним ключом раздела.