2014-10-20 26 views
0

說我有一個這樣的文件:最好在MongoDB中填充空值?

{ 
    email: "[email protected]", 
    geo: 
    { 
     lat: null, 
     lon: null, 
     city: null, 
     state: null, 
     zip: null 
    } 
} 

我聽說,它有時是更好地「墊」空很可能在後面填充,因爲那麼該文件將具有正確的空間量值分配給它,並且如果文檔增長,將不需要移動到更大的空間。

geo設置爲null還是我正確地包含空的地理對象,以防萬一它將來被填充?

回答

2

填充可以是一個好主意,但不是你這樣做的方式。

MongoDB是一個動態類型的數據存儲。這意味着每個字段只會採用與密鑰長度和值長度一樣多的大小。 BSON nul值只佔用一個字節(有關更多信息,請參見the BSON specification)。這意味着您將爲預留空間,但不會爲預留空間。當您以後用實際數據替換null時,該數據可能會大得多。這意味着您的文檔仍然會增長,並且可能仍然會超過保留空間以觸發重新分配。

要有效填充,填充值與預期數據一樣大。

當您需要某種方式來區分已初始化和未初始化的文檔時,請考慮不要添加真實密鑰,而應添加一個密鑰_reserved: " ",其中虛擬字符串中的字符數是期望的長度您要添加的鍵值爲

+0

哦,非常有趣。這實際上很有意義。 – 2014-10-20 18:47:21

+0

@AbeMiessler抱歉,您的編輯無效。 JavaScript類型'null'由具有單個l的BSON類型'nul'表示。我故意做了這種區分。在討論存儲分配時,務必記住BSON(MongoDB的內部格式)不是JSON。 – Philipp 2014-10-20 18:48:03

+0

是的,當你把它翻回來時,只是看着它。也很高興知道:) – 2014-10-20 18:48:38