database - 使用诸如 Git 之类的 VCS 来跟踪数据库内容(记录)更改?
问题描述
我正在处理的数据库并没有那么大,只有来自半打表的数十万条记录。如果我可以跟踪表格内容(记录)更改,这将非常有帮助,以帮助测试以及实际业务案例。
目标是能够在 GIT 或任何其他工具中可视化版本之间的差异,例如能够即时查看字段值更改、行添加或删除等。
一个用例是我可以使用这个工具来检查应用程序在测试中更新到数据库的结果。
解决方案
在 Git 中?是和不是。也许。可能不是。
您可以以稳定的纯文本形式拍摄数据库的快照,并将此快照提交到 git。几乎所有的数据库系统都支持将表导出为一种或多种纯文本格式,例如 SQL DDL 语句或 CSV 文件。“稳定”是指快照之间的行和列的排序相同,否则您的差异将不起作用。
您可能遇到的问题是文件大小和 git 性能。“只有几十万条记录”仍然是一个纯文本的大文件,远大于 git 设计的文件类型:编程源代码。大文件会以多种方式影响 git:由于 git blob 是文件级的,这意味着如果表的单行中只有一个字段发生更改,git 将存储表的完整副本,而不仅仅是最小的差异。好吧,git确实知道如何进行更精细的基于差异的存储,但这是为较早的历史保留的,因为它以速度换磁盘空间。
测试起来很容易。
使用版本化表行
通常这直接在数据库中完成,而不是更新一行,而是插入一个新行,其他表中的所有外键都更新为指向新行,旧行标记为已归档。
使用数据库触发器来跟踪更改
可以将更改记录到更改跟踪表或辅助数据库(见下)。
您可以使用NoSQL DB 来存储快照或更改。
您可以将表的完整快照存储在 MongoDB 等辅助 NoSQL 数据库中。这些行将具有时间戳或版本列,以便所有快照都可以驻留在同一个表中。
或者你可以在你的数据库中设置一个触发器,只记录你的辅助数据库中的更新行。
如果源表有更新时间戳,您可以定期查询更改的行。如果您无法在数据库中设置触发器,请使用此选项。
查看您的数据库本机支持的内容
您还应该查看您的数据库平台是否本机支持此功能。
一些数据库有可以查询的日志文件。
推荐阅读
- python - 将字符串转换为包含字典的数组
- python - Python迭代地将整数添加到列表中的字符串
- react-native - 如何在本机反应中绘制服装数量的正方形?
- java - 如何在 JButton 中设置文本颜色?
- xml - ForEach 列表的每一行获取字符串,在 XML 中搜索特定节点并使用 Powershell 删除父节点
- python - Python ModuleNotFoundError 'smored' 即使文件夹 smored 有 __init__.py
- android - 固定布局并取消固定滚动
- python - Python:遍历 CSV 的每一行,计算每一行中的标记,创建一个新的 CSV,其中包含原始 CSV 每一行的标记数
- php - 从 Ajax 原型检索 XML 数据
- php - 如何使用准备好的语句动态绑定参数?