0

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

我想在运行时跟踪数据库的所有更改,但我不知道该怎么做。
这有什么线索吗?

4

2 回答 2

1

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

按照从最小到最大努力的粗略顺序:

1)启用 MongoDB 查询探查器

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

2)将 Mongoid 回调添加到您的应用程序

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

3)在MongoDB oplog上创建一个tailable cursor

如果您将 MongoDB 作为副本集的一部分(或使用--replSet选项)运行,它会创建一个名为oplog(operations log)的上限集合。您可以使用可尾光标跟踪提交到oplog. 数据库所有更改的oplog详细信息,是 MongoDB 用于复制的机制。

于 2013-01-03T05:13:45.727 回答
0

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

首先,您拍摄数据库的快照(使用类似的工具mysqldump)。

然后在特定的时间间隔内,您检查(审核)那些updated_at值大于(晚于)拍摄快照时间或上次审核时间的记录。

现在,您有两个版本的数据,您可以检查它们的变化。

正如我所说,这只是一个想法,还需要进一步完善。我希望它能给你一个线索。

于 2012-12-27T09:27:38.290 回答