在一个文档中存储多个设备令牌以从云功能中查询

问题描述 投票:0回答:1

我正在构建一个聊天应用程序,当在聊天组中发送新消息时会推送通知。每个聊天组在聊天组集合中都有自己的文档,每个文档内部都有一个称为消息的集合。我使用云功能来监听消息集合中的更改。当用户添加新文档时,我需要查询聊天组中除发件人以外的所有成员的用户文档,以获取设备令牌,因此可以推送通知。但是,每次有人发送消息时重复此过程都会导致大量读取。即使是小型的聊天应用程序,消息的数量也很容易攀升至数千,因此阅读量也很大。

为了节省金钱,我决定创建文档以在同一文档中存储多达1000个用户的多个用户令牌。由于单个文档的大小限制,我将其限制为1000,但是我将彼此关联的用户的设备令牌放在同一文档中,因为它们可能在同一聊天组中。我预计读取次数会大大减少,因为我只能查询一个或两个文档以将所有用户令牌都放在一个大聊天组中,而不是在一个文档中查询一个令牌。尽管在这里听起来一切都很好,但我无法克服担心。我想听听您的宝贵意见。这是有效的解决方法吗?这里可能有什么问题?

firebase google-cloud-firestore google-cloud-functions firebase-cloud-messaging
1个回答
0
投票

在单个文档中存储多个内容是减少文档读取次数的有效方法。您似乎已经考虑到了一些注意事项,但是还有更多注意事项:

  • 您将无法有效地查询单个文档中的令牌,因此将不得不依靠另一种方式来查找所需的文档。您已经以某种方式将它们分组,但是要记住这一点。
  • 您通常最终将每个令牌存储在多个文档中。如果您以前从未做过,可能会感到不舒服,但是在处理NoSQL数据库时是正常的。不过,您将以多次写入令牌结束:需要写入令牌的每个聚合文档中的一个。
  • 由于您只能阅读完整的文档,因此您将始终阅读所有令牌。如果在某些情况下需要在汇总文档中使用令牌的子集,则会浪费带宽。
  • [您可以考虑使用Firebase Realtime数据库存储令牌,它没有文档读取的概念,只收取令牌所使用的存储和带宽(在JSON中)。
© www.soinside.com 2019 - 2024. All rights reserved.