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 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?