mongodb string比float更少的空间

时间:2011-07-02 00:50:13

标签: mongodb node.js

在mongodb中保存字符串占用的空间比浮点数少吗?

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

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

感谢。

2 个答案:

答案 0 :(得分:7)

不,这不是真的。浮点数使用8个字节存储,因此无论数字的大小如何,它始终为8个字节。字符串是可变长度的,因此数字的字符串表示将占用所需的字节数。

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

通过在mongo shell中输入以下命令可以看出这一点:

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

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

答案 1 :(得分:2)

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