获取所有数据库更改

时间:2012-12-27 08:40:13

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

我正在使用mongodb作为数据库在rails 3.2中开发一个应用程序。我正在使用mongoid gem。

我想在运行时跟踪数据库的所有更改,但我不知道该怎么做 关于这个的任何线索?

2 个答案:

答案 0 :(得分:1)

您可以使用多种方法来跟踪数据更改,具体取决于您是只对监控当前活动感兴趣还是需要创建某种事务历史记录。

按照最少努力的粗略顺序:

1)Enable the MongoDB Query Profiler

如果您启用“ 2 ”级别的查询分析器,它将收集特定数据库的所有操作(读取和写入)的分析数据。您也可以在configuration options中启用此功能,以更改mongod启动时所有数据库的分析默认值。配置文件数据保存在每个数据库的上限集合中,并且仅包含查询的最新快照。查询概要分析状态也可以在运行时更改,因此您可以根据需要轻松启用或禁用。

2)Add Mongoid callbacks to your application

添加适当的逻辑Mongoid回调,例如after_insertafter_saveafter_upsert,具体取决于您尝试捕获的信息。

3)Create a tailable cursor on the MongoDB oplog

如果您将MongoDB作为副本集的一部分(或使用--replSet选项)运行,则会创建一个名为oplog (operations log)的上限集合。您可以使用tailable游标跟踪更改,因为它们已提交到oplogoplog详细说明了对数据库的所有更改,也是MongoDB用于复制的机制。

答案 1 :(得分:0)

我不熟悉Mongodbmongoid,但这是我对使用MySQL的人的想法(我希望它能给你一些线索):

首先拍摄数据库的快照(使用像mysqldump这样的工具。)

然后,在某些时间间隔内,检查(审核)那些updated_at值比您拍摄快照的时间(或更晚)或上次审核时间更长的记录。

现在,您有两个版本的数据,可以检查更改。

正如我所说,这只是一个想法,需要更加精炼。我希望它能给你一个线索。