【问题标题】:Fetching few sorted records from huge table从大表中获取少量排序记录
【发布时间】:2012-07-22 16:35:19
【问题描述】:

假设我有一个巨大的网站和一个包含几列(例如“ID”、“AuthorID”、“消息”、“时间”)的巨大表(包含数百万个条目表)以包含类似 twitter 的消息.

我想执行以下简单查询:

SELECT * FROM HugeTable ORDER BY Time DESC LIMIT 1,10;

这个查询应该被执行很多次(每秒十次)。如何确保此查询非常快?

我认为 memcached 可能是一个解决方案,但新帖子添加速度非常快,使用 memcached 我会向用户提供“旧”消息。

假设我只有一台mysql服务器,它可以处理所有的流量。

我的问题是服务器应该取整个表,对其进行排序(这里是巨大的瓶颈),然后只取前 10 个。那么,我能做的最好的优化是什么?分区可能吗?此外,在表格内部,较新的帖子放在底部,因此可以安全地假设新帖子的“ID”和“时间”>= 比以前的帖子。

提前致谢。

P.S:我不是 MySql 的专家(尽管我知道基础),我对 NoSql 方法一无所知。如果您认为 NoSql 足以满足我的任务,那么我愿意学习使用新的东西:)

【问题讨论】:

    标签: sql nosql scalability


    【解决方案1】:

    没有回答您的问题,而是回答您的问题。我不会使用查询,但会使用 websocket 解决方案在帖子到达时将帖子推送给客户。连接的客户端在到达时总是会收到最新的帖子,并且 websockets 解决方案的开销应该更少。

    【讨论】:

    • 当您刚到家并需要加载最新帖子时怎么办?你必须等待有人发帖才能真正看到一些东西......
    • 如果帖子添加得很快,那应该不是问题,但如果您想首先显示 10 个最新帖子,我会使用 podiluska 建议的缓存。
    【解决方案2】:

    如您所料,缓存是可行的方法。通过创建一个包含您想要的十条记录的并行表(每次执行插入时,您删除最旧的记录),或者通过在内存中的堆栈中进一步执行相同的操作。这是关于如何管理缓存中的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      相关资源
      最近更新 更多