【问题标题】:De-normalization alternative to specific MYSQL problem?特定 MYSQL 问题的反规范化替代方案?
【发布时间】:2011-02-03 00:27:07
【问题描述】:

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

我目前有 4 个标准化的数据表。

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: php mysql ajax caching denormalization


    【解决方案1】:

    如果您运行的是 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"   
    

    【讨论】:

      【解决方案2】:

      您是否尝试过查询缓存?

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

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

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

      【讨论】:

        【解决方案3】:

        非规范化不应是thinking 的结果。但是测试。 什么是问题查询?你有什么问题吗?

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

        【讨论】:

          【解决方案4】:

          你能雇用memcache吗?

          有助于减轻数据库负载。

          【讨论】:

          • +1 这是最简单也是最好的答案。避免使用数据库是最好的选择。
          • 是的,也许。我不太熟悉它,但会研究它。谢谢!
          猜你喜欢
          • 1970-01-01
          • 2020-09-10
          • 2011-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-31
          • 2013-11-14
          • 1970-01-01
          相关资源
          最近更新 更多