Механизм хранения Cassandra 1.1, как он хранит композиты?

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

Во-первых, терминология.

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

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

1: Как реализованы составные ключи и имена столбцов? Каждый пример CQL, который я могу найти, показывает только составные ключи в виде столбцов, а не простые составные столбцы.

Допустим, у нас есть столбцы «a», «b», «c», «d» в качестве первичного составного ключа + столбцы «e», «f». Я знаю, что «a» будет ключом строки и раздела.

Допустим, следующие данные:

a    b    c    d    e    f
1a   1b   1c   1d   e1   f1
1a   1b   1c   2d   e1   f2
1a   1b   1c   2d   e2   f3
2a   2b   2c   2d   e2   f4

2: Как это хранится под капотом? Я полагаю, что настоящий вопрос здесь заключается в том, как отображаются «b», «c», «d», поскольку столбцы по определению не являются иерархическими.

3: В документации, которую я прочитал, говорится, что компактное хранилище больше не следует использовать. Но что, если столбцы, не являющиеся первичными ключами, не нужно добавлять... в чем тогда причина не использовать их?


person IamIC    schedule 15.08.2012    source источник


Ответы (2)


1: Как реализованы составные ключи и имена столбцов?

В основном отвечает вопросом 2. Кроме того, в Cassandra 1.2 несоставные ключи также будут реализованы как составные ключи под капотом. Кроме того, сами имена составных столбцов не повторяются в хранилище. Представление в памяти интернирует имена до порога эффективности памяти.

2: Как это хранится под капотом?

Первый ключевой компонент (a в вашем примере) становится физическим ключом строки. Остальные столбцы образуют префикс для несоставных столбцов и хранятся предварительно отсортированными (кластеризованными) в строке. Итак, физическое представление для вашего примера будет таким:

    1b.1c.1d, e   1b.1c.1d, f
1a      e1            f1
------------------------------
    2b.2c.2d, e   2b.2c.2d, f
2a      e2            f4

Обратите внимание, что вторая и третья строки в вашем примере недействительны. Имена столбцов должны быть уникальными в физических строках.

Точечное обозначение, которое я использовал (1b.1c.1d), является образным. Фактическое хранилище использует байты префикса для метаданных, за которыми следуют данные.

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

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

person baja    schedule 21.08.2012
comment
Что вы подразумеваете под несоставными ключами? Конечно, ключ является 1 компонентом (без столбцов) или составным (1 ключ и составные столбцы)? - person IamIC; 06.09.2012

Эти две ссылки могут быть вам полезны:

http://www.datastax.com/dev/blog/schema-in-cassandra-1-1

http://xamry.wordpress.com/2012/07/31/composite-keys-in-cassandra

person Amresh    schedule 21.08.2012