Mongodb 我是否可以通过规范化和只存储每个文档中的值来减少mongo数据库的大小?
我是Mongo的新手,决定尝试一下我的日期集,我现在将其存储在MySQL中。我从一个表开始,它现在变成了文档集合 每个文档大约有30个属性,每个属性通常是一个短字符串。所以在MySQL中,我有varchar字段,而在Mongo中,它只是BSON 当我发现Mongo中的数据库大小几乎是mysql innodb的7倍时,我真的很惊讶。它拥有1500000条记录/文档,在MySQL中约为350MB,在Monbo中约为2.3GB,因为它存储每个数据段的属性名称 有没有办法提出“模式”并规范化数据以减少数据库大小 UPD: 我使用MongoDB 3.4,由于Mongodb 我是否可以通过规范化和只存储每个文档中的值来减少mongo数据库的大小?,mongodb,Mongodb,我是Mongo的新手,决定尝试一下我的日期集,我现在将其存储在MySQL中。我从一个表开始,它现在变成了文档集合 每个文档大约有30个属性,每个属性通常是一个短字符串。所以在MySQL中,我有varchar字段,而在Mongo中,它只是BSON 当我发现Mongo中的数据库大小几乎是mysql innodb的7倍时,我真的很惊讶。它拥有1500000条记录/文档,在MySQL中约为350MB,在Monbo中约为2.3GB,因为它存储每个数据段的属性名称 有没有办法提出“模式”并规范化数据以减少数
db.serverstatus().storageEngine.name
是mmapv1
,我想我使用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')。统计结果:
{
"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
}
有没有办法提出“模式”并减少数据库大小
不,Mongodb是无模式的,这是它的核心特性之一。您可以为您的属性使用较短的名称。或者使用压缩存储引擎(WiredTiger)。关于如何减少数据库大小的一些提示: 数据库引擎 首先,从MMApv1切换到WiredTiger存储引擎,因为这样可以更有效地压缩数据。 默认压缩级别为snappy,但您可以使用zlib进行更大的压缩,而无需牺牲性能。有关详细信息,请参阅 要移动到WiredTiger,请参阅MongoDB文档中的本教程: 减少密钥大小 第二件事是减小文档大小(根据
avgObjSize
字段,当前约1008字节)。为此,请使用较小的键(最好是两个字母长的键)。
比如说,
companyDataFromSource1
==>c1
启用压缩后,这样做的好处很小,但这始终是一个好的做法,因为它可以减少通过网络发送到应用程序的数据大小您的mongodb版本是什么?您使用的是哪个引擎(WiredTiger、MMap等)?压缩级别是多少?你能提供一份你收集的样本文档,以及
db.collection.stats()
命令的输出吗?@fellix我已经更新了这个问题,非常感谢!切换到WiredTiger将数据库文件的大小减少到417 Mb,这至少与MySQL数据库大小相当。