Mongodb原生导入导出工具对比
总览:
当你想把某个mongodb实例中的数据导出,然后再导入到另一mongodb的实例的时候,有两种工具可以选择。导出:mongodump和mongoexport,导入mongorestore和mongoimport。那当我们想导入导出数据时到底应该选择哪种工具呢?下面我们详细分析两种工具的不同点。
mongoexport,mongoimport导出导入的数据格式更丰富
mongoexport可以把实例中的数据导出成JSON, CSV格式的数据。JSON,CSV格式的数据方便人眼阅读,并且很多程序都能处理这些格式的数据。如果要使用一些程序对实例中的数据进行分析,那么JSON,CSV格式的数据便有很大的优势,各种分析处理程序都支持这两种通用的文件格式。而mongodump只能把数据保存为BSON的格式,BSON大家可以把它想象成JSON的二进制模式,既然是二进制模式那肯定人眼是无法直接阅读的,为了能够人眼阅读,需要使用bsondump(mongodb的开源工具)将BSON格式的数据转换成JSON格式的数据,用法很简单 bsondump test.bson > test.json,即可转换成人眼能够阅读的JSON格式数据。
mongoexport导出的数据会丢掉一些数据类型
前面说了mongoexport 导出的数据是JSON,CSV格式的数据,而mongodb实例本身里面的数据类型其实是BSON的数据类型。而JSON是无法真正表达所有BSON的数据类型,只能表达BSON数据类型的一个子集,精确的说JSON对某些BSON数据类型使用的是严格模式(strict mode).例如BSON里面对于时间有Date这种数据类型,而转成JSON格式的时候就是一个字符串类型来代表Date,显然这种表示方式会丢掉一些数据类型。所以对于线上正式环境,如果数据类型很多,尽量避免使用mongoexport,mongoimport导出导入数据。
以免丢掉源库中的某些数据类型。
mongoexport,mongoimport需要的权限更少
mongoexport导出数据,只需要目标库的read role权限,mongoimport 导入数据只需要目标库readWrite role权限。Mongodump导出数据需要目标库read权限,admin以及local数据库read权限。Mongorestore导入数据需要readWrite权限。显示mongodump需要的权限更多。
mongodump,mongorestore能够使用oplog
如果导出过程比较长,而这段时间变更的数据怎么办呢,大家脑海里冒出来的就是使用oplog来同步这段时间的数据。如果要使用oplog那就只有mongodump和mongorestroe了,这对工具在加了—oplog参数后会将导出这段时间的任何数据变更记录到oplog.bson里面,就可以做到任意时间的数据同步了。而mongoexport和mongoimport就没有这个功能了。
mongoexport,mongoimport不会导出shard模式下的元数据信息
Shard模式下。Mongodb实例分为mongos,config,shard。其中config记录的是管理整个集群数据的元数据信息,例如哪些数据存在哪些shard,各个shard的名字以及其中成员信息。对应这些信息mongoexport是不会导出来的,它只是导出数据,然后使用mongoimport将这些数据一条一条插入到目标库,而不管目标库的shard个数,因为这些都是目标库自己内部处理的。而mongodump,mongorestroe则可以并行分别导出shard,config数据,这样导出导入数据速度更快,当然也有一个问题如果目标库和源库的shard成员信息不一样,mongorestore导入数据后,还需要将config里面的数据改为目标库对应的信息。否则集群是无法使用的。
总结:
上面就是两对导入导出工具在大方面的不同了,至于细节,大家可以在mongodb官网上阅读他们的使用指南,看他们各自支持的参数。当你面对你的应用环境时到底选择哪种工具,可以参考下这些大方面的不同点,然后选择合适的工具完成你的需要。
- 点赞
- 收藏
- 关注作者
评论(0)