2

我面临着一个非常具体的优化问题。

我目前有 4 个规范化的数据表。

每秒钟,可能有成千上万的用户会使用 AJAX 从这些表中获取最新信息。

问题是我可以相对容易地预测他们需要哪个数据子集......这 4 个规范化表中最近的 100 个左右的条目。

我一直在研究反规范化......但觉得也许有一个更简单的解决方案。

我在想我可以以某种方式每秒运行一个 sql 查询来压缩所需的信息,将其存储在一个临时缓存表中,然后让所有用户查询都从中提取。这将允许 4 个表的复杂连接只运行一次,然后用户只需要从缓存表中进行简单的查找。

我真的不知道这是否可行。对此或任何其他建议的评论将不胜感激。

谢谢!

4

4 回答 4

4

您可以使用memcache吗?

它有助于减轻数据库负载。

于 2010-03-31T16:32:36.247 回答
3

如果您正在运行 MySQL 5.1.6 或更高版本,您可以利用Events

CREATE EVENT e                 
ON SCHEDULE
EVERY 1 MINUTE                 
DO
INSERT INTO tempTable (`col1`,`col2`,`col3`) 
    SELECT `col1`,`col2`,`col3`
    FROM table1
    WHERE col1 = "value"   
于 2010-03-31T16:36:32.990 回答
2

您是否尝试过查询缓存?

Select SQL_CACHE * from myTable  inner join etc..... ;

如果数据经常更改,那么这可能没有太大/任何帮助。(每次数据变化时缓存会自动失效。)

注意:如果您可以尝试在数据库之外进行缓存,请始终保护您的数据库。您还可能需要检查变量SHOW VARIABLES LIKE %query_cache%以确保查询缓存已打开。

于 2010-03-31T16:50:24.910 回答
1

非规范化不应该是thinking. 但是测试。 什么是问题查询?你有什么?

您的其他设备——硬件、网络服务器、业务逻辑层是否准备好应对这样的流量?或者你的问题只是想象?

于 2010-03-31T16:42:00.513 回答