Я хочу абсолютную атомарность на одном экземпляре couchdb (вставка, сбой, если уже существует) - PullRequest
0 голосов
/ 07 января 2011

Мне очень нравится стиль организации и обновления данных couchdb, но есть несколько ситуаций, когда мне действительно нужно иметь возможность создать запись и определить, существует ли эквивалентная запись, прежде чем вернуться к пользователь. Единственная ситуация, в которой это абсолютно необходимо для моего приложения, - это регистрация пользователя. Я в порядке, когда все записи о регистрации пользователей идут в определенный, назначенный экземпляр couchdb, известный как «registration-instance».

Я хочу хэшировать user_id в некоторый _id для использования. Затем выполните установку с этим _id, но потерпите неудачу, если _id уже вставлен. Мне нужно вернуть пользователю, что имя пользователя уже зарезервировано, и я не могу обнаружить конфликт позже и разрешить его в этот момент, потому что у пользователя будет впечатление, что он зарезервировал имя пользователя.

Я не понимаю, почему couchdb не смог предоставить какой-либо способ сделать это, предполагая, что вы указываете, что вставки для определенного "типа" документа всегда направляются в конкретный экземпляр.

1 Ответ

2 голосов
/ 07 января 2011

Если вы отправляете одному серверу CouchDB запрос PUT для нового пользовательского документа, вы должны получить поведение, которое вам нужно.

Если документ не существует, он создаст новый документ.

Если документ существует , то гарантированно возвращается ошибка 409 конфликта.Это связано с тем, что вы не указали свойство _rev, потому что вы не пытаетесь обновить ранее существующий документ.

Только при совпадении свойств _id и _rev CouchDB обновит существующий документ.

Возможно, вы захотите прочитать об обработчиках обновления документов: http://wiki.apache.org/couchdb/Document_Update_Handlers

Вы можете использовать обработчик обновления, чтобы хэшировать user_id и динамически назначать соответствующий _id.Вы также можете настроить тип сообщений об ошибках, отправляемых с помощью обработчика обновлений.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...