Я читал этот раздел документов Cassandra и нашел следующее немного озадачивающим:
Определите накладные расходы столбца:
регулярный_общий_размер_столбца = размер_имя_столбца + размер_значения_столбца + 15
счетчик - expiring_total_column_size = column_name_size + column_value_size + 23
На каждый столбец в Cassandra приходится 15 байт служебных данных. Поскольку каждая строка в таблице может иметь разные имена столбцов, а также разное количество столбцов, метаданные хранятся для каждого столбца. Для столбцов счетчиков и столбцов с истекающим сроком действия следует добавить еще 8 байтов (всего 23 байта).
То, как я интерпретирую приведенное выше для схемы, определенной CQL3, например:
CREATE TABLE mykeyspace.mytable(
id text,
report_id text,
subset_id text,
report_date timestamp,
start_date timestamp,
end_date timestamp,
subset_descr text,
x int,
y double,
z int,
PRIMARY KEY (id, report_id, subset_id)
);
заключается в том, что каждая строка будет содержать метаданные для имен столбцов, например, строки report_date
, start_date
, end_date
и т. д. и их тип вместе с данными. Однако мне не ясно, что означает, что каждая строка в таблице может иметь разные имена столбцов. Мне это кажется неправильным, учитывая, что приведенная выше схема полностью статична, то есть Cassandra 2.0 наверняка пожалуется, если я попытаюсь написать:
INSERT INTO mykeyspace.mytable (id, report_id , subset_id, x, y, z, w)
VALUES ( 'asd','qwe','rty',100,1.234,12, 123.123);
Bad Request: Unknown identifier w
Теперь мне кажется, что имена столбцов фиксированы с учетом этой схемы таблицы, и поэтому метаданные не должны храниться для каждой строки. Я предполагаю, что либо формулировки в документации устарели (это то же самое, что и Cassandra 1.2), либо я неправильно понимаю некоторые основные концепции, которые здесь работают.
Кто-нибудь может уточнить? Итог: мне нужно беспокоиться о длине имен моих столбцов или нет?
Мы играли осторожно и использовали односимвольные имена, где это было возможно (так что приведенные выше столбцы на самом деле были бы i
, r
, s
, dr
, ds
, de
, sd
, ...), но это так нечеловечески нечитабельно и может сбивать с толку работать с.