2012-05-26 81 views
0

好,我是新来的MongoDB和在读一本书吧,有些地方跟它要插入到MongoDB中:文档转换为BSON的大小是否更改?

“文档超过4MB(当转换为BSON)不能保存 数据库较大的”

好的... 4MB文件盖?让我感到困惑的是他们在括号中说的东西:(当转换成BSON时):所以当转换为BSON时大小发生了变化?

因为几行后,它说:

“给你的多4MB是怎么一个想法,战争与 的整个文本和平只是3.14 MB”

什么?好了,现在我很困惑。帮我!

回答

2

理论上,BSON文件还包含占用空间和一些开销的字段名称。通常,开销不超过几个字节。除了一些文档开销(几个字节)外,存储的每个值还有一些额外的存储字节。对于一个简单的字符串,它是额外的6个字节(1为类型,4为长度,1为尾随\ 0字符)。您可以在bsonspec.org网站上看到开销。简单字符串本身的长度在“转换为BSON”时不会改变,但增加长度等使其稍微大一些。大多数驱动程序都有帮助函数来确定文档的大小。在PHP中,你会怎么做:

<?php 
$document = array(
    '_id' => new MongoId(), 
    'name' => 'Derick' 
); 
echo strlen(bson_encode($document)), "\n"; 
?> 

在这种情况下打印39

此外,当前文档限制为16 MB,自书写完成后它已发生更改。

+0

很有意思。谢谢先生。所以一个问题:假设我有一个文本文件,逗号分隔等等,在我的本地机器上,这个文本文件需要5兆字节...所以这5兆字节不是我可以比较的16兆字节并说哦,这是5MB,这是16MB,所以它会没事的...我没有把它正确吗? – Bohn

+1

很多,但它不会那么多。这一切都取决于文件和字段名的长度等。您通常也不会将整个CSV文件存储在* one *文档中。您可以将文档与普通数据库中的一行进行比较。 – Derick

+0

嗯...所以这是一个非常糟糕的设计,我想到了?每个患者都有一个PatientID,我想将这些保存为Key,然后为那些患者的值保存,每个人都有一个大的文本文件,在本地磁盘上占用2到45兆字节之间的地方...我正在考虑保存每个患者的整个文本文件就像一个BLOB ... – Bohn

相关问题