MongoDB,数字或字符串占用的内存较少?

时间:2016-06-10 08:37:12

标签: javascript mongodb mongoose

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

{
 field: 24
}

{
 field: "24"
}

我正在使用猫鼬,我基本上要问的是,我应该将NumberString设置为Schema中该特定字段的类型。

1 个答案:

答案 0 :(得分:6)

将号码存储为Number s。

MongoDB使用BSONspec)。在这种情况下,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-+ - 09 / 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位。

看看我要去哪里? : - )

除此之外,如果它是一个数字,那么将其存储为字符串:

......我说32 + (8 x 5) + 8是你明智的选择。