【问题标题】:Firebase Firestore nested map storage size calculationFirebase Firestore 嵌套地图存储大小计算
【发布时间】:2020-08-31 23:31:40
【问题描述】:

嵌套地图如何存储在 Firestore 中,它们的大小计算是如何确定的?

说,我创造了这个:

/Users/index  (document name left, fields below)
activeMonths: {
  '2010': {
    '05': true,
    '09': true,
  },
  '2015': {
    '02': true,
  },
}

这个在 Firestore 中的大小是多少?

这类似于this question,但它增加了关于嵌套地图的问题。具体来说,每年的地图都会产生 32 个额外字节的惩罚吗?

我的猜测是:

  • (5+1)+(5+1)+16 用于 /Users/index 文档名称。
  • (12+1)+32 表示“activeMonths”映射名称和 32 字节映射惩罚。
  • 2*((4+1)+32) 表示两年地图名称和 32 个地图字节惩罚。
  • 3*((2+1)+1) 用于三个月条目的名称和布尔值。

如果嵌套映射结构中的每个“节点”确实为您提供了 32 字节的存储空间,那么这是一种非常昂贵的存储大量数据的方式!

我希望documentation 有一些更复杂的示例来预先回答这类问题。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    参考 Firestore 的数据模型,提供了 comparison between documents and maps,如下所示:

    doc:
      first : "Ada"
      last : "Lovelace"
      born : 1815
    
    map:
      name :
        first : "Ada"
        last : "Lovelace"
      born : 1815
    

    在创建文档/地图时,可以添加字段,可以选择地图实现与上图类似的结构。以下是 Firestore 控制台的地图示例: 至于地图的大小,另一个Stack post you referred地址地图中的大小,你的计算似乎是正确的:你考虑到each map is considered like a document,它的名称、字段的字符串名称、字段值和32个附加字节都是考虑在内。

    【讨论】:

    • 在我将您的答案标记为正确之前,您能否确认“顶级”地图和“嵌套”地图之间没有区别?我可以将两个“年份”地图作为文档的直接字段向上移动,而将“activeMonths”地图保留为空地图,并且所有大小计算都将保持不变?
    • 我相信存储大小将保持不变,因为 20102015 映射仍将被视为映射字段,只是不再位于 activeMonths 映射下。如果您要这样做,您可以删除 activeMonths 映射并节省一点存储空间(12+1+32 = 45 字节),但决定是否这样做取决于您的用例等许多因素,无论是您计划在您的文档下有其他不同的字段等。
    猜你喜欢
    • 2020-08-16
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多