2010-11-29 23 views
2

Je cherche un bon exemple pour stocker des votes dans un document. Par exemple, si nous avons un document qui est post et les utilisateurs peuvent voter pour cela. Si je stocke le vote dans un champ dans le document, par exemple:Comment stocker les votes pour le document CouchDB?

votes: 12 345

Que se passerait-il si l'auteur édite le message et pendant ce temps quelqu'un vote? L'auteur ne sera pas en mesure de sauver, parce que quelqu'un a voté et le document sera avec une nouvelle révision.

L'autre option est de stocker les votes séparément, chaque vote étant document, ou de créer un document avec des votes pour chaque poste?

Si je décide de stocker chaque vote dans un document différent, à quel point cela sera-t-il difficile d'agréger ces données? Ou je dois le calculer chaque fois que je montre le document?

Quelles sont vos solutions?

concerne

Répondre

1

Ceci entraînera un conflit. Il y a un chapitre dans le Guide CouchDB sur la gestion des conflits. Si vous utilisez un middleware (tel que PHP), il peut reconnaître et gérer le conflit. (Voir le wiki par exemple code: http://wiki.apache.org/couchdb/Replication_and_conflicts)

Si vous voulez offrir un CouchApp pur, il devrait être possible d'utiliser des gestionnaires de mise à jour pour gérer automatiquement certains cas de conflits. http://wiki.apache.org/couchdb/Document_Update_Handlers

Si cela fonctionne, je préfère stocker les votes dans le document. Mais je n'ai encore essayé aucune de ces approches pour moi-même. Donc, je serais heureux Si vous partagez votre solution.

0

J'ai trouvé cet article très utile sur la façon d'éviter les conflits lorsque de nombreux utilisateurs mettront à jour un document, comme voter ou ajouter des commentaires à un article de blog.

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

La troisième et la meilleure solution était (?) Magasin chaque commentaire comme un document séparé avec un lien vers le blog. En utilisant des clés complexes, il est très facile d'interroger tous les commentaires appartenant à un article et d'interroger tous les commentaires faits par un utilisateur, même triés par ordre chronologique.