我可以通过规范化和仅存储每个文档中的值来减少mongo数据库大小吗?

时间:2017-07-05 07:00:26

标签: mongodb

我对Mongo来说是全新的,并决定尝试使用我的日期集,我现在将其存储在MySQL中。我已经开始使用单个表,现在证明是文档集合。

每个文档都有大约30个属性,每个属性通常都是一个短字符串。所以在MySQL中我有varchar字段,在Mongo它只是BSON。

当我发现我在Mongo中获得的数据库大小几乎是mysql innodb的7倍时,我感到非常惊讶。凭借1,500,000条记录/文档,它在MySQL中约为350 Mb,在Monbo中约为2.3 Gb,因为它存储了每条数据的属性名称。

有没有办法提出'架构'并规范化数据以减少数据库大小?

UPD: 我使用MongoDB 3.4,因为db.serverstatus().storageEngine.namemmapv1,我想我使用MMap。

示例文件:

{
  "_id" : ObjectId("595c4f4342ce99299c19c379"),
  "someNumber" : "11420",
  "companyDataFromSource1" : {
    "lolNumber" : "11420",
    "businessName" : "Feather mighty shop Inc",
    "businessOwner" : "",
    "businessHealthCode" : "Q",
    "realUpdateDate" : "13-OCt-16",
    "someNumericInfo" : "10000",
    "yearWhenItHappened" : "2014",
    "moreDate" : "22-Jan-02",
    "anotherStatus" : "DE",
    "numValue1" : "1",
    "numValue2" : "1",
    "someProp" : "E",
    "anotherProp" : "R",
    "street" : "BB251 Database St",
    "city" : "Denver",
    "state" : "CO",
    "zip" : "12345",
    "country" : "US",
    "anotherStreet" : "TT251 Server St",
    "anotherCity" : "Sratford",
    "anotherState" : "WI",
    "anotherZip" : "54484",
    "anotherCountry" : "US",
    "telephone" : "(123) 481-2222",
    "fax" : "",
    "emailAddress" : "qwwqwwqeewe@hotmail.com",
  }
}

db.collecion(' collection')。stats results:

{
  "ns" : "db.collection",
  "size" : 1507059792.0,
  "count" : 1495099,
  "avgObjSize" : 1008,
  "numExtents" : 19,
  "storageSize" : 1580150784.0,
  "lastExtentSize" : 415174656.0,
  "paddingFactor" : 1.0,
  "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
  "userFlags" : 1,
  "capped" : false,
  "nindexes" : 1,
  "totalIndexSize" : 60518752,
  "indexSizes" : {
      "_id_" : 60518752
  },
"ok" : 1.0
}

2 个答案:

答案 0 :(得分:1)

  

有没有办法提出'架构'并减少数据库大小?

没有。 Mongodb是无模式的,这是它的核心功能之一。您可以为属性使用较短的名称。或者使用压缩存储引擎(WiredTiger)。

答案 1 :(得分:1)

有关如何减少数据库大小的一些提示:

数据库引擎

首先,从MMApv1切换到WiredTiger存储引擎,因为压缩数据的效率更高。 默认压缩级别是 snappy ,但您可以使用 zlib 进行更多压缩,而性能折衷很少。有关详细信息,请参阅Mongodb 3.0

要迁移到WiredTiger,请参阅MongoDB文档中的本教程:https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/

减小密钥大小

第二件事是减少文档大小(根据avgObjSize字段,当前大约为1008字节)。为此,请使用较小的键(理想情况下,使用两个字母的长键)。 例如,

companyDataFromSource1 ==> c1

启用压缩后,这样做的好处很小,但这总是一个很好的做法,因为它会减少将通过网络发送到您的应用程序/的数据的大小