【发布时间】:2019-04-20 05:20:52
【问题描述】:
我有一个由集合组成的数据结构,称为“投票”。 “民意调查”有几个随机生成 ID 的文档。在这些文档中,还有一个称为“答案”的附加集合集。用户对这些投票进行投票,投票全部写入“答案”子集合。我在“answers”节点上使用 .runTransaction() 方法,其想法是这个子集合(对于任何给定的民意调查)会不断被用户更新和写入。
我一直在阅读有关social media structure for Firestore 的信息。不过,我最近遇到了 Firestore 的一项新功能,即“array_contains”查询选项。
虽然上面的帖子引用讨论了社交媒体结构的“关注”提要,但我有一个不同的想法。我设想用户向我的主要投票节点写入(投票),因此创建另一个“跟随”节点并让用户写入该节点以更新投票计数(使用云功能)似乎非常低效,因为我必须不断地复制来自正在统计选票的主节点。
“array_contains”查询是否会成为社交媒体结构可扩展性的另一个实用选项?我的想法是:
- 如果用户 A 关注用户 B,则写入我的“用户”节点中名为“关注者”的直接数组子节点。
- 在用户 B 创建任何投票之前,用户 B 的设备会从 Firestore 中读取“关注者”数组,以获取关注的所有用户的列表,并将其填充到客户端的 Array 对象中
- 然后,当用户 B 编写新的投票时,将该“关注者”数组添加到投票中,这样用户 B 的每个新投票都会附加一个数组,其中包含关注用户的所有 ID。
“array_contains”查询有哪些限制?在 Firebase 中存储一个包含数千个用户/关注者的数组是否可行?
【问题讨论】:
-
请标记相关技术。虽然您可能使用的是 Android/Java,但您共享的代码和您的问题似乎纯粹是关于 JavaScript/Node.js。另外:你的问题是什么?
-
您的描述是关于 Cloud Firestore,但您的代码混合了 Cloud Firestore 和实时数据库(它们是完全独立的服务)。通常,在 DB 中建模单边追随者模型的成本很高。您很可能希望/需要对数据进行非规范化处理,以便将新的民意调查(或至少他们的 ID)写入每个关注者的集合中。
-
因此,您想的不是“关注者”,而是有一个用户节点,然后在其下方有一个集合“关注者?”