验证两个Mongodb集合是否相同

时间:2014-12-07 18:51:15

标签: mongodb

我只是在寻找通常采用两个文件内容的shasum的最简单的等价物。我不想通过eval函数比较每个项目,因为这篇文章建议: How to compare 2 mongodb collections?

Mongodb的Sharding / Replication功能必须已经为此内置了一个有效的方法,但是我没有看到关于如何为了比较而访问它的文档条目。

1 个答案:

答案 0 :(得分:8)

  

Mongodb的Sharding / Replication功能必须已经内置了一个有效的方法,但是我没有看到关于如何进行比较的文档条目。

复制依赖于幂等operation log (oplog),并且不必计算集合的校验和。 MongoDB手册详细介绍了replication synchronization,包括初始同步和正在进行的复制行为。

分片使用内部 dbHash command来计算数据库中所有集合的md5校验和。它旨在验证分片集群配置数据库中集合的一致性,但可用于计算任何数据库的md5总和。

注意dbHash命令显然不是稳定的面向客户端的API的一部分,因此实现/ API可能会在MongoDB版本之间发生变化,恕不另行通知。

由于此命令会迭代所选数据库的所有集合中的所有文档,因此在大型数据库或生产数据库上运行时需要谨慎(特别是如果数据集大于RAM)。读取大量文档可能导致临时从内存工作集中分页出有用的数据/索引。

命令输出类似于以下内容:

> db.runCommand('dbHash')
{
  "numCollections": 2,
  "host": "nibbler.local",
  "collections": {
    "foo1": "adf5db735ce0ac74c35a561675614676",
    "foo2": "adf5db735ce0ac74c35a561675614676",
    "foo3": "26e01a5da467064790a61108170a3b5c"
  },
  "md5": "f8f53a3cde773a61f5b4ccf4c3d99e07",
  "timeMillis": 0,
  "fromCache": [ ],
  "ok": 1
}

在此示例中,foo1foo2个集合具有相同的md5总和,而foo3则不同。