我需要存储大量字段,例如星级评分系统,但是firestore每个文档只允许20,000个字段。有没有解决的办法?现在,我将“分片”多个文档中的字段,并将每个文档的大小保留在documentSizeTracker文档中,该文档用于确定要分片的文档(并通过事务添加到计数器中)。这是正确的方法吗?有什么问题吗?
答案 0 :(得分:2)
共享当然可以。在不确切知道文档中需要哪种数据以及何时知道的情况下很难说,但这无疑是一个合理的选择。您还可以考虑使用父“摘要”文档,其中包含您可能要搜索的字段,然后将所有数据拆分为该父文档的子集合内的多个文档。
这里有一个重要的细微差别:限制不是20,000个字段,而是20,000个索引字段。因此,如果您要在文档中存储一堆数据,但是您知道不会搜索所有这些数据,则另一种方法是将某些字段标记为未索引(您现在可以在“例外”部分中的Firebase控制台)。
但是,如果您要处理成千上万个字段,那么您可能不想一次全部免除它们,因此更好的替代方法可能是将数据作为地图放在容器字段中(命名为例如“ allOfMyData”),然后只需将该字段标记为未索引即可。这将自动从该地图内包含的任何字段中删除所有索引。
答案 1 :(得分:1)
实际上,我在Firebase的读写问题上遇到了类似的问题。所以,这是我的结论:
#如果需要经常编写和阅读一些小东西,请使用Firebase Realtime Database
#如果需要频繁读取某些内容(较大的内容),且写入之间通常间隔1秒以上,则可以使用Firestore
#如果您的模型不适合这两个选择,则应修改模型并将其分为两个模型:
注意:您可以在同一项目中同时使用Firebase Realtime数据库和Firebase Firestore。不要忘记考虑两个数据库之间的计费差异。及其不同的限制。我相信,最好将它们结合起来并使用它们各自的优点,而不是试图将解决方案强加于其中之一。
注2:我真的不喜欢Firestore建议的解决方案中的分片想法并变通解决