Facebook中的新闻Feed数据库设计

时间:2008-11-21 03:31:27

标签: sql database database-design

如何使新闻提供“友好”的数据库设计,以便将所有项目(查询)放入新闻Feed中并不是非常昂贵?我能想到的唯一方法是将UNIONing几乎每个表(代表组,注释,朋友等)和获取日期等等,这似乎是为每个用户运行一个非常昂贵的查询,它很难将这样的东西缓存到每个人的不同之处。

3 个答案:

答案 0 :(得分:12)

首先,考虑做一个性能原型来检查你的预感,工会太贵了。你可能会过早地优化那些不是问题的东西。

如果这是一个真正的问题,请考虑一个纯粹用于保存事件源数据的表,该表必须与其他表并行更新。

E.g。创建注释记录时,还要在事件表中创建一个事件记录,其中包含日期,描述和用户。

考虑根据UserId(或UserId和Date)索引Event表。还可以考虑在不再需要时清除旧数据。

这不是规范化的架构,但如果频繁操作事件源可能会更快。

答案 1 :(得分:2)

如果没有架构,很难回答这个问题,但我的预感是,涉及10个或更多正确索引表的UNION是没有的:
像wordpress或PHPBB这样的典型LAMP应用程序每页浏览都会运行10个以上的查询而不会出现问题。所以别担心。

答案 2 :(得分:2)

UNION =昂贵,因为完整的结果集受DISTINCT操作的约束。 UNION ALL =更便宜,因为它实际上是多个查询,每个查询的结果都附加在一起。

这取决于数据量或过程。

效率的主要驱动因素是联合在一起的各个查询,但是没有理由为什么从10个表中选择最近的(比方说的)10个记录应该花费超过一小部分时间。