CouchDB stratégie de gestion des versions
Suite être une stratégie viable pour la mise en œuvre de la gestion des versions(à l'aide de "l'exemple" comme un exemple de type de document):
Avoir un document original où le champ type est nommé example_original.
Les modifications ultérieures du document de tout type example_change et l'id de example_original document comme une clé. Le changement devrait aussi porter un horodatage.
Garder un doc avec le type example_current qui est le résultat de example_original avec tous les example_change "appliqué". Une nouvelle example_change document sera automatiquement appliqué à ce document.
Trouver une version spécifique consiste en la récupération de la example_original doc et en appliquant les modifications de votre choix (surtout que jusqu'à un certain timestamp, mais il pourrait aussi être un certain nombre de changements).
Je tiens à préciser que mon cas d'utilisation impliquera un nombre limité de modifications à l'original. La plupart des mises à jour de nouveaux documents originaux. Alors que c'est mon cas d'utilisation, je serais également intéressé par les questions qui en résulterait si de nombreux changements impliqués.
Quels avantages et inconvénients voyez-vous dans cette démarche?
- Êtes-vous essayer à la version du contenu du document ou de la structure du document?
- Seulement le contenu. Les champs ne seront jamais supprimés seulement ajouté.
Vous devez vous connecter pour publier un commentaire.
Mon premier souci est: Lors de la "prise" d'une certaine version, vous pouvez appliquer les modifications à l'original, sans modification de la base de données?
Vous avez besoin de supprimer quelque chose de l'histoire? Êtes-vous vraiment sûr? Vraiment, vraiment sûr? Comment sur les branches?
Dans l'ensemble, cela ressemble à une stratégie complexe. Gardez à l'esprit que j'ai entendu à propos de CouchDB, mais jamais utilisé. J'irais pour une approche plus simple:
Lorsque vous créez un document, vous affectez un UUID. Ne pas utiliser le nom ou vous serez confronté à des problèmes lors des opérations de renommage. Ajouter un champ de version qui indique "1". Créer un deuxième document qui contient une liste de documents avec le même UUID ou ajouter un "parent" pointeur sur le premier document.
D'avoir une "histoire" document par document permet une navigation plus rapide de l'histoire mais parent pointeurs sont plus "safe" (puisque vous ne pouvez pas créer facilement des structures illégales avec eux).
Lorsque vous créez une nouvelle version, la réutilisation de l'UUID et attribuer une nouvelle, version unique. Mise à jour de l'historique du document ou de la mère pointeur.
Cette stratégie est assez simple à mettre en œuvre et permet tous les types de flexibilité plus tard. Vous pouvez effacer des parties de l'histoire facilement, renommer est simple, et vous pouvez créer des branches.
Simple gestion des versions de Document avec CouchDB
La gestion des versions en tant que pièces jointes approche décrite dans le présent article devrait s'adapter à la plupart des gens en matière de gestion des versions.
Qu'est-ce que le statut d'entreprise de ces documents, notamment sur le plan juridique? J'ai travaillé dans des situations où votre proposition ne serait pas approprié d'une entreprise perspectives, en raison de la nécessité de prouver que le document présenté comme v. 3 est vraiment la version 3 de ce document. Dynamiquement l'application de deltas ne serait pas couper le respect de la moutarde.
Si, comme vous le dites, les modifications apportées aux documents ae peu fréquents, alors vous ne serez pas économiser beaucoup d'espace disque en stockant les deltas et non l'intégralité des documents. Le stockage de l'ensemble des documents permet également de prédiction fiable de la durée de récupération pour n'importe quel document. Il réduit également la complexité du processus de récupération.
Une stratégie pour la gestion des versions avec CouchDB est de NE jamais compacter la base de données qui contient les documents pour lesquels vous avez besoin de garder un historique complet. Vous pouvez toujours compact d'autres bases de données. Cette simple stratégie fonctionne aujourd'hui la sortie de la boîte avec une modifier la stratégie de résolution des conflits.
Suppression d'un document qui pourrait être fait par l'écriture d'une nouvelle version avec pas de contenu, mais une propriété supprimée ensemble.
Branches ne peuvent pas être réalisés de cette façon, parce que le mécanisme de contrôle de version propose un thread unique de révisions.
Maintenant pour l'avenir de CouchDB: