Я исследовал фреймворки / оболочки Scala DB и наткнулся на Gizzard из Твиттера. Сначала я был впечатлен, но остыл, когда прочитал ограничение. Они говорят, что все выполняемые вами операции с БД должны быть как идемпотентными , так и коммутативными. Если я правильно понимаю, это в основном не оставляет почти ничего. Как пример, если у меня есть объект с целочисленным счетчиком, и он должен быть увеличен. Я могу использовать либо операцию «увеличения», либо операцию «установки». Но приращение не будет идемпотентным (если вы запустите его дважды, вы получите другой результат, чем один раз), и set не будет коммутативным (установка первых 5, а затем 2 дает другой результат, чем установка первых двух, а затем 5). Итак, есть ли что-нибудь, кроме "insert-if-absent", что не очень полезно для большинства случаев использования. В чем смысл структуры распределенной базы данных, которая настолько ограничена, что вы в принципе не можете сделать с ней ничего полезного? Я, должно быть, упускаю что-то важное.
[EDIT] Помимо «insert-if-absent» (и «delete-if-present»), я думаю, что «compare-timestamp-and-set» будет и идемпотентным, и коммутативным, если изменится ставятся в очередь вместо отброшенного , когда «предыдущие изменения» все еще отсутствуют. Но я не знаю, реализует ли это какая-либо БД.