321 votes

Façons d'implémenter le versioning des données dans MongoDB

Pouvez-vous nous faire part de vos réflexions sur la manière de mettre en œuvre le versioning des données dans MongoDB ? (J'ai demandé question similaire concernant Cassandra . Si vous avez une idée de la meilleure base de données pour cela, veuillez la partager.)

Supposons que j'aie besoin de versionner des enregistrements dans un carnet d'adresses simple. (Les enregistrements du carnet d'adresses sont stockés sous forme d'objets json plats). Je m'attends à ce que l'historique :

  • ne sera pas utilisé fréquemment
  • sera utilisé en une seule fois pour le présenter à la manière d'une "machine à remonter le temps".
  • il n'y aura pas plus de versions que quelques centaines pour un seul enregistrement. L'historique n'expirera pas.

J'envisage les approches suivantes :

  • Créez une nouvelle collection d'objets pour stocker l'historique des enregistrements ou des modifications apportées aux enregistrements. Elle stockera un objet par version avec une référence à l'entrée du carnet d'adresses. Ces enregistrements se présenteraient comme suit :

    {
     '\_id': 'new id',
     'user': user\_id,
     'timestamp': timestamp,
     'address\_book\_id': 'id of the address book record' 
     'old\_record': {'first\_name': 'Jon', 'last\_name':'Doe' ...}
    }

    Cette approche peut être modifiée pour stocker un tableau de versions par document. Mais cela semble être une approche plus lente sans aucun avantage.

  • Stocker les versions sous forme d'objet sérialisé (JSON) attaché aux entrées du carnet d'adresses. Je ne sais pas comment attacher de tels objets aux documents MongoDB. Peut-être sous la forme d'un tableau de chaînes de caractères. ( Calqué sur le modèle du versionnement simple de documents avec CouchDB )

1 votes

Je voudrais savoir si cela a changé depuis la réponse à la question ? Je ne m'y connais pas beaucoup en oplog, mais si cela existait à l'époque, cela ferait-il une différence ?

0 votes

Mon approche consiste à considérer toutes les données comme une série chronologique.

5voto

bmw15 Points 158

Si vous utilisez mongoose, j'ai trouvé que le plugin suivant est une implémentation utile de l'outil de gestion de l'environnement. Patch JSON format

histoire de la mangouste

4voto

Muhammad Reda Points 8343

Une autre option consiste à utiliser histoire de la mangouste plugin.

let mongoose = require('mongoose');
let mongooseHistory = require('mongoose-history');
let Schema = mongoose.Schema;

let MySchema = Post = new Schema({
    title: String,
    status: Boolean
});

MySchema.plugin(mongooseHistory);
// The plugin will automatically create a new collection with the schema name + "_history".
// In this case, collection with name "my_schema_history" will be created.

1voto

helcode Points 635

J'ai utilisé le package ci-dessous pour un projet meteor/MongoDB, et il fonctionne bien, le principal avantage est qu'il stocke l'historique/les révisions dans un tableau dans le même document, donc pas besoin de publications supplémentaires ou de middleware pour accéder à l'historique des modifications. Il peut prendre en charge un nombre limité de versions antérieures (par exemple, les dix dernières versions), il prend également en charge la concaténation des changements (ainsi, tous les changements survenus au cours d'une période spécifique seront couverts par une seule révision).

nicklozon/meteor-collection-revisions

Une autre option sonore consiste à utiliser Meteor Vermongo ( aquí )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X