mysql - 为什么在构建事件源时应该扇出

标签 mysql database feed nosql

我正在研究构建 Activity Feed 的后勤工作,类似于 Facebook 或 Twitter 的时间线。

在 StackOverlfow 和 Quora 以及我在 google 上找到的其他文章中,有大量的答案描述了阅读或写作时的扇形展开。这一切都是有道理的。您将所有事件记录在一个主要事件表/集合中,然后在某个时候,将该数据的副本写入到单独的、适合每个用户的表中。

我不完全理解的是为什么需要扇出?也就是说,为什么需要记录个人用户订阅源上的事件?您不能只使用一个事件表/集合有什么原因吗?它将具有适当的索引,并具有执行用户的 ID。然后,当有人想查看他们的事件流时,只需查询当前用户正在关注的用户的事件流。

我知道这可能效率不高,因为事件的数量比数据库中的实际对象多了好几倍。也就是说,数据库中可能有 100 个帖子,但对帖子执行的操作超过 1,000 个,因此当行数非常高时,事件表/集合上的查询可能会很慢。

但这行不通吗?您能否只扩展数据库以便更有效地处理查询?是否真的需要展开?

最佳答案

不一定总是扇出,但决定取决于许多因素。

例如。 Twitter 两者都做,但 Facebook 遵循加载时扇出。

您可以想象,Facebook 的事件流比 Twitter 的要复杂得多。 FB 需要为每个用户/组应用大量过滤器/隐私设置,因此对他们来说,动态拉取和构建流是有意义的。他们的 TAO 图基础设施(在 MySQL + 缓存之上绘制图)使他们可以轻松地为每个用户快速构建和获取提要。

关于mysql - 为什么在构建事件源时应该扇出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175192/

相关文章:

MySQL:获取给定日期用户的最小记录

android - 如何创建一个实时修改的android应用程序数据库?

package - 下载自托管源的 NuGet 包

java - 无法在 Spring MVC 上创建 bean

java - 使用 JPA 的 UUID 映射类型

sql - 跨表乘法

php - 使用 Facebook Graph Api 搜索帖子

python - 使用 Universal Feed Parser 获取日期时出现问题

mysql - 存储彩票信息的数据库设计

Php - Pdo Ssh 隧道