2013-11-04 120 views
4

我正在研究如何使用MongoDB获取应用程序。我对MongoDB相当陌生。我需要跟踪用户对系统做出的更改,添加/更改什么以及何时更改。 oplog似乎包含我需要的所有数据,在我看来,将oplog的副本保存到单独的不加限制的集合会给我所需的所有历史记录。它不需要快速检索或立即可用。使用Mongodb oplog来跟踪数据更改历史记录

这种方法有问题吗?任何人都可以提出一个最好的方式来存储这些数据?

+0

存在一个问题:磁盘空间使用量过大。 –

+0

保存的记录包含的数据过多,是否过度?这是我需要捕获这种或那种方式的信息。可以说有点太过于细节,但我仍然需要知道什么,谁以及何时更改数据。我希望可以有一些优雅的方式将这些数据的副本移动到其他位置,即使这些环境的可用性较差。 – RobRolls

+0

为什么使用MongoDB呢?它有很多数据吗?如果它不需要被查询/立即可用,则可能是矫枉过正。 – WiredPrairie

回答

1

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

例如,假设您正在更改用户的名称。你使用$set还是替换用户对象?从应用的角度来看,这并不重要,但oplog看起来完全不同。另外,如果您使用替换,则oplog中包含的信息将不会仅包含更改,而只包含新状态。这意味着要理解真正发生的事情的唯一方法就是对所有操作进行完整的重播(以便您拥有旧状态和新状态)。

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

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

+0

谢谢,我想你已经救了我一些时间。 – RobRolls