Je travaille actuellement sur une application wiki-esque utilisant CouchDB et j'essaie d'implémenter un schéma de version de document. Pour moi, il y a deux façons de procéder:
- Stockez chaque version dans un document distinct
- Stockez les anciennes versions sous forme de pièces jointes à un seul document.
En ce moment, j'ai une forme de travail n ° 1. Lorsqu'un utilisateur modifie un document et l'enregistre, le serveur principal copie d'abord la révision précédente dans un nouveau document, puis enregistre la nouvelle version. Chaque document possède un tableau «historique» qui contient des données sur chaque version (le document _id de l'ancienne version, un horodatage, l'éditeur, etc.).
Étant donné que ce tableau d'historique peut devenir assez long pour un document fréquemment mis à jour, j'ai une vue qui récupère un document sans historique lors d'une lecture normale (et une autre vue pour récupérer l'historique).
Ma question est la suivante: je me sens mal à l'aise avec mon approche actuelle et j'ai pensé à passer à la méthode de l'attachement. Mais je ne suis pas sur. J'espère que quelqu'un qui connaît mieux CouchDB que moi (je n'y suis que depuis quelques semaines - et c'est mon premier projet utilisant CouchDB ... et NoSQL) peut me dire quels sont les avantages et les inconvénients de chacun approche. Ou existe-t-il peut-être un autre schéma de version que j'écarte?
la source
Réponses:
Le stockage des modifications uniquement sera une bonne idée, car le stockage de documents plus anciens en tant que documents séparés ou pièces jointes à la révision finale de la base de données créera une surcharge pour le serveur de base de données.
Chaque fois que vous modifiez une valeur de clé dans votre document, ajoutez une nouvelle clé nommée
_h_i_s_<key_name>
. Dans la nouvelle création (ou créée lors de la dernière mise à jour), ajoutez des objets comme ci-dessous après chaque modification / mise à jour: -ou
Cette approche permettra d'économiser beaucoup d'espace disque et de bande passante de réplication à long terme.
la source
Sans aucune connaissance de CouchDB. Cependant, le stockage de chaque version ne diffère que marginalement de son prédécesseur est un gaspillage de stockage. Je recommande de stocker uniquement les modifications.
Vous voudrez peut-être jeter un œil ici ou rechercher le versionnage des données.
la source
des années plus tard ;-)
vous n'avez pas à enregistrer les modifications car CouchDB le fera pour vous. Si un document est modifié, une nouvelle révision sera créée. Sachez qu'il s'agit physiquement d'un autre document avec le même
_id
mais un nouveau_rev
(révision) et qu'il consommera de l'espace sur votre disque.Pour sûr, vous devrez conserver toutes les révisions, ce qui signifierait que vous avez besoin d'un très grand disque.
la source