[英]In Rails 4, how would you log and undo all database changes specific to one user?
[英]Getting all database changes
我正在用mongodb作为数据库在Rails 3.2中开发一个应用程序。 我正在使用蒙古型宝石。
我想在运行时跟踪对数据库的所有更改,但是我不知道该怎么做。
有什么线索吗?
可以使用多种方法来跟踪数据的更改,具体取决于您是仅对监视当前活动感兴趣还是需要创建某种交易历史记录。
以最少到最大的努力:
如果以“ 2 ”级别启用查询分析器,它将为特定数据库的所有操作(读取和写入)收集分析数据。 您还可以在配置选项中启用此功能 ),以更改mongod
启动时所有数据库的分析默认设置。 概要文件数据保存在每个数据库的上限集合中,并且仅包含最近的查询快照。 查询概要分析状态也可以在运行时更改,因此您可以根据需要轻松地启用或禁用。
根据您要捕获的信息,添加适当的逻辑Mongoid回调,例如after_insert
, after_save
和after_upsert
。
如果您将MongoDB作为副本集的一部分(或使用--replSet
选项)运行,它将创建一个名为oplog
(操作日志)的--replSet
集合。 您可以使用tailable光标跟随变化,因为它们致力于oplog
。 该操作oplog
详细说明了对数据库的所有更改,并且是MongoDB用于复制的机制。
我对Mongodb
和mongoid
都不熟悉,但这是我对使用MySQL的人的想法(希望它能给您一些线索):
首先,为数据库拍摄快照(使用mysqldump
类的工具)。
然后,以一定间隔检查(审核)那些updated_at
值大于(大于)快照时间或上次审核时间的记录。
现在,您有两个版本的数据,可以检查它们的更改。
正如我所说的,这只是一个想法,需要进一步完善。 我希望它能给您一个线索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.