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