2011-07-02 25 views
1

在mongodb中,節省的字符串佔用的空間少於浮點數嗎?mongodb字符串的空間少於浮點數

所以如果我有一個更新的時間字段,而不是將時間保存爲一個浮點數,我應該將其保存爲一個字符串?

有沒有什麼原因讓我不想這樣做?

謝謝。

+1

你的意思是保存這樣的花車:「21.234」?那麼,這是6字節,浮點數可以是4或8我認爲,那麼這是怎麼回事? 「9248.2837291092739」? – Alxandr

+0

我不認爲字符串佔用的空間少於float ... – Alfred

回答

2

如果你真的在乎空間,和存儲一些簡單(只有少數小數位數,範圍有限)你可以乘以10,100,...並將其存儲爲int32。

+0

因此int32比字符串小嗎? – Harry

+0

是的。如果int32是一個可行的選擇,那就去吧! –

+0

嗨,我會的。然而,爲了知識,你能解釋爲什麼?什麼是尺寸差異?謝謝 – Harry

6

不,這是不正確的。浮點數使用8個字節進行存儲,因此無論數字大小如何,總是8個字節。字符串是可變長度的,所以一個數字的字符串表示將佔用盡可能多的字節。

但是,這並不意味着您可以在字符串表示短於八個字符時通過使用字符串來節省空間。還有以字符串長度和空終止符的形式的開銷,即5個字節。 "2.1"需要的字節數少於2.1,但是一旦超過5個字符,字符串將需要更多空間。如果將您的數字保存爲四個字節的整數,則字符串表示可以更小。

> Object.bsonsize({a: 2.1}) 
16 
> Object.bsonsize({a: "2.1"}) 
16 
> Object.bsonsize({a: 2.11}) 
16 
> Object.bsonsize({a: "2.11"}) 
17 

2.1"2.1"具有相同的尺寸,因爲該字符串是3個字符長,以及3個字節的開銷,使得它:

這可以通過輸入以下命令成mongo殼中可以看出與八字節浮點數相同(其他八個字節是對象和鍵的開銷)。將數字更改爲2.11不會更改大小,但"2.11"是更大的一個字節。

你可以找到不同的數據類型規範中的BSON格式的確切字節大小:http://bsonspec.org/#/specification