当前位置: 首页 > 面试题库 >

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

章光华
2023-03-14
问题内容

您能否分享您的想法,如何在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)中的(简单)Java对象图进行版本控制。对于关系数据库和Hibernate,我发现了Envers,并且对这种可能性感到非常惊奇。Spring Data Documents是否可以使用类似的东西? 我发现这篇文章概述了我(以及更多…)关于存储对象版本的想法,并且我当前的实现方式与之相似,因为它将对象的副本存储在带有时间戳的单独的历史记录集中

  • 本文向大家介绍ASP.NET Core3.x API版本控制的实现,包括了ASP.NET Core3.x API版本控制的实现的使用技巧和注意事项,需要的朋友参考一下 前言 一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发。 我们其实可以通过多种方式进行实现我们A

  • 对于任何项目来说,版本控制都是很重要的一个方面。Atom集成了一些基本的Git和Github功能。 检出(checkout)HEAD中的版本 cmd-alt-Z快捷键检出当前文件在HEAD中的版本。 这是一个快捷的方法,来撤销所有你保存的或者阶段性的修改,并且把你的文件还原到HEAD中(最后提交)的版本。这从本质上相当于使用命令行在path中执行git checkout HEAD -- <path

  • 本章提供了网络 API 的版本控制指南。由于一个 API 服务可能提供多个 API 接口),因此 API 版本控制策略适用于API 接口级别,而不适用于 API 服务)级别。 为了方便起见,术语 API 指的是以下各节中的 API 接口。 网络API应该使用语义化的版本。比如给定版本号 MAJOR.MINOR.PATCH: 当做出不兼容修改的时候,修改 MAJOR 版本号 当以向后兼容的方式添加功

  • 你要为项目做版本控制,学会为项目做版本控制,是开发者的必备技能。用的工具叫 git。 git git 是一种版本控制工具,工具的使用只是一个熟练过程。 https://git-scm.com/ 安装 可以在 git 官网下载适合自己操作系统上用的 git 。也可以使用系统包管理去安装 git,Windows 如果下载了完整版的 cmder ,里面已经包含了 git 。 Windows Window

  • 版本控制 版本管理涉及团队协作,产品质量,和产品上线。使用版本控制工具可使我们自由的做的一些几点: 回退到任意版本 查看历史版本 对比两个版本差异 版本控制系统 版本控制系统(Version Control System)是一种记录若干文件修订记录的系统,它可以帮助开发者查阅或回档至某个历史版本。 手动版本控制 LVCS 本地 CVCS 集中式(例如 SVN) DVCS 分布式(例如 Git) 手