Firebase Firestore,查询用户好友的帖子

标签 firebase google-cloud-firestore

我正在寻找使用 Firebase 创建社交媒体提要。我的数据结构如下:

users: {
 uid: {
   ... // details  
  }
}

friends: { 
  uid: {
    friends: { // sub collection
      fuid: {
         ... // details
     }       
    }
  }
}`

posts: { 
  postId: {
    postedBy: uid
    ... // details
  }
}

现在我试图从用户的所有 friend 那里获取帖子,将其限制为最近的 10 个帖子,然后创建一个滚动指令来查询下一组 10 个帖子,以便用户不必查询和加载在页面加载时为 friend 发布 ^N ^N。但我不太确定如何以这种有效的方式为用户的 friend 和他们的帖子查询 firebase。

我有滚动指令工作,取自 Jeff Delaney's Infinite Scrolling Lesson on AngularFirebase.com.但它只处理整个帖子(教程中的船)集合,而没有在该集合内有选择地查询(以检查用户是否是 friend )。

我能想到的唯一解决方案是查询用户的所有 friend 帖子,将其存储在一个数组中,然后根据加载的最后一批帖子将结果块加载到 DOM 中。如果用户有 100 个 friend ,每个 friend 有 100 个帖子,那么从长远来看,这似乎是非常低效的。

最佳答案

如果我猜对了,您是在为用户好友列表中的每个用户复制帖子,对吗?如果您的应用程序升级,我认为这不是一个好主意……此时,100k 文档写入的成本为 0.18 美元,因此:

假设您的应用程序用户有 1000 个 friend 。当他发布任何内容时,您正在对数据库进行 1000 次写入。假设您有 1000 个像他这样的活跃用户。您现在刚刚进行了 1.000.000 次写入并支付了 1.80 美元。

现在更糟糕的是:您可能在每个帖子上都有用户 的重复字段。显示名称 和一个 profileImageUrl .想象一下,这个用户在他的历史中有 500 个帖子,并且刚刚更改了他的个人资料图片。您必须为他的 1000 个 friend 的每个提要上的每个帖子更新一个字段,对吗?您将进行 1000 * 500 = 500.000 次写入仅用于更新 profileImageUrl!如果用户不喜欢这张照片?他尝试了 3 张新照片,现在在 10 分钟内您已经在数据库中写入了 2.000.000 次。这意味着您需要支付 3.60 美元。这可能看起来并不过分,但请注意,我们是在同一时间讨论 1 个单个用户。 1000 名用户在同一天更改个人资料图片 4 次,您需要支付 3,600.00 美元。
看看这篇文章:https://proandroiddev.com/working-with-firestore-building-a-simple-database-model-79a5ce2692cb#7709

关于Firebase Firestore,查询用户好友的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163379/

相关文章:

java - 从 Firestore 查询数据到 Arraylist 但一无所获?

javascript - Firestore 更新集合中的所有文档

firebase - 检索 SafetyNet token : 7, Flutter 时出现问题 - Firebase Phone_Auth

javascript - Firebase 错误 : TypeError: Cannot use 'in' operator to search for '_delegate' in undefined

angular - Firebase 单独的 firebase.json 文件用于测试和生产 - 使用 Angular 环境文件变量?

firebase - 如何减少 Firebase Cloud Firestore 上的读取操作?

node.js - 如何在云函数内联编辑器中使用 Firebase 计划函数?

ios - 在 JSQMessagesViewController 中读取未读状态

android - 如何从 FCM token 获取 Firebase 用户 ID? (在服务器上的管理员代码中)

ios - Swift 从数据库检索 Firebase 数据