Mongodb Can';我不明白为什么mongo数据库在迁移后变得更大?

Mongodb Can';我不明白为什么mongo数据库在迁移后变得更大?,mongodb,database-migration,mongodump,mongorestore,Mongodb,Database Migration,Mongodump,Mongorestore,我是mongodb的新手。我有一个本地服务器和一个远程服务器。在使用mongodump/mongorestore工具将mongo数据库从本地服务器迁移到远程服务器后,我发现远程服务器上的数据库越来越大 这是我的样本: 在本地服务器上(Ubuntu 14.04.2 LTS,mongo 3.0.5): 在远程服务器(CentOS 6.7、mongo 2.4.3)上: 我还检查了要比较的一个集合的状态,计数相同,但大小(如indexSize,totalIndexSize等)已更改: 这是本地服务器上集

我是mongodb的新手。我有一个本地服务器和一个远程服务器。在使用
mongodump
/
mongorestore
工具将mongo数据库从本地服务器迁移到远程服务器后,我发现远程服务器上的数据库越来越大

这是我的样本:

在本地服务器上(Ubuntu 14.04.2 LTS,mongo 3.0.5):

在远程服务器(CentOS 6.7、mongo 2.4.3)上:

我还检查了要比较的一个集合的状态,计数相同,但大小(如
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
/
mongorestore
是迁移mongo数据库的好保存方式

影响集合磁盘大小的因素包括底层硬件、文件系统和配置。在您的情况下,主要因素似乎是本地服务器和远程服务器上使用的存储引擎的不同:本地服务器运行的是Mongo 3.0,而远程服务器运行的是旧版本。根据
paddingFactorNote
属性的存在,这一点很明显,但是您可以通过在两种环境中运行
db.version()
进行确认

在Mongo 2.4/2.6和Mongo 3.0之间,对集合的存储方式进行了一些重要的更改,尤其是添加了WiredTiger存储引擎作为默认mmapv1存储引擎的替代。mmapv1引擎(您正在使用)在分配过程中填充文档的方式也发生了更改,以适应文档大小的增长


尺寸差异的另一个主要原因是使用
mongorestore
。在正常使用期间,mongo数据库的存储方式不能最大限度地减少磁盘使用。但是,
mongorestore
以紧凑的方式重建数据库/集合,这就是为什么对于您发布的集合,远程
storageSize
更小。

您似乎已经注意到,这里的问题是索引,这清楚地表明,这里增长的是索引大小,这是一个完全合乎逻辑的解释

运行还原时,将重建索引,但重建方式应避免阻塞还原操作中发生的其他写入操作。这与文档中所述的过程类似,不完全相同,但很接近

为了获得最佳索引大小,最好先从目标数据库中删除索引,并使用带有
mongorestore
命令的选项,因为这将防止在数据加载期间建立索引

然后,当完成后,您可以运行一个排除任何“background”选项使用的常规程序,以便在前台创建索引。结果是,在创建索引期间,数据库将被阻止读写,但生成的索引的大小将更小

至于一般做法,您会注意到,其他数据大小实际上会变得“更小”,就像在“重建”过程中一样,那么在恢复数据时,将不会创建源中存在的任何空闲空间

来自
mongodump
的数据采用二进制格式,在从一个MongoDB实例获取数据并在另一个实例上使用时,应始终优先使用
mongoexport
和相关的
mongoimport
的文本格式,因为这不是这些工具的目的


其他替代ae文件系统副本,如LVM快照,当然会以与备份副本完全相同的状态进行恢复。

您是否可以检查是否使用该选项启动了第一台服务器?您使用的是哪个版本的MongoDB?对于@MarkusWMahlberg来说,这更像是一个问题。我没有任何选择就启动了MongoDB服务器。对于我的本地服务器,它是mongo 2.4.9,对于远程服务器,它是mongo 2.4.3。本地服务器怎么可能是2014年1月10日发布的
2.4.9
,当时
paddingFactorNote
下可见的字符串在上被修改了@kyan您是通过在mongo shell中运行
db.version()
获得版本号的吗?@AerandiR啊,对不起,这是我的错。实际上,我在本地使用MongoShell 2.4.9和MongoServer3.0.5。你认为这可能是造成我问题的原因吗?
> 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
}