[英]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.