Firebase用户photoURL和displayName

时间:2017-11-16 16:15:08

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

我有时间试图绕过我认为简单的概念。

我有一个应用程序,我在其中注册用户,允许该用户设置一个' photoURL'他们的用户' Firebase Auth系统中的信息。这有效。当用户在我的应用程序中创建帖子时,我想显示标题,图像和 ' photoURL'创作者

目前,我保存帖子:

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

我还允许用户通过路由/海报/&#39; displayName&#39;

访问海报页面

所以稍后,当用户更新他们的个人资料信息(如displayName或photoURL)时,是否需要查找所有帖子,评论,消息,回复以及此用户有记录并更新photoURL的任何其他地方?

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

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

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

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

这是最好的方法吗?我认为只需获取用户照片和显示名称就容易多了。

对于史诗般的长篇帖子感到抱歉,但我正在努力学习。谢谢大家!

1 个答案:

答案 0 :(得分:3)

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

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