解决Firestore文件大小限制?

时间:2018-09-11 16:42:05

标签: firebase google-cloud-firestore

我需要存储大量字段,例如星级评分系统,但是firestore每个文档只允许20,000个字段。有没有解决的办法?现在,我将“分片”多个文档中的字段,并将每个文档的大小保留在documentSizeTracker文档中,该文档用于确定要分片的文档(并通过事务添加到计数器中)。这是正确的方法吗?有什么问题吗?

2 个答案:

答案 0 :(得分:2)

共享当然可以。在不确切知道文档中需要哪种数据以及何时知道的情况下很难说,但这无疑是一个合理的选择。您还可以考虑使用父“摘要”文档,其中包含您可能要搜索的字段,然后将所有数据拆分为该父文档的子集合内的多个文档。

这里有一个重要的细微差别:限制不是20,000个字段,而是20,000个索引字段。因此,如果您要在文档中存储一堆数据,但是您知道不会搜索所有这些数据,则另一种方法是将某些字段标记为未索引(您现在可以在“例外”部分中的Firebase控制台)。

但是,如果您要处理成千上万个字段,那么您可能不想一次全部免除它们,因此更好的替代方法可能是将数据作为地图放在容器字段中(命名为例如“ allOfMyData”),然后只需将该字段标记为未索引即可。这将自动从该地图内包含的任何字段中删除所有索引。

答案 1 :(得分:1)

实际上,我在Firebase的读写问题上遇到了类似的问题。所以,这是我的结论:

#如果需要经常编写和阅读一些小东西,请使用Firebase Realtime Database

  • Firebase Realtime数据库允许快速写入,但将并发用户限制为100,000
  • Firebase Firestore每个文档每秒最多允许写入1次
  • 在Firestore中阅读仅包含评级的文档非常昂贵

#如果需要频繁读取某些内容(较大的内容),且写入之间通常间隔1秒以上,则可以使用Firestore

  • Firestore在当前的Beta版本中最多允许1,000,000个并发用户(他们可能会增加更多数量)
  • 与Firebase Realtime数据库相比,在Firestore中读取大文档(小于1 MiB限制)要便宜

#如果您的模型不适合这两个选择,则应修改模型并将其分为两个模型:

  • 要存储在Firebase Real Database中的一个非常小的模型(例如,评级)
  • 要在Firestore中存储的1个更大模型

注意:您可以在同一项目中同时使用Firebase Realtime数据库和Firebase Firestore。不要忘记考虑两个数据库之间的计费差异。及其不同的限制。我相信,最好将它们结合起来并使用它们各自的优点,而不是试图将解决方案强加于其中之一。

注2:我真的不喜欢Firestore建议的解决方案中的分片想法并变通解决