dbHash,检查MongoDB数据库一致性或数据变更

背景

在做数据备份或回复,或做数据流(Data Pipline)时,我们常常要检查前后数据的一致性,数据是否发生了变换。
这时候需要从数据库的某一个Collection导出其中数据的散列值,作为该数据的指纹。
MongoDB提供了一个dbHash方法,用来实现这个功能。

参考文献

实现:

命令格式:

1
db.runCommand ( { dbHash: 1, collections: [ <collection1>, ... ] } )

注意:

  • collection是可选项,省略则输出整个数据库和全部collection的散列值,当然速度要慢一些。

实例,检索test表的散列值:

1
db.runCommand({dbHash:1,collections:["test"]})

输出结果

关于性能

对于1,672,321个文档,大小3,503,632,319的数据表计算散列值,我的笔记本大约需要10秒左右,这个性能相当可观。