Распространенное заблуждение состоит в том, что 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