Flutter(Firebase)约会应用,来自同一集合的文档之间的关系

Posted

技术标签:

【中文标题】Flutter(Firebase)约会应用,来自同一集合的文档之间的关系【英文标题】:Flutter (Firebase) dating app, relationships between documents from the same collection 【发布时间】:2022-01-24 01:51:55 【问题描述】:

我正在尝试创建一个以 Firebase 作为我的 NoSQL 后端的约会应用程序。 然而,由于我是 NoSQL 概念的新手,我遇到了几个问题,包括关于文档大小和查询的优化。

users:
       user_id
       name
       age
       gender
       location
       matches: [user1_id, user2_id, ...]
       likes_from_other_users: [user1_id, user2_id, ...]
       likes_other_users: [user1_id, user2_id, ...]
       dislikes_from_other_users: [user1_id, user2_id, ...]
       dislikes_other_users: [user1_id, user2_id, ...]

假设一个名为 UserA 的用户有很多来自其他用户的点赞,因此数组 likes_from_other_users 的大小将超过文档的最大大小(1 MB)。此示例可以应用于其他数组。

我应该如何进行?

我正在考虑将这些大型数组提取到新集合中。

在对userA的所有点赞(假设userA有N个其他用户点赞)的情况下,会有n个文档,每个文档都有字段'to' 设置为 userA id 和 'from' 字段设置为每个喜欢 userA 的特定用户。

这将解决庞大的数组大小的问题,但可能会增加查询特定用户的复杂性。

这是正确的方法吗? (我必须另外创建 5 个集合:likes_from_other_users、likes_other_users、dislikes_from_other_users、dislikes_other_users 和匹配项)并且可能会很慢。

此外,matches 集合将包含一对(数组)用户,因此要查询特定用户的匹配项,我需要检查此集合中的所有文档并找到包含我的特定用户的文档m 查询

这是正确的方法吗?

【问题讨论】:

【参考方案1】:

我正在考虑将这些大型数组提取到新集合中。

这是唯一可扩展的解决方案。数组根本不可扩展;集合中的单个文档在 Firestore 中可以无限扩展。这是否是“正确”的解决方案甚至都不是问题,它是使用 Firestore 时唯一可扩展的解决方案。

请注意,Firestore 并不总是适合给定应用程序的最佳数据库。如果您担心特定问题的解决方案的成本或效率,那么 Firestore 可能并不是最好的解决方案。每个数据库都有其优势,NoSQL 数据库通常不擅长表达 SQL 数据库那样的复杂关系。

【讨论】:

以上是关于Flutter(Firebase)约会应用,来自同一集合的文档之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中来自 Firebase 的应用检查不起作用

Flutter:如何显示来自 Firebase 的文本?

如何在 Flutter 中缓存来自 Firebase 的图像?

在 Flutter 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?

Flutter/Firebase:管理功能是应用内功能还是云功能?

Flutter & firebase:我怎么能做一个“只包含来自”的查询