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

2024-03-19

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

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

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

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

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

我的滚动指令正在工作,取自Jeff Delaney 在 AngularFirebase.com 上的无限滚动课程。 https://angularfirebase.com/lessons/infinite-scroll-firestore-angular/但它只处理整个帖子(教程中的船)集合,而不会在该集合中选择性地查询(以检查用户是否是朋友)。

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


如果我没猜错的话,您会为用户朋友列表中的每个用户复制该帖子,对吧?我认为如果您的应用程序升级并不是一个好主意...此时,100k 文档写入的成本为 0.18 美元,因此:

想象一下您的应用程序的用户有 1000 个朋友。当他发布任何内容时,您就会在数据库中进行 1000 次写入。想象一下您有 1000 个像他一样的活跃用户。您现在刚刚进行了 1.000.000 次写入并支付了 1.80 美元。

现在更糟糕的是:您可能在每个帖子上都有一个重复的用户字段显示名称 and a 个人资料图片网址。想象一下,该用户的历史记录中有 500 个帖子,并且刚刚更改了他的个人资料图片。您必须为他的 1000 个朋友的 Feed 中的每个帖子更新其中一个字段,对吗?您将执行 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 https://proandroiddev.com/working-with-firestore-building-a-simple-database-model-79a5ce2692cb#7709

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase Firestore,查询用户朋友的帖子 的相关文章

随机推荐

  • NSURLSession 委托方法未调用

    我创建了一个非常简单的应用程序来从我的网络服务器下载文本文件 我可以与 NSURLConnection 完美配合 但我正在尝试迁移到 NSURLSession 我遇到的问题是没有调用任何委托方法 我的服务器受密码保护 因此我需要使用基本的
  • Mac Catalyst 上的应用程序内购买不起作用

    应用内购买对于我的 iOS 方面来说效果很好 StoreKit 中的数据已按其应有的方式填充 相同的代码不适用于该项目的 Mac Catalyst 版本 我什至在 App Store 上为我的 Mac 应用程序创建了一个列表 并与应用程序内
  • ANTLRWorks 1.4.3 无法正确读取扩展 ASCII 字符

    我正在开发一个相当标准的编译器项目 我选择 ANTLR 作为解析器生成器 在将现有语法从 v2 更新到 v3 时 我注意到 ANTLRWorks ANTLR 的官方 IDE 无法正确显示文件中的任何扩展 ASCII 字符 即使使用 Note
  • HTML Div 宽度溢出:自动?

    我正在创建一个div像下面这样 编辑 这是一个例子 table tr td div style max height 15em div td tr table
  • 无法加载文件或程序集“Oracle.DataAccessVersion=9.2.0.700,Culture=neutral,PublicKeyToken=89b483f429c47342”

    无法加载文件或程序集 Oracle DataAccess Version 9 2 0 700 Culture neutral PublicKeyToken 89b483f429c47342 或其依赖项之一 找到的程序集的清单定义与程序集引用
  • React Native Airbnb Markers:标记成功消失,但没有重新出现

    我目前正在使用 React Native 构建一个应用程序 并使用 Airbnb 地图插件来动态显示标记 我的标记已成功从 firebase 数据库下载 并且下载的数组始终显示正确的内容 我这里有完整的代码以防万一https codepen
  • 相当于android中的timeIntervalSinceReferenceDate

    有没有一种方法可以计算相对于日期的时间间隔 与 iPhone 中的 timeIntervalSinceReferenceDate 非常相似 谢谢 System currentTimeMillis 返回自 1970 年 1 月 1 日午夜以来
  • 使用 bootstrap/angularjs 可编辑组合框

    我没有得到任何将组合框作为选择和输入的解决方案 这意味着如果用户选择不在每个填充列表中 那么用户应该能够输入他的选择值 用户的选择 选择或输入 应该在 AngularJS 中作为 ng model 进行设置和检索 thanks ui sel
  • 在 Perl 中我应该使用什么来代替 printf ?

    我需要在 Perl 中使用一些字符串替换来简化翻译 即替换许多 print Outputting n numbers 通过类似的东西 printf Outputting d numbers n 但是 我想用更易于人类解析的内容替换 prin
  • 如何仅使用查找和替换来查找并计算字符串中子字符串的所有出现次数?

    输入需要更低 最后程序必须打印出现的次数 例如内存 smthing str input if smthing smthing lower smthing find mem 我对此彻底崩溃了 所以我无法走多远 我忘了告诉你我不能使用计数或列表
  • openlayers 3 可以使用 gif 渲染动画标记吗

    我想问如何让标记像 openlayers 2 一样显示动画 gif 图片 它可以显示动画标记 我想要的是显示动画 gif 标记而不使标记移动 这可能吗 style anchorXUnits fraction anchorYUnits pix
  • 如何在 Emacs 中为 LaTeX 模式定义两个 ispell 字典?

    我有一份包含许多第二语言引文的文档 我如何将第二语言定义为 Ispell 我在文件顶部有这个 Local IspellDict brasileiro 我尝试了这个 但没有成功 Local IspellDict brasileiro engl
  • Java 中的异步事件调度

    我正在将 C 程序移植到 Java 该程序大量使用委托和委托的BeginInvoke异步通知事件的方法 以数据通信线程为例 它可能必须将其状态以及 GUI 通知给另一个工作线程 在我看来 通知不同班级的各种事件的最佳方法是有一个IClass
  • JavaScript 中的 getElementsByClassName().forEach() 函数不起作用

    我试图使用 JavaScript 通过类名获取 HTML 的每个元素 然后根据 a 中的值更改其高度和宽度range object onchange 浏览器显示错误 document getElementsByClassName forEa
  • VB6 有什么好的 TDD 工具或资源吗?

    是的 我知道我已经落后于时代了 但是我这里有一个古老的 VB6 编辑器应用程序 我相信没有人会很快升级到 NET 它使用了几个第三方 DLL 工具 并且由于它仍然使用旧的 RichEdit 控件 我基本上可以仅用这个工具来创建我自己的 Bu
  • 匹配法语和德语字符的正则表达式

    我正在解析请求参数以查找任何易受攻击的字符以防止 XSS 威胁 我们的网络应用程序支持英语以外的法语和德语 我使用以下正则表达式来实现此目的 但它无法处理法语和德语 a zA Z0 9 r n 对此的任何建议都将受到高度赞赏 p L 将匹配
  • 如何确定 PostScript 字体的高度和深度?

    我正在寻找估计 PostScript 字体高度 上升部分的空间 和深度 下降部分的空间 的 PostScript 代码 字体的边界框可以吗 FontBBox 用于此目的 这是我的问题的一些背景 字体的字形位于基线上 显然 带有下降部分的字形
  • 使用并行赋值交换数组元素

    感兴趣这个问题 https stackoverflow com questions 4181808 swapping in ruby 我玩过一些数组和方法调用的并行赋值 这是一个典型的示例 尝试按数组中的值交换两个成员 deck A B C
  • symfony2创建没有实体类的表单

    使用Symfony2 3 4 我正在尝试创建一个不使用类型的表单 它实际上是一个非常小的表单 只有两个选择从数据库加载它们的选项 到目前为止它有效 我不能做的是获取表单数据 在控制器 提交时 我尝试按照说明进行操作here http sym
  • Firebase Firestore,查询用户朋友的帖子

    我正在寻找使用 Firebase 创建社交媒体源 我的数据结构如下 users uid details friends uid friends sub collection fuid details posts postId postedB