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.