【问题标题】:Firebase User photoURL and displayNameFirebase 用户 photoURL 和 displayName
【发布时间】:2017-11-16 16:15:07
【问题描述】:

我正在努力思考我认为是一个简单的概念。

我有一个应用,我在其中注册了一个用户,允许该用户在 Firebase 身份验证系统中为其“用户”信息设置一个“photoURL”。这行得通。当用户在我的应用中创建帖子时,我想显示标题、图像和 创建者的“photoURL”。

目前,我保存帖子:

-Post {
 -id
 -title
 -image
 -photoURL <- from current logged in user }

我还允许用户通过路由 /poster/'displayName' 访问海报页面

那么以后,当用户更新他们的个人资料信息(例如 displayName 或 photoURL)时,我是否需要去查找所有帖子、cmets、消息、回复以及该用户有记录的任何其他地方并更新 photoURL?

我认为我能做的就是说:(伪代码)

get all posts =>
 foreach(post)
   post = {
          title: post.title.val()
          image: post.image.val()
          avatar: firebase.database().ref().child('users' + post.key)
          }

我读到的所有内容都表明我需要将该 photoURL 存储在我自己的“用户”表中。如果我这样做,那么除非我在每次发生更改时编写服务器调用来执行此操作,否则所有帖子都不会更新。问题是,如果我有 10 万用户,其中 10% 更改了他们的 photoURL,那么我必须在每个用户的帖子、cmets、回复和消息中更改它。如果平均用户有 100 个帖子、4000 个 cmets、6000 个回复,我们正在查看大约 10K 个位置 * 10K 个必须更新的用户,如果平均服务器调用为 137 毫秒,那么我的成本约为 175 美元 (costs)

另一种选择是从两个表中提取信息并每次创建一个新对象。这将导致大约两倍的服务器调用和时间,从而使我的成本翻倍。

这是最好的方法吗?我认为仅获取用户照片和显示名称会容易得多。

很抱歉这篇史诗般的长篇文章,但我正在努力学习。谢谢大家!

【问题讨论】:

  • 是的,我只是在更新一个字符串,但我正在做很多次和地点。这不是要花费我大量的功能和毫秒的服务器时间吗?

标签: firebase firebase-realtime-database firebase-authentication


【解决方案1】:

您所描述的是使用 noSQL 数据库时的典型问题。一方面,数据复制使您的应用程序及其查询运行得更快。另一方面,如果您想更改任何重复的数据,则查找和替换所有出现的数据可能会出现问题。

没有确定要做什么的“最佳”方法。这完全取决于您的具体情况。听起来,如果您有大量数据重复,更新成本可能很高,那么每次都简单地查询用户记录而不是进行更新会更好。但同样,这最终取决于您。

【讨论】:

  • 我的基本理解是,如果我有 10 万用户并且他们每月访问 10 次,那么我的浏览量为 100 万。如果我在他们每次发布帖子时都加入,并且普通用户会看到 210 个具有不同头像的对象,那么我正在查看大约 2.1 亿次调用和大约 7,286 毫秒,这使我花费了 370 美元,但如果我更新所有实例,实际上,我可以用大约一半的电话量和时间来完成它,从而节省了大约一半的钱。无论哪种方式,这些选项似乎都是极端的。我错了吗?
  • 要考虑的另一件事是使用某种形式的客户端缓存,以便在某些情况下不必重复查询。实时数据库为其读取的所有内容提供持久性,或者您也可以为遇到的用户实现一个简单的缓存。
猜你喜欢
  • 1970-01-01
  • 2017-08-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2021-08-23
相关资源
最近更新 更多