【发布时间】: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