mongodbstring比float小的空间

在mongodb中,节省的string占用的空间less于浮点数吗?

所以如果我有一个更新的时间字段,而不是将时间保存为一个浮点数,我应该将其保存为一个string?

我有什么理由不想这么做?

谢谢。

如果你真的关心空间,并存储一些简单的(只有几个小数位,有限的范围),你可以乘以10,100,…并将其存储为一个int32。

不,这不是真的。 浮点数是使用8个字节存储的,所以不pipe数字的大小,它总是8个字节。 string是可变长度的,所以一个数字的string表示将占用所需的字节数。

但是,这并不意味着当string表示短于八个字符时,可以通过使用string来节省空间。 还有一个string的长度和一个空终止符的forms,即五个字节的开销。 "2.1"需要的字节数less于2.1 ,但是一旦超过5个字符,string将需要更多的空间。 如果将您的数字保存为四个字节的整数,则string表示forms可以更小。

这可以通过在mongo shell中input以下命令来看到:

 > 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"是相同的大小,因为string是三个字符长,再加上三个字节的开销,使得它与八字节浮点数相同(其他八个字节是对象和键的开销)。 将数字更改为2.11不会更改大小,但"2.11"大一个字节。

您可以在规范中findBSON格式的不同数据types的确切字节大小: http : //bsonspec.org/#/specification