Juste ce qu'il dit sur l'étain. J'ai un tas de (par exemple) documents de membre, je veux que chaque utilisateur puisse placer le champ de courrier électronique sur son document à ce qu'il veut, exemple un email qui existe sur un autre document. Si je fais juste une vérification-insertion, je suis vulnérable à une condition de concurrence. Existe-t-il un idiome pour "verrouiller" ou insérer-puis-vérifier?Comment garantissez-vous l'unicité d'un champ dans un document CouchDB?
Répondre
Le seul moyen sûr est de créer un document avec la valeur unique en tant que doc ID.
Comme les autres notes de réponse, le seul champ garanti d'être unique dans CouchDB est _id.
Vous pourriez emprunter un tour du réplicateur ici. Afin de faire avancer rapidement une deuxième réplication entre les deux mêmes hôtes, il écrit un document de point de contrôle qui enregistre la dernière séquence de mise à jour atteinte. Mais comment trouve-t-il le document de point de contrôle à l'avenir? Ainsi;
"_id": md5 (source.host + source.port + target.host + target.port)
Un schéma général peut être extrait où vos champs uniques font partie de l'identifiant lui-même. Leur exécution via md5 garantit un identifiant de longueur fixe.
Dans votre cas, vous pouvez simplement utiliser votre adresse e-mail comme ID.
La modification de l'un de ces champs est un processus en deux étapes, mais qui conserve la propriété d'unicité.
- Copiez le document à son nouveau id (http://wiki.apache.org/couchdb/HTTP_Document_API#COPY)
- En cas de succès, supprimez l'ancien (http://wiki.apache.org/CouchDB/HTTP_Document_API # SUPPRIMER)
un accident entre les étapes 1 et 2 laissera l'ancien document, il place, de sorte que vous voudrez peut-être ajouter une référence à l'ancien document dans le nouveau document. Vous pouvez ensuite créer une vue de ces références et effectuer un balayage de nettoyage périodiquement. Cela dit, CouchDB ne prend délibérément en charge qu'un seul champ unique, contrairement à un SGBDR typique qui peut prendre en charge des contraintes relationnelles élaborées, afin qu'une solution puisse évoluer proprement dans un cluster (c.f, BigCouch). Dans votre cas, où l'adresse e-mail doit être unique, une grande partie de ce que j'ai dit devrait fonctionner (les adresses e-mail ne changent pas si souvent), mais évidemment, cela nage en amont dans une certaine mesure.
HTH, B.
Mon plan actuel consiste à utiliser une table d'unicité * temporaire *, qui utilise l'adresse électronique comme clé et l'heure actuelle comme seule valeur. Les étapes seraient (a) créer une entrée d'unicité, (b) rechercher l'entrée principale par email (j'ai besoin de cette vue de toute façon), (c) créer une nouvelle entrée principale, (d) supprimer l'entrée d'unicité. Le traitement approprié de chaque cas de défaillance est laissé comme un exercice pour le lecteur. – Malvolio
Si vous ne le faites pas (d), vous n'aurez pas besoin de le faire (b) non plus. – OrangeDog
- 1. Supprimer un champ de document avant d'enregistrer dans CouchDB?
- 2. Comment mettre à jour l'enregistrement/champ d'un document dans couchdb
- 3. conflit couchdb document identique
- 4. CouchDB: insérer un nouveau tableau dans un document
- 5. boucle dans les champs CouchDB dans le document (validate_doc_update)
- 6. Comment supprimer un document de CouchDB en utilisant CouchPotato?
- 7. Comment supprimer un document couchdb avec un identifiant de document vide?
- 8. Insérer un document dans CouchDb en utilisant Mathematica
- 9. Comment puis-je obtenir un champ de document avec jqCouch?
- 10. Comment stocker les votes pour le document CouchDB?
- 11. Mise à jour du document Couchdb
- 12. valeurs d'affichage du document de CouchDB
- 13. Recherche par champ dans un document référencé
- 14. comment mettre un xml dans couchDB?
- 15. Limites de taille de document CouchDB
- 16. Supprimer le champ en utilisant curl dans couchdb
- 17. GeoCouch/Couchdb/Other comme document interrogeable db?
- 18. Modifications du modèle de document CouchDB?
- 19. CouchDB et interrogation non par document ID
- 20. Définition explicite des clés de document CouchDB
- 21. CouchDB - Comment utiliser correctement le numéro de révision du document?
- 22. CouchDB voir ou montrer dans le document de conception?
- 23. Est-il possible d'ajouter des champs à un document dans une fonction de validation CouchDB?
- 24. Meilleur format de document pour addressbook dans CouchDB
- 25. Déplacer un champ mongo dans un document s'il existe
- 26. CouchDB: plan dans le document de conception donne compilation_error
- 27. Comment télécharger une pièce jointe à un document dans CouchDB en utilisant ibrowse?
- 28. Comment créer un document simple dans une base de données CouchDB à partir d'Android?
- 29. comment obtenir le champ stocké d'un document par un identifiant de document dans lucene?
- 30. Condition similaire dans CouchDB
Hmmmm, donc serait-il travailler à chaque fois que je mets sur le terrain, d'abord générer une version canonique de la clé (donc dans l'exemple ci-dessus 'Email-membre-henrik @ yahoo. com') et créer un document vide avec ce nom, puis supprimez-le si le champ a changé? – Malvolio
Oui, cette approche fonctionnerait –