我正在使用mongo,我保存的文件之一超过了最大16mb。我想知道缩小结构是否有助于这方面。这就是为什么我对标题有疑问。 如果bson表示已经缩小了文档,那么我的另一个尝试就不会有任何帮助。
答案 0 :(得分:1)
如果您的文档大小在缩小之后变得超过16MB,您可以使用GridFS来破坏该documnet。
根据MongoDB文档,
GridFS是用于存储和检索超过BSON文档大小限制为16 MB的文件的规范。
希望这会有所帮助..
答案 1 :(得分:1)
MongoDB将数据存储在BSON表示中,保存字段名称和内容。总对象大小取决于字段的长度以及字段的内容。如果您愿意缩写字段名称,那么您可以缩小文档。
您可以通过插入带有长字段和短字段名称的文档来快速检查:
> db.test.insert({abcde:1})
> db.test.stats()
{
"ns": "test.test",
"count": 1,
"size": 37,
"avgObjSize": 37,
...
如果您可以缩写字段名称,则可以减少对象大小:
> db.test2.insert({a:1})
> db.test2.stats()
{
"ns": "test.test2",
"count": 1,
"size": 33,
"avgObjSize": 33,
...
从上面的两个示例中,将字段名称从abcde
缩短为a
导致对象大小减少:37个字节对33个字节,使用较短的字段可节省4个字节名。
答案 2 :(得分:1)
文档键占用BSON中的大量空间,因为它们是逐字存储的,所以如果你可以对它们进行编码,你将节省大量的字节。如果您的代码是这些数据的唯一读者,那么任何人都不需要记住
,这是可以接受的const MY_INSANELY_LONG_OBJECT_PROPERTY_NAME = "a";
var thePropertyValue = myObject[MY_INSANELY_LONG_OBJECT_PROPERTY_NAME];
答案 3 :(得分:0)
BSON已经是一种高度紧凑的格式,而且WiredTiger引擎在页面级压缩数据,而不是文档级别。
如果您的文档大小达到16MB限制,则可能需要拆分文档或重新设计数据库。