首页 > 解决方案 > 对 Cloud Firestore 社交媒体结构使用“array-contains”查询

问题描述

我有一个由集合组成的数据结构,称为“民意调查”。“民意调查”有几个随机生成 ID 的文档。在这些文档中,还有一个称为“答案”的附加集合集。用户对这些投票进行投票,投票全部写入“答案”子集合。我在“answers”节点上使用 .runTransaction() 方法,其想法是这个子集合(对于任何给定的民意调查)不断被用户更新和写入。

我一直在阅读Firestore 的社交媒体结构。但是,我最近遇到了 Firestore 的一项新功能,即“array_contains”查询选项。

虽然上面的帖子参考讨论了社交媒体结构的“关注”提要,但我有一个不同的想法。我设想用户向我的主要投票节点写入(投票),因此创建另一个“跟随”节点并让用户写入该节点以更新投票计数(使用云功能)似乎非常低效,因为我必须不断地复制从正在计算选票的主节点。

“array_contains”查询是否会成为社交媒体结构可扩展性的另一个实用选项?我的想法是:

  1. 如果用户 A 关注用户 B,则写入我的“用户”节点中称为“关注者”的直接数组子节点。
  2. 在用户 B 创建任何投票之前,用户 B 的设备从 Firestore 读取“关注者”数组,以获取所有关注用户的列表,并将其填充到客户端的 Array 对象中
  3. 然后,当用户 B 编写新的投票时,将该“关注者”数组添加到投票中,因此来自用户 B 的每个新投票都将附加一个包含所有关注用户 ID 的数组。

“array_contains”查询有哪些限制?在 Firebase 中存储一个包含数千个用户/关注者的数组是否可行?

在此处输入图像描述 在此处输入图像描述

标签: javaandroidfirebase

解决方案


“array_contains”查询是否会成为社交媒体结构可扩展性的另一个实用选项?

是的当然。这就是 Firebase 创建者添加此功能的原因。

看到你的结构,我想你可以试一试,但要回答你的问题。

“array_contains”查询有哪些限制?

对于您存储的数据类型没有限制。

在 Firebase 中存储一个包含数千个用户/关注者的数组是否可行?

与实用与否无关,与其他类型的限制有关。问题是文件有限制。因此,在您可以将多少数据放入文档时存在一些限制。根据有关使用和限制的官方文档:

文档的最大大小:1 MiB(1,048,576 字节)

如您所见,单个文档中的数据总量限制为 1 MiB。当我们谈论存储文本时,您可以存储很多东西。因此,在您的情况下,如果您只存储 ID,我认为这不会有问题。但是恕我直言,随着您的阵列变大,请注意此限制。

如果您在数组中存储大量数据并且这些数组应该由大量用户更新,那么您需要注意另一个限制。因此,每个文档每秒只能写入 1 次。因此,如果您遇到很多用户都试图一次将数据写入/更新到相同文档的情况,您可能会开始看到其中一些写入失败。所以,也要小心这个限制。


推荐阅读