在 MongoDB 中,数字和字符串哪个占用更少的内存?

问题描述 投票:0回答:1

我正在努力使我的数据库尽可能高效。这是一个非常简单的数据库,其中的集合仅包含存储字符串、数字或布尔值的文档。没有数组、混合数据类型等。如果我想将 24 存储为其中一个字段的值(仅包含自然数)。这样会占用更少的空间

{
 field: 24
}

{
 field: "24"
}

我正在使用猫鼬,我基本上要问的是,我应该将

Number
String
设置为我的
Schema
中该特定字段的类型。

javascript mongodb mongoose
1个回答
8
投票

将数字存储为

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 位。

明白我要说什么了吗? :-)

补充一点,如果它是数字,则将其存储为字符串:

...我想说

Number
是您明确的选择。

© www.soinside.com 2019 - 2024. All rights reserved.