Разница между вставкой и обновлением CQL?

Я новичок в Cassandra и пришел из реляционного мира. Когда я играл с CQL, я заметил, что не нашел никакой разницы. Например:

когда я выполняю запрос ниже

обновить набор продуктов: цена = 100, валюта = доллар США, где productID = 12345;

затем CQL создает новую строку в таблице. В СУБД это не сработает, так как нет продукта с productID = 12345.

Можете ли вы дать некоторое представление?


person ak123    schedule 24.02.2016    source источник


Ответы (1)


Вы обнаружили, что большинство операций записи Cassandra (за некоторыми исключениями) выполняют запись без чтения. Этому есть ряд причин: одна из них — производительность (сначала чтение происходит медленно), но также учтите, что первая INSERT могла произойти на другом сервере и еще не была реплицирована на сервер, обрабатывающий UPDATE.

На самом деле вы говорите: «Установите цену в 100 долларов США для продукта 12345». Если такого продукта не существует (пока?), он все равно устанавливает цену, потому что не нужно тратить время на то, чтобы узнать, существует ли продукт.

Если вам нужно проверить, существует ли строка, Cassandra предоставляет реализацию paxos для облегченных транзакций ( http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0 ), которые могут предоставить вам некоторую логику типа IF [NOT EXISTS] (при значительной производительности штраф).

person Jeff Jirsa    schedule 24.02.2016
comment
Спасибо за подробное объяснение. Это отвечает на мой запрос - person ak123; 24.02.2016