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

HBase и Cassandra построены как широкие хранилища столбцов, используя понятия как строк, так и столбцов.

Строка состоит из ключа, аналогичного концепции первичного ключа в РСУБД, и значения, состоящего из нескольких столбцов

Представление может быть следующим:

*******|    Key     |                   Value
-------+------------+-------------+------------------------------------------
Colunms|            |     name    |                 value
-------+------------+-------------+------------------------------------------
       |     a      |   title     | "Building a python graphdb in one night"
       |     b      |   body      | "You maybe already know that I am..."
       |     c      | publishedat |              "2015-08-23"
       |     d      |   name      |                database

       |     e      |   start     |                   1
       |     f      |    end      |                   2

            ...          ...                         ...

       |    u       |   title     |     "key/value store key composition"

            ...          ...                         ...

       |    x       |   title     |    "building a graphdb with HappyBase"

            ...          ...                         ...

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

Это может быть представлено следующим образом.

*******|           Key            |                 Value
-------+------------+-------------+------------------------------------------
Colunms| identifier |  name       |                 value
-------+------------+-------------+------------------------------------------
       |     1      |   title     | "Building a python graphdb in one night"
       |     1      |   body      | "You maybe already know that I am..."
       |     1      | publishedat |              "2015-08-23"
       |     2      |   name      |                database

       |     3      |   start     |                   1
       |     3      |    end      |                   2

            ...          ...                         ...

       |     4      |   title     |     "key/value store key composition"

            ...          ...                         ...

       |     42     |   title     |    "building a graphdb with HappyBase"

            ...          ...                         ...

name колонна переместилась из Value к Key а также Value имеет имя одного столбца value,

2 ответа

Решение

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

В C* ключи разбиты на две части: ключ раздела и столбцы кластеризации.

Ключ раздела используется для хеширования данных для узлов в кластере. Раздел - это набор данных, который может содержать одну или несколько строк на основе столбцов кластеризации. Данные в пределах раздела являются локальными для узла и хранятся в отсортированном порядке с помощью ключей кластеризации, что обеспечивает быстрый и эффективный доступ к данным в разделе с поддержкой запросов диапазона для ключей кластеризации.

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

Термин "широкий столбец" немного устарел для C*. В нынешнем представлении CQL данные рассматриваются в более традиционных терминах как строки в таблице, которые сгруппированы в эффективные для доступа к разделам.

Поэтому, чтобы ответить на ваш вопрос, да, в C* обычно перемещают столбцы, которые в СУБД могут рассматриваться как столбцы данных, в составной ключ в C*.

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

Составные ключи очень популярны в дизайне схемы HBase. Они также позволяют выполнять быстрое сканирование префиксного компонента Rowkey. В отличие от Cassandra, RowKey не разбивается на части при хранении данных.

Простой пример: http://riteshadval.blogspot.com/2012/03/hbase-composite-row-key-design-doing.html

В HBase, в вашем примере, вы сможете сделать range scans with identifier only and with identifier+name also,

Другие вопросы по тегам