mongodb string比float更少的空间

Har*_*rry 1 mongodb node.js

在mongodb节省字符串占用的空间比浮点数少吗?

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

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

谢谢.

The*_*heo 7

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

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

通过在mongoshell中输入以下命令可以看到这一点:

> Object.bsonsize({a: 2.1})
16
> Object.bsonsize({a: "2.1"})
16
> Object.bsonsize({a: 2.11})
16
> Object.bsonsize({a: "2.11"})
17
Run Code Online (Sandbox Code Playgroud)

2.1并且"2.1"是相同的大小,因为字符串是三个字符长,加上三个字节的开销,使其与八字节浮点数相同(其他八个字节是对象和键的开销).将数字更改为2.11不会更改大小,但"2.11"会更大一个字节.

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