2013-10-24 5 views
0

При создании документа и разрешении Couch создать идентификатор для вас, проверяет ли он, существует ли идентификатор или может я по-прежнему создавать конфликт?Сгенерировать идентификатор сервера ID документа

Мне нужно сгенерировать UUID в моем приложении и задаться вопросом, не будет ли это иначе, чем позволить Couch сделать это.

+0

Есть ли причина, по которой вы не можете создать свои собственные идентификаторы документов? – SingleNegationElimination

+0

Как люди читают этот вопрос? Я сам создаю идентификаторы, я просто задавался вопросом, есть ли что-то, что можно рассмотреть по сравнению с тем, чтобы позволить кушетке сделать это. –

+0

, так как kxepal упоминает в своем ответе, функция существует для клиентов, которые * не могут * создавать свои собственные идентификаторы документов и не являются рекомендуемым шаблоном использования. * почему * вы хотите, чтобы сервер установил идентификатор? – SingleNegationElimination

ответ

1

Вы можете и должны указывать идентификатор документа, даже при использовании bulk document interface. Пропуск этого шага делает проблему повторных запросов, создающих дубликаты документов еще хуже. С другой стороны, если вы назначаете идентификаторы, а часть запроса достигает couchdb дважды (как в случае повторного подключения прокси), тогда ваш ответ будет включать в себя некоторые конфликты, которые можно смело игнорировать, вы знаете, что конфликт был от вы, по той же просьбе

2

Используйте этот запрос POST /db, но вы должны знать, что базовый метод HTTP POST не является идемпотентным, и клиент может автоматически повторить его из-за проблемы с некоторыми сетевыми проблемами, которые могут создавать несколько документов в базе данных ,

1

Как уже упоминалось, Kxepal обычно не рекомендует POST-документ без предоставления вашего собственного _id.

Вы можете, однако, использовать GET /_uuids для извлечения списка UUID с сервера и использования этого для хранения ваших документов. Возвращенные UUID будут зависеть от используемого algorithm, но вероятность дублирования (для большинства целей) незначительно мала.

+0

«Обычно не рекомендуется ПОСТ-документ без предоставления вашего собственного _id». - 'POST', когда у вас есть идентификатор? Вы имеете в виду, что это должно быть право? 'POST' - это когда сервер генерирует идентификатор и' PUT', когда вы предоставляете свой собственный. http://wiki.apache.org/couchdb/HTTP_Document_API#POST и http://restcookbook.com/HTTP%20Methods/put-vs-post/ – Daniel

+0

@ Даниэль на самом деле, вы можете «POST» с явным идентификатором документа: просто добавьте поле '_id', чтобы запросить полезную нагрузку JSON. Эффект будет таким же, как и для PUT, но по тем же причинам, почему «POST» не рекомендуется, вы иногда можете получать ошибки об обновлении конфликтов вместо отчета о успехе. – Kxepal

+0

Да, я знаю, что вы можете, но если вы согласны с тем, как вы обычно смотрите на использование POST и PUT? – Daniel

Смежные вопросы