2012-05-26 79 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

相關問題