【问题标题】:Social feed system design社交饲料系统设计
【发布时间】:2011-08-03 16:41:11
【问题描述】:

http://twitter.com/#!/ladygaga

当ladygaga发1条消息时,是否意味着为她的每个关注者(总计12,221,751)插入1条数据记录?那么总共插入了 12,221,751 条记录?

设计这样一个社交提要系统有什么线索吗?

------------------- 编辑行 -------------- ------------------

真正的问题:

在谷歌应用引擎中无法执行 SELECT tweet FROM Tweets IN ([FollowingIDs]),这限制了 IN 子句中最多 30 个项目

虽然在应用引擎中它实际上意味着并行执行 30 个查询,但我猜这样做不是很明智。

即使我被允许超过 30 个限制, 如果我订阅 10000 人怎么办?我不确定在 MYSQL 或使用“IN 子句”的任何其他类型的数据库基础架构中是否存在任何性能问题 (app引擎的bigtable不同于MYSQL)

那么使用IN子句查询比较好? 或者设置一个 UserFeed 表来存储提要关系? 还是第三种方法?

数据库/SQL专家请帮忙

【问题讨论】:

  • 我什至无法正确描述阅读此问题时遇到的烦恼程度。为什么每个用户的提要都不能简单地选择top x tweets where tweeterId in usersSubscriptions?我真的想要“aaaaaaargh”作为“投票结束”的理由。
  • 是的,我想我应该在之前的问题中添加这个示例。我的问题应该是:如果我有 10000 人关注,会有性能问题吗? “SELECT * FROM tweets WHERE owner IN (user1_id, user2_id.....user10000_id)”?

标签: google-app-engine feed


【解决方案1】:

请参阅 Google I/O 2009 上的 this talk,了解如何使用“扇出”数据结构在 App Engine 上处理此类情况。

【讨论】:

  • 感谢链接和关键字“扇出”视频的 18:52 显示了解决方案。虽然确实需要编写一次 12,221,751 个条目。 (虽然我得到了一些负面评价)这应该是在 App Engine 中实现的最佳方式。但是我还是对mySQL的做法很感兴趣,有什么线索吗?
  • *entries/records 表示消息索引
  • @user877062 如果你想在 mySQL 中做这件事,你应该问一个单独的问题。
【解决方案2】:

你能想象吗?

没有

每个人都有关注者列表

ID        |  FOLLOWER__ID
ladygaga  |  genesis
ladygaga  |  user

//php

$result = mysql_query("SELECT ID FROM followers WHERE FOLLOWER__ID = 'genesis';");
while($row = mysql_fetch_assoc($result)){
    $select[] = $row['ID'];
}

$tweets = mysql_query("SELECT * FROM tweets WHERE owner IN (".implode(",", $select).")");

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2021-10-19
    • 2011-03-06
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多