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

在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进行简单文档版本控制后建模


达令说
浏览 1220回答 3
3回答

梵蒂冈之花

潜入这个问题的第一个重要问题是“你想如何存储变更集”?比较速度?整个记录副本?我个人的方法是存储差异。因为这些差异的显示实际上是一个特殊的动作,所以我会将差异放在不同的“历史”集合中。我会使用不同的集合来节省内存空间。您通常不希望简单查询的完整历史记录。因此,通过将历史记录保留在对象之外,您还可以在查询数据时将其保留在常用内存中。为了让我的生活更轻松,我会让历史文档包含时间戳差异字典。像这样的东西:{     _id : "id of address book record",     changes : {                  1234567 : { "city" : "Omaha", "state" : "Nebraska" },                 1234568 : { "city" : "Kansas City", "state" : "Missouri" }                }}为了让我的生活变得非常简单,我将使用我用来访问我的数据的DataObjects(EntityWrapper,无论如何)。通常,这些对象具有某种形式的历史记录,因此您可以轻松地覆盖save()方法以同时进行此更改。看起来现在有一个处理JSON差异的规范。这似乎是一种更健壮的方式来存储差异/变化。

回首忆惘然

我使用下面的包用于meteor / MongoDB项目,它运行良好,主要优点是它将历史/修订存储在同一文档中的数组中,因此无需额外的出版物或中间件来访问更改历史记录。它可以支持有限数量的先前版本(例如,前十个版本),它还支持更改连接(因此在特定时间段内发生的所有更改将由一个修订版覆盖)。nicklozon /流星收集,修订另一个声音选项是使用Meteor Vermongo(这里)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB