我正在努力使我的数据库尽可能高效。这是一个非常简单的数据库,其中的集合仅包含存储字符串、数字或布尔值的文档。没有数组、混合数据类型等。如果我想将 24 存储为其中一个字段的值(仅包含自然数)。这样会占用更少的空间
{
field: 24
}
或
{
field: "24"
}
我正在使用猫鼬,我基本上要问的是,我应该将
Number
或 String
设置为我的 Schema
中该特定字段的类型。
将数字存储为
Number
s。
MongoDB 使用 BSON (spec)。在这种情况下,
Number
通常表示 64 位 IEEE-754 浮点数(BSON 称之为 double
),所以这将需要...64 位。 :-) 再加上说它是一个数字(一个字节)和字段名称(名称的长度加一个字节)的开销(根据规范),但对于 Number
和String
我们可以忽略它们。所以 64 位为 Number
。
规范称
String
存储为 32 位长度,后跟 UTF-8 格式的字符串,后跟终止符字节(加上与 Number
相同的开销)。这是字符串的 32 + (8 x number_of_bytes_in_utf_8) + 8
位。
用于表示字符串中数字的每个字符(
-
、+
、0
-9
、e
/E
[用于科学记数法] 和 .
)都用UTF-8 中的单字节,因此出于我们在这个问题中的目的,字符数 = 字节数。
所以:
"24"
来说,32 + (8 x 2) + 8
为我们提供了 56 位。"254"
来说,32 + (8 x 3) + 8
为我们提供了 64 位。"2254"
,它是 32 + (8 x 4) + 8
为我们提供了 72 位。"1.334"
,它 32 + (8 x 5) + 8
为我们提供了 80 位。明白我要说什么了吗? :-)
补充一点,如果它是数字,则将其存储为字符串:
{$gt: {age: "25"}}
示例...我想说
Number
是您明确的选择。