如何构建社交网络数据库结构,例如twitter
,我们可以在其中跟踪用户并在其时间轴中获取他们的所有推文,我已经检查了此Firestore - how to structure a feed and follow system
,但文章中的解决方案看起来有缺陷。
Firestore的不同之处在于,它需要冗余数据才能有效地访问数据,但是假设我正在关注1000人,并且如果我需要通过查询我关注的每15个用户的数据并使用{{1 }}方法,然后limit(10)
可能在查询之间存在未读帖子,因为我们正在使用orderBy(timeStamp)
获取帖子,如何在Firestore中构建社交媒体应用的数据
答案 0 :(得分:2)
开发像 Twitter 这样的社交媒体应用。 Firestore 查询是不够的。 Twitter 为每个用户生成个性化的时间表。 这就是云函数的用武之地。
您需要一个云功能来监控新帖子并将其复制到他们关注的用户的时间线中。 您不需要复制整个推文数据。您只需复制推文 ID 和其他需要排序的字段,例如时间戳。
所以当我查询我的时间线时,我会得到所有的推文 ID。 然后我可以在用户即将滚动时加载原始推文。 因为喜欢和不喜欢应该影响原始推文。
答案 1 :(得分:1)
在NoSQL数据库上为用例建模时,您倾向于针对应用程序的功能和频繁的读取操作进行优化。
因此,在社交媒体应用程序中,您的主要功能可能是用户看到其关注的所有人的最新帖子。要针对频繁阅读优化此操作,您需要将每个用户应在该用户的文档中看到的帖子存储。因此,与Twitter相比,您几乎会有一个包含每个用户的Twitter feed的文档。或者,如果单个文档的数据过多,则可能需要将其放入集合中。我经常将其解释为在数据库中为应用程序的屏幕建模。
这与关系数据库中的典型数据模型有很大不同,因此习惯于花些时间是很正常的。为了获得良好的介绍,我建议: