Firestore文档中包含键/值或多个文档-哪个更快/更好?

时间:2020-08-24 23:46:56

标签: google-cloud-firestore

如果我要存储电子邮件:电话的键/值对,最好是在一个文档中充满电子邮件:电话字段,或者有多个文档,其中document.id是电子邮件,每个文档中列出了一部手机?

示例1:

 collectionA -> documentA -> "email1": (number) 1234567890,  
                             "email2": (number) 1234567899,  
                             ...

示例2:

 collectionA -> documentA -> "email1": (number) 1234567890,   
                documentB -> "email1": (number) 1234567899   
                ...   

如果我的数据集为100,该怎么办? 1000?几千个?

我认为示例2会更好,因为示例1需要在访问所需的键/值之前加载整个文档,对吧?

编辑:这是基于我知道电子邮件但不知道电话号码。

1 个答案:

答案 0 :(得分:1)

仅当您检查特定的用例时,才能确定哪一个“更好”。一个都不是100%完全优于另一个。

#1问题:

  • 大量条目最终将填满文档的最大限制(1MB),这时写入将失败。
  • 如果仅查找一个条目,则需要读取所有条目,因为无法读取部分文档(仅在移动客户端上,服务器SDK可以进行投影)。
  • 在不知道电子邮件的情况下无法通过电话号码查询。

#2问题:

  • 读取整个N集需要读取N个文档。对于非常大的数据集,这可能会比需要的价格昂贵,并且可能比读取一份包含所有内容的文档要慢。

您将必须选择对预期使用案例不利的问题。