MongoDB copyDatabase 命令成功复制了数据库,但在 ner 服务器上给出了不同的大小

MongoDB copyDatabase 命令成功复制了数据库,但在 ner 服务器上给出了不同的大小

所以我必须将这个数据库移到另一台服务器上,我正在使用 MongoDB复制数据库命令。

看起来它已成功复制,但两台服务器的大小相差 3 倍。不过,对象和集合的数量相同……

第一台服务器的 db.stats():

> use myProjDb;
switched to db myProjDb
> db.stats
function (scale){
    return this.runCommand( { dbstats : 1 , scale : scale } );
}
> db.stats();
{
    "db" : "myProjDb",
    "collections" : 9,
    "objects" : 892,
    "avgObjSize" : 303.76681614349775,
    "dataSize" : 270960,
    "storageSize" : 1609728,
    "numExtents" : 18,
    "indexes" : 10,
    "indexSize" : 106288,
    "fileSize" : 201326592,
    "nsSizeMB" : 16,
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 5
    },
    "extentFreeList" : {
        "num" : 0,
        "totalSize" : 0
    },
    "ok" : 1
}
> ^C
bye

复制后,db.stats() 为新的。CoreReports 是新名称。:

> use CoreReports
switched to db CoreReports
> db.stats();
{
    "db" : "CoreReports",
    "collections" : 9,
    "objects" : 892,
    "avgObjSize" : 397.13004484304935,
    "dataSize" : 354240,
    "storageSize" : 663552,
    "numExtents" : 17,
    "indexes" : 10,
    "indexSize" : 106288,
    "fileSize" : 67108864,
    "nsSizeMB" : 16,
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 5
    },
    "extentFreeList" : {
        "num" : 0,
        "totalSize" : 0
    },
    "ok" : 1
}
> ^C
bye

答案1

您并不完全清楚您关心的是哪个部分,但我认为有两种可能性 - 存储大小和平均对象和数据大小。

如果你指的是对象和数据大小的差异,那么这两个实例运行的是什么版本?版本 2.6 已切换为使用使用2倍大小作为默认分配方法(而不是以前的精确匹配分配方法),唯一的区别在于对象(索引大小相同),这表明这可能是原因。如果它们都是 2.6,则值得检查原始数据库上的设置是否可能已被更改(请参阅上面的相同链接以了解如何执行此操作)。

就存储大小的差异而言,原始数据库很可能只是有碎片(来自删除、更新、移动等)。如果您运行维修从头开始重写它(这就是您复制它时所做的),您将看到相同(或接近)的结果。

相关内容