Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Mongodb oplog跟踪数据更改历史_Mongodb_Replication - Fatal编程技术网

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

使用Mongodb oplog跟踪数据更改历史,mongodb,replication,Mongodb,Replication,我正在考虑将MongoDB用于应用程序。我对MongoDB相当陌生。我需要跟踪用户对系统所做的更改、添加/更改的内容以及更改的时间。oplog似乎包含了我需要的所有数据,在我看来,将oplog的副本持久化到一个单独的无上限集合将为我提供我需要的所有历史记录。它不需要快速检索或立即可用 这种方法有问题吗?有人能推荐一种存储这些数据的最佳方法吗 这种方法的问题是它的级别非常低。从应用程序的角度来看,将这些信息恢复到有意义的程度是非常烦人的 例如,假设您正在更改一个用户的名称。您是使用$set还是替换

我正在考虑将MongoDB用于应用程序。我对MongoDB相当陌生。我需要跟踪用户对系统所做的更改、添加/更改的内容以及更改的时间。oplog似乎包含了我需要的所有数据,在我看来,将oplog的副本持久化到一个单独的无上限集合将为我提供我需要的所有历史记录。它不需要快速检索或立即可用


这种方法有问题吗?有人能推荐一种存储这些数据的最佳方法吗

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

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

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


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

有一个问题:磁盘空间使用量过大。过多是因为保存的记录包含太多数据?这是我需要以某种方式获取的信息。可以说有点太详细了,但我仍然需要知道数据更改的内容、对象和时间。我希望有一种优雅的方法可以将数据的副本移动到其他位置,即使是在可用性非常低的环境中。为什么要使用MongoDB呢?是不是有很多数据?如果它不需要被查询/立即可用,那可能是太过分了。@wiredparie对不起,也许我不清楚。我使用MongoDB作为应用程序的数据存储。它满足该应用程序的需要。我不必最终将这些历史数据存储在MongoDB中,我非常愿意接受任何其他用于存储此类信息的想法。谢谢,我认为您为我节省了一些时间。