Как хранить голоса за документ CouchDB?

Я ищу хороший пример того, как хранить голоса в документе. Например, если у нас есть документ, который публикуется, и пользователи могут голосовать за него. Если я сохраню голосование в поле документа, например:

голосов : 12345

Что будет, если автор редактирует пост и в это время кто-то проголосует? Автор не сможет сохранить, т.к. кто-то проголосовал и документ будет с новой редакцией.

Другой вариант — хранить голоса отдельно, чтобы каждый голос был документом, или создать документ с голосами для каждого поста?

Если я решу хранить каждый голос в отдельном документе, насколько сложно будет агрегировать эти данные? Или я должен вычислять его каждый раз, когда я показываю документ?

Каковы ваши решения?

С Уважением


person none    schedule 29.11.2010    source источник


Ответы (2)


Это приведет к конфликту. В CouchDB Guide есть глава о разрешении конфликтов. http://guide.couchdb.org/draft/conflicts.html

Если вы используете промежуточное ПО (например, PHP), оно может распознать и обработать конфликт. (см. пример кода вики: http://wiki.apache.org/couchdb/Replication_and_conflicts)

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

Если это сработает, я бы предпочел сохранить голоса в документе. Но я еще не пробовал ни один из этих подходов на себе. Так что я был бы рад, если вы поделитесь своим решением.

person tautologe    schedule 30.11.2010

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

http://www.cmlenz.net/archives/2007/10/couchdb-joins

Третьим и лучшим (?) решением было хранить каждый комментарий в виде отдельного документа со ссылкой на сообщение в блоге. Использование сложных ключей позволяет очень легко запрашивать все комментарии, относящиеся к сообщению, а также запрашивать все комментарии, сделанные пользователем, даже отсортированные в хронологическом порядке.

person angularsen    schedule 08.09.2011