Cassandra Wide Row / Динамические столбцы

Я новичок в NoSQL; Итак, я пытаюсь понять некоторые концепции Cassandra, которые я не могу получить из десятков источников, которые я изучил.

  1. Следует ли рассматривать широкую строку и динамические столбцы как синонимы; или это 2 разные концепции?
  2. Правильно ли я воспринимаю столбцы типов коллекций как широкую строку?
  3. Мне кажется, что широкий ряд является концепцией более ранних версий Cassandra и может быть создан только через Thrift API; тогда как типы коллекций - это современные версии широких рядов.
  4. Типы коллекций по-прежнему ограничены 64 КБ элементов? Или что после CQL 3 это ограничение было снято?

person user1888243    schedule 19.06.2017    source источник


Ответы (1)


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

Давайте посмотрим на приведенную ниже таблицу cql.

CREATE TABLE data (
  sensor_id int,
  collected_at timestamp,
  volts float,
  PRIMARY KEY (sensor_id, collected_at)
);

И вставьте некоторые данные

sensor_id | collected_at             | volts
----------+--------------------------+-------
   1      | 2013-06-05 15:11:00-0500 |   3.1
   1      | 2013-06-05 15:11:10-0500 |   4.3
   1      | 2013-06-05 15:11:20-0500 |   5.7
   2      | 2013-06-05 15:11:00-0500 |   3.2
   3      | 2013-06-05 15:11:00-0500 |   3.3
   3      | 2013-06-05 15:11:10-0500 |   4.3

Здесь столбец кластеризации collected_at аналогичен динамическому столбцу экономичности. (Q.1)

Если мы посмотрим на внутреннюю структуру этой таблицы

RowKey: 1
=> (cell=2013-06-05 15:11:00-0500, value=3.1, timestamp=1370463146717000)
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463282090000)
=> (cell=2013-06-05 15:11:20-0500, value=5.7, timestamp=1370463282093000)
-------------------
RowKey: 2
=> (cell=2013-06-05 15:11:00-0500, value=3.2, timestamp=1370463332361000)
-------------------
RowKey: 3
=> (cell=2013-06-05 15:11:00-0500, value=3.3, timestamp=1370463332365000)
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463332368000)

Вы можете видеть, что столбец кластеризации collected_at делает эту таблицу строкой на уровне всей таблицы (Q.1).

Таким образом, мы можем сказать, что если таблица имеет один или несколько ключей кластеризации, мы можем назвать эту строку всей таблицы.

Возьмем другой пример:

CREATE TABLE example (
    key1 text PRIMARY KEY,
    map1 map<text,text>,
    list1 list<text>,
    set1 set<text>
);

Вставьте данные:

 key1 | list1             | map1                                         | set1
------+-------------------+----------------------------------------------+-----------------------
 john | ['doug', 'scott'] | {'doug': '555-1579', 'patricia': '555-4326'} | {'patricia', 'scott'}

Теперь посмотрим на внутреннюю структуру:

RowKey: john
=> (column=, value=, timestamp=1374683971220000)
=> (column=map1:doug, value='555-1579', timestamp=1374683971220000)
=> (column=map1:patricia, value='555-4326', timestamp=1374683971220000)
=> (column=list1:26017c10f48711e2801fdf9895e5d0f8, value='doug', timestamp=1374683971220000)
=> (column=list1:26017c12f48711e2801fdf9895e5d0f8, value='scott', timestamp=1374683971220000)
=> (column=set1:'patricia', value=, timestamp=1374683971220000)
=> (column=set1:'scott', value=, timestamp=1374683971220000)

Вы можете видеть, что ключ карты и значение набора хранятся как динамический столбец, а значение карты и значение списка хранятся как значение этого столбца. Это похоже на широкий ряд (Q.2)

И последнее: Ключ карты типа коллекции и размер набора ограничены 64 КБ.

  • Сбор (Список): лимит сбора: ~ 2 миллиарда (2 ^ 31); значения size: 65535 (216-1)
  • Сбор (Набор): лимит сбора: ~ 2 миллиарда (2 ^ 31); значения size: 65535 (216-1)
  • Коллекция (карта): лимит сбора: ~ 2 миллиарда (2 ^ 31); количество ключей: 65535 (216-1); значения size: 65535 (216-1)

Источник:
https://www.datastax.com/blog/2013/06/does-cql-support-dynamic-columns-wide-rows https://teddyma.gitbooks.io/learncassandra/content/model/cql_and_data_structure.html http://docs.datastax.com/en/cql/3.3/cql/cql_reference/refLimits.html

person Ashraful Islam    schedule 20.06.2017