创建mongodb集合的最佳实践考虑到硬盘存储

时间:2017-02-08 06:36:49

标签: mongodb datastore

我是mongodb的新手,想要了解在创建任何保留硬盘存储的集合之前要遵循的最佳实践。示例 - 我有一个名为“users”的集合,它存储以下文档键,我可以存储像

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

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

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

我的问题是:

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

1 个答案:

答案 0 :(得分:1)

  1. 是的,使用别名有助于最大限度地减少数据库大小。
  2. 你可以很容易地看到这一点:

    > 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来存储数据。
    2. 例如:

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

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

      获取