Меня смущают два, казалось бы, противоречащих друг другу утверждения о Кассандре
- Нет чтения перед записью (предположительно, это связано с тем, что запись выполняется последовательно, тогда как чтение требует сканирования индекса первичного ключа)
- INSERT и UPDATE имеют одинаковую семантику (указанную в старой версии < href="http://cassandra.apache.org/doc/cql3/CQL.html" rel="nofollow">руководство по CQL, но, по-видимому, по-прежнему считается верным)
Предположим, я создал следующую простую таблицу:
CREATE TABLE data (
id varchar PRIMARY KEY,
names set<text>
);
Теперь я вставляю некоторые значения:
insert into data (id, names) values ('123', {'joe', 'john'});
Теперь, если я сделаю обновление:
update data set names = names + {'mary'} where id = '123';
Результаты ожидаемы:
id | names
-----+-------------------------
123 | {'joe', 'john', 'mary'}
Разве это не тот случай, когда чтение должно происходить перед записью? "Стоимость" выглядит следующим образом.
- Стоимость чтения колонки
- Стоимость создания объединения двух наборов (здесь незначительна, но может быть заметной для больших наборов)
- Стоимость записи данных с ключом и новыми данными столбца
Вставка будет просто делать только последнее из них.