假设我关注了1000多名用户。当我登录twitter时,我会看到一个按时间顺序列出的来自我追随的1000个用户的推文。 twitter如何获取这些推文。
我知道他们可以这样做:
select * from tweets where userID in (id_1,id_2,...,id_n) limit 50 order by time;
但是,'in'子句可能非常慢。
how twitter works, does it use "in" to select tweets for followers?
和
Twitter like Model using SQL Server/Azure or Graph DB
说出相互矛盾的事情,引用的链接已经过时了。
那么Twitter如何有效地从我关注的人那里得到所有推文?
答案 0 :(得分:0)
有blog post深入了解Twitter的数据库基础架构:
当你发推文时,它存储在名为T-bird的内部系统中 建立在Gizzard之上。二级索引存储在单独的索引中 系统称为T-flock,也是基于Gizzard的。唯一ID 每条推文都是由Snowflake生成的,可以更均匀 在群集中分片。 FlockDB用于ID到ID映射, 存储ID之间的关系(使用Gizzard)。 Gizzard是 Twitter基于MySQL构建的分布式数据存储框架 (InnoDB的)。选择InnoDB是因为它没有破坏数据。肫 只是一个数据存储区。数据被输入并再次将其恢复。至 在各个节点上获得更高的性能,例如 二进制日志和复制已关闭。 Gizzard处理分片, 复制N个数据和作业调度。使用Gizzard 作为Twitter上其他存储系统的构建块。
您发布的第一个链接似乎是正确的,第二个链接只是建议您可以用来实现类似Twitter的数据库结构。
因此,为了回答您的问题,所有推文都会根据推文的时间存储在块中,并给出唯一的ID,这些ID都是索引的。然后,FlockDB管理ID之间的关系,即确定谁跟随谁以及谁看到推文的关系。