在MongoDB中实现数据版本控制的方法
您能否分享您的想法,如何在MongoDB中实现数据版本控制。(我也曾问过有关Cassandra的类似问题。如果您有任何想法,哪个数据库更好,请分享)
假设我需要在一个简单的通讯簿中对记录进行版本控制。(地址簿记录存储为平面json对象)。我希望这段历史:
- 将很少使用
- 将一次全部使用,以“时间机器”的方式呈现
一个记录不会有超过几百个的版本。历史不会过期。
我正在考虑以下方法:
创建一个新的对象集合以存储记录的历史记录或对记录的更改。它将为每个版本存储一个对象,并引用地址簿条目。这样的记录如下:
{ '_id':'新ID',
“用户”:user_id,
'时间戳':时间戳,
'address_book_id':'通讯录记录的ID'
'old_record':{'first_name':'Jon','last_name':'Doe'...}
}
可以修改此方法以存储每个文档的版本数组。但这似乎是较慢的方法,没有任何优势。
将版本存储为附加到地址簿条目的序列化(JSON)对象。我不确定如何将此类对象附加到MongoDB文档。也许作为字符串数组。(以使用CouchDB的简单文档版本控制为模型)
回答:
深入探讨这个问题时,第一个大问题是“您如何存储变更集”?
差吗?
完整记录副本?
我个人的方法是存储差异。因为这些差异的显示确实是一个特殊的动作,所以我会将差异放入另一个“历史”集合中。
我将使用其他集合来节省内存空间。通常,您不希望简单查询的完整历史记录。因此,通过将历史记录保留在对象之外,您还可以在查询该数据时将其保留在通常访问的内存之外。
为了使我的生活更轻松,我将使历史文档包含带有时间戳记的差异字典。像这样:
{ _id : "id of address book record",
changes : {
1234567 : { "city" : "Omaha", "state" : "Nebraska" },
1234568 : { "city" : "Kansas City", "state" : "Missouri" }
}
}
为了使我的生活变得真正轻松,我将把这一部分用于访问数据的DataObjects(EntityWrapper,无论如何)。通常,这些对象具有某种形式的历史记录,因此您可以轻松地覆盖save()方法以同时进行此更改。
更新:2015-10
看起来现在有了处理JSON差异的规范 。这似乎是存储差异/更改的更可靠的方法。
以上是 在MongoDB中实现数据版本控制的方法 的全部内容, 来源链接: utcz.com/qa/416468.html