需要跟踪对数据库中对象所做的更改。
简单的实现是让镜像表通过触发器将记录插入其中,无论是在数据库内部还是在应用程序内部,但这会影响性能,并且随着时间的推移,镜像数据库会变得庞大,并且当必须更改原始表时,维护时间基本上会加倍(镜像表需要反射(reflect)这种变化)。
由于我最大的要求是对数据库和应用程序性能的影响最小,我目前的偏好是将更改转储到 syslog-ng 中而不是 udp 并将它们存储在纯文本文件中。
毕竟变更日志不会被频繁访问,因此随着时间的推移将其存档也是可以的。但显然,通过这样的设置,实际访问该数据是相当棘手的。
所以我想我的问题是 - 是否已经有一个系统至少可以部分满足我的需求?完美契合将是 UDP 访问的无模式仅附加数据库系统,可以自动存档数据(或至少需要执行此操作的最少配置量)或插入性能的非常缓慢的下降。 MongoDB?沙发数据库?你的数据库?
最佳答案
嗯,有很多方法可以解决这个问题。我最熟悉 MongoDB,所以会倾向于那个方向。一般来说,我认为它会满足您对性能的需求,并且使用副本集,从从属设备上读取可能是采用的方法。但是,版本控制不是内置的。您可以在此处查看使用 Mongoid::Versioning 进行版本控制的一种方法:
Mongoid::Versioning - how to check previous versions?
你提到的其他解决方案可能有更好的原生支持,但我不能说。希望这至少能给你一些关于 MongoDB 方面的指导。
关于mysql - 什么是存储对象更改历史的好解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164471/