应用中收藏夹功能的最佳实践
Posted
技术标签:
【中文标题】应用中收藏夹功能的最佳实践【英文标题】:Best Practices for Favorites Feature in App 【发布时间】: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,用户收藏博向量,只要选择帖子以查看它存在?这样可以避免在登录时加载任何内容。 【参考方案1】:经过几年和成千上万的收藏后,我认为它可能会拖累数据、内存和处理
在这种情况下,您不应将收藏夹作为用户属性检索,而应作为帖子的属性检索。您的后端应该以任何一种方式或什至两种方式将其存储在数据库中(作为用户的属性或作为帖子的属性),并且客户端只会获取当前用户是否喜欢的任何特定帖子的信息。
但是,在 Firebase 数据库的支持端实施可能会很困难(尤其是如果一篇帖子被成千上万的用户添加到收藏夹中)。 因此,我建议部分存储最喜欢的数据,例如按发布日期排序的收藏帖子块,甚至以树状结构存储,以便按帖子 ID 范围获取一小部分最喜欢的帖子 ID。这不会影响大多数用户,但有些用户可能会等待更长时间才能获得此信息。
【讨论】:
以上是关于应用中收藏夹功能的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章