为了账号安全,请及时绑定邮箱和手机立即绑定

在MongoDB中实现数据版本控制的方法

/ 猿问

在MongoDB中实现数据版本控制的方法

达令说 2019-08-23 14:56:51

在MongoDB中实现数据版本控制的方法

您能否分享一下您如何在MongoDB中实现数据版本控制?(我问过关于Cassandra的类似问题。如果你有任何想法,哪个数据库更好,请分享)

假设我需要在简单的地址簿中对记录进行版本控制。(地址簿记录存储为平面json对象)。我期待历史:

  • 将很少使用

  • 将一次性使用以“时间机器”的方式呈现它

  • 单个记录的版本不会超过几百个。历史不会过期。

我正在考虑以下方法:

  • 创建新的对象集合以存储记录的历史记录或对记录的更改。它将为每个版本存储一个对象,并引用地址簿条目。这些记录如下:

    {
     '_id':'新id',
     'user':user_id,
     'timestamp':时间戳,
     'address_book_id':'地址簿记录的ID' 
     'old_record':{'first_name':'Jon','last_name':'Doe'......}}

    可以修改此方法以存储每个文档的版本数组。但这似乎是没有任何优势的较慢的方法。

  • 将版本存储为附加到通讯簿条目的序列化(JSON)对象。我不确定如何将这些对象附加到MongoDB文档。也许是一个字符串数组。(使用CouchDB进行简单文档版本控制后建模


查看完整描述

3 回答

?
梵蒂冈之花

潜入这个问题的第一个重要问题是“你想如何存储变更集”

  1. 比较速度?

  2. 整个记录副本?

我个人的方法是存储差异。因为这些差异的显示实际上是一个特殊的动作,所以我会将差异放在不同的“历史”集合中。

我会使用不同的集合来节省内存空间。您通常不希望简单查询的完整历史记录。因此,通过将历史记录保留在对象之外,您还可以在查询数据时将其保留在常用内存中。

为了让我的生活更轻松,我会让历史文档包含时间戳差异字典。像这样的东西:

{
    _id : "id of address book record",
    changes : { 
                1234567 : { "city" : "Omaha", "state" : "Nebraska" },
                1234568 : { "city" : "Kansas City", "state" : "Missouri" }
               }}

为了让我的生活变得非常简单,我将使用我用来访问我的数据的DataObjects(EntityWrapper,无论如何)。通常,这些对象具有某种形式的历史记录,因此您可以轻松地覆盖save()方法以同时进行此更改。

看起来现在有一个处理JSON差异的规范。这似乎是一种更健壮的方式来存储差异/变化。


查看完整回答
反对 回复 2019-08-23
?
回首忆惘然

我使用下面的包用于meteor / MongoDB项目,它运行良好,主要优点是它将历史/修订存储在同一文档中的数组中,因此无需额外的出版物或中间件来访问更改历史记录。它可以支持有限数量的先前版本(例如,前十个版本),它还支持更改连接(因此在特定时间段内发生的所有更改将由一个修订版覆盖)。

nicklozon /流星收集,修订

另一个声音选项是使用Meteor Vermongo(这里


查看完整回答
反对 回复 2019-08-23
?
慕姐8265434

另一个选择是使用mongoose-history插件。


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.


查看完整回答
反对 回复 2019-08-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信