我很痛苦地意识到这可能不是一个神奇的子弹,但它正在成为一个问题。每个用户在3个表格中都有成千上万的指标数据行,这是逐秒更新的。从大型MySQL数据库获取顶线指标FAST?
当用户登录时,我想快速为他们的一些资产(即他们拥有顶级统计信息的navi中的每个资产旁边的顶级行状态)提供顶级行状态。
我试过了一些想法;但请 - 如果有人在这方面有一些建议或经验,那会很棒。东西尝试或目前为止: -
- 每小时产生静态版本的顶线统计 - 这是所有用户和所有资产密集型。那么如何定期完成这项工作,我不确定。
- 通过AJAX调用统计信息,以便页面加载后可以处理和填写它们(获取顶级统计信息现在可能需要最多10秒才能加载更大的用户)。这也可以缓存会话中的统计信息以保存每页加载的重做查询。
- 查询以30分钟的间隔运行,即您登录,它将进行查询,然后在每次加载时(只有1/2秒)有希望使用查询缓存,直到下一个30分钟的时间间隔。
第一个似乎有最多的腿,但我不知道如何做到这一点,因为只有少数用户会需要这些统计信息 - 这似乎是非常昂贵的做所有人都时间。
数十万行不是那么多。几百万并不是那么多。这听起来像是需要在数据库级别进行优化的情况。你使用什么硬件来运行你的MySQL实例,你使用的是什么数据库引擎(MyISAM,InnoDB或其他),我们正在讨论的确切的行数是多少,你添加到你的多少记录/秒分贝和有多少人正在使用你的分贝阅读? – 2012-01-04 11:16:29
用户可以随时访问多个“其他用户”项目,因此这是额外查询级别的来源......将3个表连接在一起。我在一个小型的RDS实例上运行MyISAM(没有其他任何东西,这是一个实时大型实例的重复。) – waxical 2012-01-04 11:18:25
是的,我有一个使用MyISAM的预感。对于某些目的来说,速度要快得多InnoDB的好处之一是它试图将整个工作数据集存储在RAM中(由innodb_buffer_poool MySQL变量控制)另外一个原因是InnoDB试图将数据保存在磁盘中与MyISAM不同的方式,所以顺序读取速度更快,这可能是一个交换存储引擎和增加内存缓冲区的想法,2个演出就足够了。 – 2012-01-04 11:21:46