1

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

我想执行以下简单查询:

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

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

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

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

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

提前致谢。

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

4

2 回答 2

3

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

于 2012-07-24T11:08:10.593 回答
0

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

于 2012-07-24T11:41:27.713 回答