【发布时间】:2020-01-25 01:47:38
【问题描述】:
我有一个应用程序,与今天的许多应用程序一样,它允许用户浏览帖子并收藏它们,以便将它们存储在列表中以供将来访问。目前我的堆栈是后端的 Firebase 数据库,客户端的 Swift iOS,但这更多是关于一般最佳实践的问题。
在我的应用程序中,用户可以在很多地方查看帖子,并且对于所有这些地方,它都会显示他们是否已经收藏了该帖子。我现在实现这一点的方法是将帖子的 UID 保存到 Firebase 中每个用户的列表中,这样就可以与用户每次在应用中查看帖子时进行比较。这很好用,但我不确定它是否可扩展,因为它需要在当前用户每次进入应用程序时获取他们收藏的帖子 UID 的整个列表。对于几十或几百个收藏的帖子,这似乎不是问题,但经过几年和数千个收藏后,我认为它可能会拖累数据、内存和处理。
对于此类功能是否有更有效的最佳做法?好消息是它也适用于许多其他类型的功能,例如喜欢和朋友列表。
编辑:
这就是我的 Firebase 数据库目前的设置方式。同样,这个结构目前确实对我有用,而且我还没有遇到任何问题,但我不确定它是否可扩展地为当前用户每次登录时获取 favoritedPostIds 的整个列表。我是如果有更好的方法,完全愿意重组整个数据库。
posts {
post-1-UID {
title: "post1",
text: "blah"
},
post-2-UID {
title: "post2",
text:"blahblah"
}
},
users {
user-1-UID {
name: "User1",
email: "user1@email.com"
},
user-2-UID {
name: "User2",
email: "user2@email.com"
}
},
favoritedPostIds {
user-1-UID {
post-2-UID: "2019-11-19T19:12:51.240GMT-05:00"
},
user-2-UID {
post-1-UID: "2019-10-16T19:10:57.340GMT-05:00",
post-2-UID: "2019-11-24T11:21:05.610GMT-05:00"
}
}
【问题讨论】:
-
您为什么不使用 Firestore,只是好奇?定价模式?
-
@bsod 我在 Firestore 发布前几年就开始了这个项目。我将来可能会迁移过来。
-
要准确回答这个问题,我们确实需要查看您的 firebase 结构和相关代码的 sn-p。我们还需要了解该代码的作用/您期望它做什么。你能更新和澄清你的问题吗?另外,看看这两个帖子How do I ask a good question?和How to create a Minimal, Complete, and Verifiable example
-
@Jay 谢谢。我包含了我的数据库是如何设置的 sn-p。
-
您的直觉是正确的,它不会很好地扩展并最终会使设备过载。有一些解决方案,但您的 UI 流程尚不清楚。您是否说所有用户的收藏夹在他们登录时都已加载,并且当他们选择要查看的其他帖子时,您将其与加载的帖子进行比较,如果存在,您表示它已经是收藏夹了吗?如果这是流程,那么为什么不仅仅是查询或.observesingle,用户收藏博向量,只要选择帖子以查看它存在?这样可以避免在登录时加载任何内容。
标签: ios swift firebase firebase-realtime-database