java - 对 Cloud Firestore 社交媒体结构使用“array-contains”查询
问题描述
我有一个由集合组成的数据结构,称为“民意调查”。“民意调查”有几个随机生成 ID 的文档。在这些文档中,还有一个称为“答案”的附加集合集。用户对这些投票进行投票,投票全部写入“答案”子集合。我在“answers”节点上使用 .runTransaction() 方法,其想法是这个子集合(对于任何给定的民意调查)不断被用户更新和写入。
我一直在阅读Firestore 的社交媒体结构。但是,我最近遇到了 Firestore 的一项新功能,即“array_contains”查询选项。
虽然上面的帖子参考讨论了社交媒体结构的“关注”提要,但我有一个不同的想法。我设想用户向我的主要投票节点写入(投票),因此创建另一个“跟随”节点并让用户写入该节点以更新投票计数(使用云功能)似乎非常低效,因为我必须不断地复制从正在计算选票的主节点。
“array_contains”查询是否会成为社交媒体结构可扩展性的另一个实用选项?我的想法是:
- 如果用户 A 关注用户 B,则写入我的“用户”节点中称为“关注者”的直接数组子节点。
- 在用户 B 创建任何投票之前,用户 B 的设备从 Firestore 读取“关注者”数组,以获取所有关注用户的列表,并将其填充到客户端的 Array 对象中
- 然后,当用户 B 编写新的投票时,将该“关注者”数组添加到投票中,因此来自用户 B 的每个新投票都将附加一个包含所有关注用户 ID 的数组。
“array_contains”查询有哪些限制?在 Firebase 中存储一个包含数千个用户/关注者的数组是否可行?
解决方案
“array_contains”查询是否会成为社交媒体结构可扩展性的另一个实用选项?
是的当然。这就是 Firebase 创建者添加此功能的原因。
看到你的结构,我想你可以试一试,但要回答你的问题。
“array_contains”查询有哪些限制?
对于您存储的数据类型没有限制。
在 Firebase 中存储一个包含数千个用户/关注者的数组是否可行?
与实用与否无关,与其他类型的限制有关。问题是文件有限制。因此,在您可以将多少数据放入文档时存在一些限制。根据有关使用和限制的官方文档:
文档的最大大小:1 MiB(1,048,576 字节)
如您所见,单个文档中的数据总量限制为 1 MiB。当我们谈论存储文本时,您可以存储很多东西。因此,在您的情况下,如果您只存储 ID,我认为这不会有问题。但是恕我直言,随着您的阵列变大,请注意此限制。
如果您在数组中存储大量数据并且这些数组应该由大量用户更新,那么您需要注意另一个限制。因此,每个文档每秒只能写入 1 次。因此,如果您遇到很多用户都试图一次将数据写入/更新到相同文档的情况,您可能会开始看到其中一些写入失败。所以,也要小心这个限制。
推荐阅读
- javascript - 从列表中生成下拉列表
- xamarin - 验证本地存储变量是否存在的正确方法是什么?- 赛马林
- google-maps-api-3 - 谷歌 API javascript
- reactjs - React PropTypes 检查何时执行?
- c# - 安全 WebApi 概念
- javascript - 重新加载页面后如何保存按钮的值?
- mysql - 如何从mysql中检索图像并使用python存储在文件夹中?
- php - PHP 内置服务器/路由脚本:空的超全局变量
- android - 未找到 Google 转换 API
- asp.net - 如何在 ASP.NET 中导出 GridView Excel/CSV 格式