我正在努力使我的数据库尽可能高效。这是一个非常简单的数据库,其中集合只包含存储字符串或数字或布尔值的文档。没有数组,混合数据类型等。如果我想存储24作为其中一个字段的值(只包含自然数)。这将占用更少的空间
{
field: 24
}
或
{
field: "24"
}
我正在使用猫鼬,我基本上要问的是,我应该将Number
或String
设置为Schema
中该特定字段的类型。
答案 0 :(得分:6)
将号码存储为Number
s。
MongoDB使用BSON(spec)。在这种情况下,Number
通常意味着64位IEEE-754浮点数(BSON称之为double
),因此需要64位。 :-)添加说明它是一个数字(一个字节)的开销(根据规范)和字段名称(名称的长度加上一个字节),但是{{1}的那些是相同的}和Number
我们可以忽略它们。所以String
为64位。
规范说Number
存储为32位长度,后跟UTF-8中的字符串,后跟终结符字节(加上与String
共同的开销)。这是字符串的Number
位。
用于表示字符串中数字的每个字符(32 + (8 x number_of_bytes_in_utf_8) + 8
,-
,+
- 0
,9
/ e
[对于科学记数法],E
)用UTF-8中的单个字节表示,因此对于我们在这个问题中的目的,#chars =#of bytes。
所以:
.
"24"
给我们56位。32 + (8 x 2) + 8
"254"
给我们64位。32 + (8 x 3) + 8
"2254"
给我们72位。32 + (8 x 4) + 8
"1.334"
给我们80位。看看我要去哪里? : - )
除此之外,如果它是一个数字,那么将其存储为字符串:
{$gt: {age: "25"}}
example ......我说32 + (8 x 5) + 8
是你明智的选择。