【问题标题】:How to create latest posts feed based on user's subscriptions如何根据用户的订阅创建最新的帖子提要
【发布时间】:2020-06-10 12:05:47
【问题描述】:

我需要在使用 firebase 实时数据库的移动应用中实现最新帖子页面。

系统说明:

应用程序用户 (AU) 可以订阅创建帖子的内容创建者 (CC)。例如,我们有一个订阅内容创建者 CC1、CC2、CC3 的用户 AU123。另一个用户 AU456 订阅了 CC2、CC6、CC7 执行操作 getLatestPosts(AU123) 的最佳方式是什么?

一般来说,它与 Facebook 提供的功能非常相似(但由于我们只依赖帖子创建日期来构建最新列表,因此方式非常简单)。我们有用户关注(订阅)其他用户(内容创建者)。当我们打开 Facebook 时,我们可以看到最新帖子列表。

一个简单的解决方案是简单地为每个用户创建“最新”列表,并且一旦抄送帖子,他还将对他的帖子的引用附加到该列表中。但是如果有 1000 个用户订阅了 CC,我们需要将该 postID 附加到 1000 个列表中。

另一种方法是将所有对帖子的引用连同时间戳一起存储在一个列表中。然后,每个用户都可以获取该列表并仅从 CC 中选择他订阅的帖子。这个解决方案也不是最优的,因为帖子列表很快就会变得很长,甚至找到属于已订阅 CC 的单个帖子也可能需要一段时间(假设我们有 1000 个 CC 每天创建 1 个帖子,而用户只订阅了几个他们)。

您有任何文章或想法如何解决这个问题吗?是否甚至可以仅使用 firebase 数据库以合理的方式解决?

亲切的问候

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-platform nosql


    【解决方案1】:

    您似乎已经有了两种有效的方法,并且正在做出正确的考虑。写入时复制和读取时客户端加入都是常见且有效的。

    大多数大规模执行此操作的系统会混合使用这两种方法,根据内容创建者的订阅者数量决定是复制还是加入。

    我想消除的一件事是查找速度很慢。许多刚接触 Firebase 的开发人员都这么认为,但很少有 Firebase can pipeline most of these requests over its existing web socket connection 这样的情况。

    【讨论】:

    • 这是一个令人惊讶的答案,我希望有更好的方法 :) 无论如何,第一个解决方案非常简单,因为我们已经为用户过滤了信息,我们可以简单地从中获取最新帖子的列表他的节点。关于第二个选项,您知道一种仅获取与用户相关的密钥的方法吗?我们有一个最新的节点 CC1:时间戳,CC2:时间戳等。我们可以发出批处理请求以仅检索 CC1、CC2、CC3(如果是 AU123)?获取整个最新节点并在前端将其过滤掉是一种浪费。也许 Cloud Firestore 更适合这里?
    • 没有办法为一群创作者获取帖子,所以你必须有另一个循环。代码可能会有点多,这就是为什么您要考虑在数据库中对用户的提要进行建模的原因:尽管写入更复杂,但读取它的代码很简单。 Cloud Firestore 允许 WHERE IN 类型查询最多 10 个值,但我认为 10 的限制对于您的模型来说是不够的,因为这意味着您只能关注 10 个创建者,然后您还必须执行多个查询和回到了你似乎想要避免的相同代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2018-07-30
    • 1970-01-01
    • 2020-07-17
    • 2012-01-24
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多