MongoDB-巨大的数据量?

时间:2013-11-12 10:20:02

标签: mongodb

我是MongoDB的新手,我有一个包含以下字段的集合:

> db.TestTable.findOne()
{
        "_id" : ObjectId("527c48e99000cf10bc2a1d82"),
        "ID" : "16587",
        "Name" : "N15247",
        "Serial1" : "11",
        "Serial2" : "727",
        "DateTime" : ISODate("1998-12-15T18:30:00Z"),
        "CompID" : "ID465",
        "CompName" : "F1460"
}

我使用cson驱动程序使用BsonDocument将大约300,000,000个文档插入到集合中。集合的大小是:

> db.TestTable.stats()
{
        "ns" : "FeatureParser.LogsTable",
        "count" : 300000000,
        "size" : 62399477600,
        "avgObjSize" : 207.99825866666666,
        "storageSize" : 68783787568,
        "numExtents" : 54,
        "nindexes" : 2,
        "lastExtentSize" : 2146426864,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 14878186064,
        "indexSizes" : {
                "_id_" : 9746789472,
                "dateTime_1" : 5131396592
        },
        "ok" : 1
}

MongoDB是否为文件inserteD占用了太多空间?无论如何,DB的大小可以减少吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

来自http://docs.mongodb.org/manual/faq/storage/

  

预分配的数据文件。
  在数据目录中,MongoDB预分配   数据文件到特定大小,部分是为了防止文件系统   碎片。 MongoDB命名第一个数据文件.0 ,.   next .1等 mongod分配的第一个文件是64   兆字节,接下来的128兆字节,依此类推,最多2千兆字节   所有后续文件都是2千兆字节。数据文件   包含已分配空间但不保留数据的文件。 mongod可能   分配一个可能90%为空的1千兆字节数据文件。对于大多数   数据库,与数据库相比,未使用的分配空间很小。

答案 1 :(得分:3)

预期

目前尚不清楚存储的尺寸被认为是巨大的 - 预计尺寸是多少?

  

我已插入[300M]文件

每行大约200字节:

{"_id" : ObjectId("527c48e99000cf10bc2a1d82"),"ID" : "16587","Name" : "N15247","Serial1" : "11","Serial2" : "727","DateTime" : ISODate("1998-12-15T18:30:00Z"),"CompID" : "ID465","CompName" : "F1460"}
^199 chars

报告/确认为:

  

“avgObjSize”:207.99825866666666 [bytes]

总数据大小为:

  

“size”:62399477600 [bytes]

因此:

    300, 000, 000 rows x
              200 bytes per row
60, 000, 000, 000 bytes

这简单地证实了插入数据的估计值非常接近集合中数据的大小(62GiB v 60GiB)。

实际存储大小为68, 783, 787, 568(68GiB),这也非常接近数据大小,差异是索引的开销和存储空间的预分配。

因此,很容易预期观察到的结果。如果上述内容不符合要求 - 请通过编辑问题进行澄清。

答案 2 :(得分:1)

人们已经提出了为什么收集这么大的原因,所以我没有改写他们的话,我会解决第二个问题。如何减小集合的大小。

有一种很好的方法可以减少收藏的大小。

因为mongodb存储每个文档的密钥,所以可以通过缩短名称来大大减小集合的大小。通过这种方式,您将收集包含以下文档:

{
        "_id" : ObjectId("527c48e99000cf10bc2a1d82"),
        "ID" : "16587",
        "n" : "N15247",
        "s" : "11",
        "c" : "727",
        "d" : ISODate("1998-12-15T18:30:00Z"),
        "c" : "ID465",
        "f" : "F1460"
}

在您的应用程序层上,您可以创建从这些神秘名称到普通名称的映射。