2010-11-29 5 views
2

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

голосов: 12345

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

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

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

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

Отношения

ответ

1

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

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

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

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

0

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

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

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

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