从巨大的表中获取几个已排序的记录

时间:2012-07-24 11:04:07

标签: sql nosql scalability

让我假装我有一个巨大的网站和一个巨大的表(有几百万个条目表),其中有几列(例如“ID”,“AuthorID”,“消息”,“时间”)以包含类似Twitter的消息

我想执行以下简单查询:

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

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

我认为memcached可能是一个解决方案,但是很快就添加了新帖子,并且使用memcached我会向用户提供“旧”消息。

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

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

提前致谢。

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

2 个答案:

答案 0 :(得分:3)

正如你猜测的那样,缓存是要走的路。通过创建一个包含所需十个记录的并行表(每次执行插入操作,删除最旧的一个),或者在内存中进一步向上执行堆栈操作。这是关于你如何管理缓存中的内容。

答案 1 :(得分:0)

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