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

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

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

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

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

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

1 ответ

Решение

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

Что вы на самом деле говорите, так это "установите цену в 100 долларов США за продукт 12345". Если такого продукта не существует (пока?), Он все еще устанавливает цену, потому что не будет времени, чтобы выяснить, существует ли продукт.

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

Другие вопросы по тегам