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

在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 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

  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
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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

nicklozon /流星收集,修订

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


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 1211 浏览

添加回答

举报

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