【问题标题】:Architecture Issue for handling large data from MySql Server用于处理来自 MySql Server 的大数据的架构问题
【发布时间】:2012-05-24 07:36:27
【问题描述】:

我有 5 个包含数百万行的表。问题是我需要创建一个菜单,甚至将来可能会扩展更多。对此表的选择查询是我网站的核心。任何访问我的网站的人都会对服务器进行十几个选择查询。在这种情况下可以实现的最佳架构设计是什么?

  1. 使用索引和缓存。
  2. 生成所有用户都可以使用的 XML 或 JSON,而无需每次都查询数据库。 [XML 或 JSON 可以通过 cron 作业生成,我的行不会每 5 分钟更改一次]。

或者还有其他好的解决方案吗?即使批评我上面提到的方式也是一个有效的答案。

PS:如果解决方案可以采用更好的软件架构,我很乐意不投资更多的服务器功能。

【问题讨论】:

  • 使用 JSON/XML/whatever 来缓存数据库服务器结果是一种改进,这一点还很不清楚。查询的性质是什么:复杂连接?大规模聚合?广泛的结果?结果是按用户定制的吗?
  • 复杂连接 是。为每个用户定制是的。

标签: php mysql xml json


【解决方案1】:

我建议使用 APC 用户缓存来存储经常使用的数据,但如果您的查询是针对每个用户定制的,那么这可能不是可行的方法。

【讨论】:

    【解决方案2】:

    您要做的第一件事是正确索引您的表,使用类型为int 的字段来连接您的表,将query_cache_size 设置为512 MB(可能更多,但这已经足够了),使用APC 用户缓存。如果您使用for 循环而不是

    处理相当大的数据
    for ($i = 0; $i < count($arr); $i++)
    

    做一些类似的事情:

    $count = count($arr);
    
    for ($i = 0; $i < $count; $i++)
    

    这不是一个完整的指南,但它是基础知识。

    【讨论】:

    • 更好的是,避免 php 中的 for 循环。如果可以使用foreach,一般会更快。
    • @ElijahMadden 这取决于给定的任务。例如,foreach ($arr as $key =&gt; $val) $arr[$key] .= 'something';$key = array_keys($arr); for ($i = 0; $i &lt; $pre_calculated_size_of_key; $i++) $arr[$key[$i]] .= 'something';
    • 你是对的(phpbench.com 对此有一些很好的信息)但我经常想知道结果是否可能与:foreach ($arr as $key =&gt; &amp;$val) $val .= 'something'; 不同。到目前为止,我一直懒得对此进行自己的测试。
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多