Прошу прощения за ошибки в терминологии. В частности, я использую термины реляционных баз данных.
Существует несколько постоянных хранилищ ключей, в том числе CouchDB и Cassandra, а также множество других проектов.
Типичный аргумент против них состоит в том, что они обычно не разрешают атомные транзакции для нескольких строк или таблиц. Интересно, будет ли общий подход решить эту проблему.
Возьмем, к примеру, ситуацию с набором банковских счетов. Как мы переводим деньги с одного банковского счета на другой? Если каждый банковский счет является строкой, мы хотим обновить две строки как часть одной и той же транзакции, уменьшив значение в одном и увеличив значение в другом.
Один очевидный подход состоит в том, чтобы иметь отдельную таблицу, которая описывает транзакции. Затем перенос денег с одного банковского счета на другой состоит в простом вводе новой строки в эту таблицу. Мы не сохраняем текущие балансы двух банковских счетов и вместо этого рассчитываем суммирование всех соответствующих строк в таблице транзакций. Легко представить, что это было бы слишком большой работой; банк может иметь миллионы транзакций в день, а индивидуальный банковский счет может быстро иметь несколько тысяч "транзакций", связанных с ним.
Число (все?) хранилищ ключей-значений будет "откатывать" действие, если базовые данные изменились с момента последнего захвата. Возможно, это может быть использовано для имитации атомных транзакций, а затем, как вы могли бы указать, что определенное поле заблокировано. Есть некоторые очевидные проблемы с этим подходом.
Любые другие идеи? Вполне возможно, что мой подход просто неверен, и я еще не завернул свой мозг вокруг нового образа мышления.