• MongoDB空间整理


    测试环境:192.168.1.55,单机
    数据量: 4千万左右。
    测试:db.repaireDatabase效果
    db.compact 效果
    通过stats命令获取该数据库的相关信息:
    db.stats() { "db" : "test",
    "collections" : 7, --collection 数量 
    "objects" : 28, --对象数量 
    "avgObjSize" : 50.57142857142857, --对象平均大小 
    "dataSize" : 1416, --数据大小 
    "storageSize" : 31744, --数据大小(含预分配空间) 
    "numExtents" : 7, --事件数量 
    "indexes" : 7, --索引数量 
    "indexSize" : 57344, --索引大小 
    "fileSize" : 50331648, --文件大小 
    "ok" : 1 --本次取stats 是否正常 
    } >

    1. 未删数据前

    show dbs

    aa 0.000GB
    admin 0.000GB
    gwgps 3.609GB
    local 0.000GB

    db.stats()

    {
    "db" : "gwgps",
    "collections" : 1,
    "objects" : 41345131,
    "avgObjSize" : 554.8684502656431,
    "dataSize" : 22941108764,
    "storageSize" : 3081945088,
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 792702976,
    "ok" : 1
    }

    2.程序删除N条后

    show dbs

    aa 0.000GB
    admin 0.000GB
    gwgps 3.610GB
    local 0.000GB

    db.stats()

    {
    "db" : "gwgps",
    "collections" : 1,
    "objects" : 41344233,
    "avgObjSize" : 554.8684691284514,
    "dataSize" : 22940611272,
    "storageSize" : 3081945088,
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 794288128,
    "ok" : 1
    }

    3.repaireDatabase之后

    db.repairDatabase()

    { "ok" : 1 }

    show dbs

    aa 0.000GB
    admin 0.000GB
    gwgps 3.609GB
    local 0.000GB

    db.stats()

    {
    "db" : "gwgps",
    "collections" : 1,
    "objects" : 41344233,
    "avgObjSize" : 554.8684691284514,
    "dataSize" : 22940611272,
    "storageSize" : 3081945088,
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 792682496,
    "ok" : 1
    }

    4.compact命令
    > db.runCommand({compact:'location'}) { "ok" : 1 }

    show dbs

    aa 0.000GB
    admin 0.000GB
    gwgps 3.612GB
    local 0.000GB

    db.stats()

    {
    "db" : "gwgps",
    "collections" : 1,
    "objects" : 41337719,
    "avgObjSize" : 554.8686059818637,
    "dataSize" : 22937002516,
    "storageSize" : 3081945088,
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 795889664,
    "ok" : 1
    }

    经过重复循环多次删除之后,用repaireDatabase,show dbs, du -sh命令查看空间,暂得到如下结论:
    1. 使用db.repairDatabase时候建议停止数据库的读写,需要大于等于数据差不多的空间,否则可能无法执行该命令。
    2. 4千万数据repairDatabase需要大约10分钟左右,40亿,400亿,4000亿效果待测。
    3. storageSize 该值未减少,因为包括预分配空间,有其积极的意义。
    4. 实际空间减少的是索引所占的空间。
    5. 对空间可控可以禁用日志或日志轮询复写,但不推荐。
    6. 禁止预分配空间或预设置分配空间(启动数据库时可以选择noprealloc参数),但影响插入效率。
    7. 推荐合适时机定时压缩,采用compact压缩指定collection,或repairDatabase压缩数据库。

  • 相关阅读:
    HTTP的GET和POST请求
    移动开发平台性能比較
    Struts2之类型转换器的使用
    对Socket CAN的理解(4)——【Socket CAN接收数据流程】
    当罗密欧遇到朱丽叶... ...当指针遇到数组
    Qt的Script、Quick、QML的关系与总结
    nyoj27水池数目 (DFS)
    HBase行锁原理及实现
    poj1852ant
    JSTL&EL表达式
  • 原文地址:https://www.cnblogs.com/myibm/p/5939332.html
Copyright © 2020-2023  润新知