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