【问题标题】:Getting all database changes获取所有数据库更改
【发布时间】:2012-12-27 08:40:12
【问题描述】:

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

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

【问题讨论】:

  • 如果您的数据库负载过重,这可能会杀死您的应用程序!
  • 有什么想法可以跟踪特定时间间隔内的数据变化吗?

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


【解决方案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) 的上限集合。您可以使用可尾游标来跟踪提交到oplog 的更改。 oplog 详细说明了对数据库的所有更改,并且是 MongoDB 用于复制的机制。

【讨论】:

  • 选项 #3 的相关工具是使用来自 10gen 实验室的实验性 Mongo Connector。 Mongo Connector 是一个 Python 模块,它提供了一个用于跟踪复制 oplog 的接口。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多