应用中收藏夹功能的最佳实践

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。这不会影响大多数用户,但有些用户可能会等待更长时间才能获得此信息。

【讨论】:

以上是关于应用中收藏夹功能的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

移动 web 最佳实践(干货长文,建议收藏)

22 条 API 设计最佳实践,建议收藏!

AutoIt 最佳实践/编码风格

22 条 API 设计最佳实践,快收藏。。

在 Rails 中引入类似触发器的功能的最佳实践

CSS3立体文字最佳实践