首页 > 解决方案 > 使用诸如 Git 之类的 VCS 来跟踪数据库内容(记录)更改?

问题描述

我正在处理的数据库并没有那么大,只有来自半打表的数十万条记录。如果我可以跟踪表格内容(记录)更改,这将非常有帮助,以帮助测试以及实际业务案例。

目标是能够在 GIT 或任何其他工具中可视化版本之间的差异,例如能够即时查看字段值更改、行添加或删除等。

一个用例是我可以使用这个工具来检查应用程序在测试中更新到数据库的结果。

标签: databasegitversion-control

解决方案


在 Git 中?是和不是。也许。可能不是。

您可以以稳定的纯文本形式拍摄数据库的快照,并将此快照提交到 git。几乎所有的数据库系统都支持将表导出为一种或多种纯文本格式,例如 SQL DDL 语句或 CSV 文件。“稳定”是指快照之间的行和列的排序相同,否则您的差异将不起作用。

您可能遇到的问题是文件大小和 git 性能。“只有几十万条记录”仍然是一个纯文本的大文件,远大于 git 设计的文件类型:编程源代码。大文件会以多种方式影响 git:由于 git blob 是文件级的,这意味着如果表的单行中只有一个字段发生更改,git 将存储表的完整副本,而不仅仅是最小的差异。好吧,git确实知道如何进行更精细的基于差异的存储,但这是为较早的历史保留的,因为它以速度换磁盘空间。

测试起来很容易。

使用版本化表行

通常这直接在数据库中完成,而不是更新一行,而是插入一个新行,其他表中的所有外键都更新为指向新行,旧行标记为已归档。

使用数据库触发器来跟踪更改

可以将更改记录到更改跟踪表或辅助数据库(见下)。

您可以使用NoSQL DB 来存储快照或更改。

  • 您可以将表的完整快照存储在 MongoDB 等辅助 NoSQL 数据库中。这些行将具有时间戳或版本列,以便所有快照都可以驻留在同一个表中。

  • 或者你可以在你的数据库中设置一个触发器,只记录你的辅助数据库中的更新行。

  • 如果源表有更新时间戳,您可以定期查询更改的行。如果您无法在数据库中设置触发器,请使用此选项。

查看您的数据库本机支持的内容

您还应该查看您的数据库平台是否本机支持此功能。

一些数据库有可以查询的日志文件。


推荐阅读