创建 mongodb collection 时牢记硬盘存储的最佳做法

Best practices for creating mongodb collection keeping hard disc storage in mind

我是 mongodb 的新手,想了解在创建任何 collection 之前要遵循的最佳做法,同时牢记硬盘存储。示例 - 我有一个名为 "users" 的 collection,它存储以下文档键,或者我可以存储像

这样的数据
users: {name: "abc", address: "xyz", isActive: true}

users: {n: "abc", add: "xyz", isa: true}

基本上在第二种情况下存储别名。

我的问题是:

  1. 存储别名是否有助于最小化数据库的硬盘存储?如果是,那么如何?
  2. isActive(或isa)的数据类型会不会影响数据库的硬盘存储,所以如果bool占用更大的大小,我可以选择string或int来存储isActive信息。
  1. 是的,使用别名有助于最小化数据库大小。

你可以很容易地看到这一点:

> db.lg.insert({name: "abc", address: "xyz", isActive: true})
> db.sm.insert({n: "abc", add: "xyz", isa: true})
> db.lg.stats()
{
"ns" : "test.lg",
"size" : 64,
"count" : 1,
"avgObjSize" : 64,
"storageSize" : 16384,
 ... }
> db.sm.stats()
"ns" : "test.sm",
"size" : 52,
"count" : 1,
"avgObjSize" : 52,
"storageSize" : 4096,
... }

如您所见,带别名的文档比带全密钥的文档小 12 位。

  1. 当然,数据类型会影响存储类型。 MongoDB 使用BSON 来存储数据。

例如:

  • 将 isa 存储为布尔值:{isa: true} 文档大小 = 28 位
  • 将 isa 存储为字符串:{isa: "true"} 文档大小 = 36 位
  • 将 isa 存储为双精度:{isa: 1 } 文档大小 = 35 位

此处提供数据类型大小列表http://bsonspec.org/spec.html