我是mongodb的新手。我有一个本地服务器和一个远程服务器。使用you need to have the functionality of this line var theoutput = thechange + thepurehtml;
/ mongodump
工具将mongo数据库从本地服务器迁移到远程服务器后,我发现远程服务器上的数据库大小变大了。
这是我的样本:
本地服务器上的(Ubuntu 14.04.2 LTS,mongo 3.0.5):
mongorestore
远程服务器上的(CentOS 6.7,mongo 2.4.3):
> show dbs
Daily_data 7.9501953125GB
Monthly_data 0.453125GB
Weekly_data 1.953125GB
我还检查了一个要比较的集合的状态,计数是相同的但是大小(如> show dbs
Daily_data 9.94921875GB
Monthly_data 0.953125GB
Weekly_data 3.9521484375GB
,indexSize
等)已经改变:
这是本地服务器上的集合状态:
totalIndexSize
这是远程服务器上的集合状态:
> db.original_prices.stats()
{
"ns" : "Daily_data.original_prices",
"count" : 9430984,
"size" : 2263436160,
"avgObjSize" : 240,
"numExtents" : 21,
"storageSize" : 2897301504,
"lastExtentSize" : 756662272,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
"userFlags" : 1,
"capped" : false,
"nindexes" : 2,
"indexDetails" : {
},
"totalIndexSize" : 627777808,
"indexSizes" : {
"_id_" : 275498496,
"symbol_1_dateTime_1" : 352279312
},
"ok" : 1
}
如果> db.original_prices.stats()
{
"ns" : "Daily_data.original_prices",
"count" : 9430984,
"size" : 1810748976,
"avgObjSize" : 192.00000508960676,
"storageSize" : 2370023424,
"numExtents" : 19,
"nindexes" : 2,
"lastExtentSize" : 622702592,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 639804704,
"indexSizes" : {
"_id_" : 305994976,
"symbol_1_dateTime_1" : 333809728
},
"ok" : 1
}
/ mongodump
是迁移mongo数据库的好方法吗?
答案 0 :(得分:3)
这里你似乎已经注意到的问题是索引清楚地表明它是indexSize已经在这里增长,并且有一个完美的逻辑解释。
运行还原时,将重建索引,但这样可以避免阻止还原操作中发生的其他写入操作。这与文档中描述的Build Indexes in the Background中使用的过程类似,不完全相同但接近。
为了获得最佳索引大小,最好首先从目标数据库中删除索引,并使用mongorestore
选项和mongodump
命令,因为这样可以防止在数据加载期间构建索引
然后,当完成后,您可以运行常规--noIndexRestore
,排除使用"背景"选项,以便在前台创建索引。结果是在创建索引期间将阻止数据库进行读写,但结果索引的大小将会更小。
至于一般做法,你会注意到其他数据大小实际上会出现"更小"就像在重建过程中一样#34;然后,在恢复数据时,不会创建源中存在的任何松弛空间。
来自mongoexport
的数据采用二进制格式,并且应该始终优先使用mongoimport
和相关s1
的文本格式,当然从一个MongoDB实例获取数据时并且在另一个上使用,因为那不是那些工具的目的。
其他替代文件系统副本,例如LVM快照,当然会恢复与备份副本完全相同的状态。
答案 1 :(得分:1)
可能影响集合磁盘大小的因素包括底层硬件,文件系统和配置。在您的情况下,主要因素似乎是本地和远程服务器上使用的存储引擎的差异:当远程运行旧版本时,本地服务器正在运行Mongo 3.0。这基于paddingFactorNote
属性的存在是显而易见的,但您可以通过在两种环境中运行db.version()
来确认。
在Mongo 2.4 / 2.6和Mongo 3.0之间,对集合的存储方式进行了几项重要更改,尤其是添加了WiredTiger存储引擎作为默认mmapv1存储引擎的替代方案。 mmapv1引擎(您使用的)在分配期间如何填充文档以适应文档大小的增长也发生了变化。
尺寸差异的另一个主要原因来自您使用mongorestore
。在正常使用期间,mongo数据库不会以最小化磁盘使用的方式存储。但是,mongorestore
以紧凑的方式重建数据库/集合,这就是为什么对于您发布的集合,远程storageSize
更小。