- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 mongodb 的新手。我有一个本地服务器和一个远程服务器。使用mongodump
/mongorestore
工具将mongo数据库从本地服务器迁移到远程服务器后,发现远程服务器上的数据库变大了。
这是我的示例:
在本地服务器上(Ubuntu 14.04.2 LTS,mongo 3.0.5):
> show dbs
Daily_data 7.9501953125GB
Monthly_data 0.453125GB
Weekly_data 1.953125GB
在远程服务器上(CentOS 6.7、mongo 2.4.3):
> 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
/mongorestore
是迁移mongo数据库的好保存方式?
最佳答案
您似乎已经注意到这里的问题是索引,因为它清楚地表明它是这里增长的 indexSize,并且有一个完全合乎逻辑的解释。
当运行恢复时,索引被重建,但在某种程度上避免阻塞恢复操作中发生的其他写操作。这与 Build Indexes in the Background 中采用的过程相似如文档中所述,不完全相同但接近。
为了获得最佳索引大小,最好先从目标数据库中删除索引并使用 --noIndexRestore
mongorestore
命令的选项,因为这将阻止在数据加载期间建立索引。
完成后您可以运行常规 createIndex
排除“后台”选项的任何使用,以便在前台创建索引。结果将是在创建索引期间数据库将被阻止读取和写入,但生成的索引将具有更小的大小。
至于一般做法,您会注意到其他数据大小实际上会在“重建”过程中“变小”,然后在恢复数据时不会创建源中存在的任何松弛空间。
mongodump
中的数据是二进制格式的,应该优先使用 mongoexport
和相关的 mongoimport
的文本格式,当然,当从一个 MongoDB 实例获取数据并在另一个实例上使用时,因为这不是这些工具的目的。
其他备用 ae 文件系统副本,例如 LVM 快照,当然会恢复到与创建备份副本完全相同的状态。
关于mongodb - 想不通为什么迁移后 mongo 数据库变大了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665131/
我是一名优秀的程序员,十分优秀!