Вам нужно подумать о том, как вы подходите к приложению ориентированным на документы способом. Если вы просто попытаетесь повторить, как вы бы смоделировали проблему в СУБД, вы потерпите неудачу. Есть также различные компромиссы, которые вы, возможно, захотите сделать. ([ed: не уверен, как это связано с аргументом, но:] Помните, что дизайн CouchDB предполагает, что у вас будет активный кластер из множества узлов, которые могут выйти из строя в любой момент. Как ваше приложение будет обрабатывать один из узлов базы данных, исчезающий из под ним?)
Один из способов думать об этом - представить, что у вас нет компьютеров, только бумажные документы. Как бы вы создали эффективный бизнес-процесс, используя кусочки бумаги, которые раздают? Как вы можете избежать узких мест? Что если что-то пойдет не так?
Еще один аспект, о котором вы должны подумать, это возможная последовательность, когда вы в конечном итоге попадете в согласованное состояние, но вы можете быть непоследовательным в течение некоторого периода времени. Это анафема на земле СУРБД, но она чрезвычайно распространена в реальном мире. Пример канонической транзакции - перевод денег с банковских счетов. Как это на самом деле происходит в реальном мире - через отдельные атомные транзакции или через разные банки, выдающие друг другу кредитные и дебетовые уведомления? Что происходит, когда вы пишете чек?
Итак, давайте посмотрим на ваши примеры:
- CRUD сущностей с некоторыми полями с уникальным индексом.
Если я правильно понимаю это в терминах CouchDB, вы хотите иметь коллекцию документов, в которой какое-либо именованное значение гарантированно будет уникальным для всех этих документов? Этот случай обычно не поддерживается, поскольку документы могут создаваться в разных репликах.
Итак, нам нужно взглянуть на проблему реального мира и посмотреть, сможем ли мы ее смоделировать. Вам действительно нужно, чтобы они были уникальными? Может ли ваше приложение обрабатывать несколько документов с одинаковым значением? Вам нужно назначить уникальный идентификатор? Вы можете сделать это детерминистически? Распространенный сценарий, когда это требуется, - это когда вам нужен уникальный последовательный идентификатор. Это сложно решить в реплицированной среде. На самом деле, если уникальный идентификатор должен быть строго последовательным по отношению к созданному времени, невозможно , если , то вам нужен идентификатор сразу. Вам нужно ослабить хотя бы одно из этих ограничений.
- веб-приложение для электронной коммерции, например ebay
Я не уверен, что добавить сюда, так как последний комментарий, который вы сделали к этому сообщению, должен был сказать: «Очень полезно! Спасибо». Было ли что-то упущено в подходе, изложенном там, что все еще вызывает у вас проблемы? Я думал, что ответ MrKurt был довольно полным, и я добавил небольшое улучшение, которое уменьшило бы разногласия.