Как хранить голоса за документ CouchDB? - PullRequest
2 голосов
/ 30 ноября 2010

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

голосов: 12345

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

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

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

Какие у вас решения?

С уважением

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Это приведет к конфликту. В Руководстве CouchDB есть глава об обработке конфликтов. 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

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

0 голосов
/ 09 сентября 2011

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

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

...