使用Mongodb oplog跟踪数据更改历史记录

时间:2013-11-04 19:06:52

标签: mongodb replication

我正在考虑将MongoDB用于应用程序。我是MongoDB的新手。我需要跟踪用户对系统所做的更改,添加/更改的内容以及更改时间。 oplog似乎包含了我需要的所有数据,在我看来,将oplog的副本持久保存到单独的无上限集合中会给我所需的所有历史记录。它不需要快速检索或立即可用。

这种方法有问题吗?任何人都可以建议存储这些数据的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

这种方法的问题在于它的水平极低。从应用程序的角度来看,将这些信息恢复到有意义的地步将是非常令人烦恼的。

例如,假设您正在更改用户的名称。您使用$set还是更换用户对象?从应用程序的角度来看,这没关系,但oplog看起来会完全不同。此外,如果您正在使用替换,则oplog中包含的信息将不仅包含更改,而只包含新状态。这意味着理解实际情况的唯一方法是执行所有操作的完整重放(因此您拥有旧状态和新状态)。

此外,oplog不包含用户执行哪些操作的任何信息,除非您将数据库用户用作应用程序用户,我强烈建议不要这样做。

在我看来,这应该由应用程序处理。例如,您可以使用Unit of Work pattern,但不是仅在客户端上间歇性地使用它,您可能希望实际将工作单元(或其某些表示形式)序列化到数据库。我很确定这个模式有一个名字,我现在还记不起来了。