哪一个消耗更少的资源?打开文本文件或进行sql查询,都是一千次?

时间:2011-02-17 07:13:46

标签: php sql file-io

我确实有一个显示食谱www.trymasak.my的php网站。在索引页面上显示的食谱每天更新一次。为了获得最新的配方,我只使用一个mysql查询,类似于“select recipe_name,page_views,last_updated来自表顺序的图像”。因此,如果我每天有10000名访客,显然每天会查询10000次。一位朋友告诉我一个更好的方法(在减少服务器负载方面)是当我更新食谱时,我只是将最新的食谱细节(名称,图像等)放入文本文件中,然后制作我的页面而不是查询相同的查询10,000次,只需从文本文件中获取数据。他的建议真的更好吗?如果是,我应该使用哪个最好的php命令来打开,阅读和关闭文本文件?

感谢

6 个答案:

答案 0 :(得分:3)

典型的解决方案是缓存在内存中。查询结果或整个页面。

答案 1 :(得分:3)

基准

要知道某些事情的真相,你应该对它进行真正的基准测试。来自Rasmus Ledorf(PHP的作者)的“简单就是硬”非常有趣video / slides(我的意见;)),它解释了如何对您的网站进行基准测试。它将教你如何解决网站悬而未决的问题,而不是浪费你的时间进行过早的优化。

  唐纳德克努特做了以下两点   优化声明:“我们应该   比如,忘记效率低下   大约97%的时间:premature optimization是所有邪恶的根源“

     

“在已建立的工程中   纪律改善了12%,很容易   获得,从未被认为是边缘的   我相信同样的观点   应以软件为准   工程“5

简而言之,您将使用Siege,ab,httperf等工具运行基准测试。如果您不熟悉此主题,我建议您观看此视频,因为我找到了它一个非常有趣的手表/阅读。

速度

如果考虑到速度,你应该至少考虑:

  1. 使用bytecode cache => APC。预编译PHP将真正加速您的网站,至少有以下两个重要原因:

      

    大多数PHP加速器都通过缓存工作   PHP脚本的编译字节码   避免解析和开销   在每个请求上编译源代码   (部分或全部可能永远不会   被执行)。进一步改进   性能,存储缓存的代码   在共享内存中直接执行   从那里,最小化的数量   慢速磁盘读取和内存复制   运行时。

         

    PHP加速器可以实质上   提高PHP的速度   应用。网页的改进   生成吞吐量因子为2   已经观察到7个。 50   计算密集的时间更快   分析程序。

  2. 使用内存数据库来存储您的查询=> RedisMemcachedThere is a very very big mismatch between memory and the disc(IO)

      因此,我们观察到主要的记忆   大约慢10倍和I / O单位   比处理器慢1000倍。

    类比部分也很有趣(不能从谷歌书籍中复制:))。

答案 2 :(得分:1)

从长远来看,数据库更加灵活,安全且可扩展。对于现代RDBMS,每天10000次查询并不是那么多。去(或留下)数据库。

优化缓存方面的事情,HTTP规范有一个自己的部分:

答案 3 :(得分:0)

阅读文件:

答案 4 :(得分:0)

如果您尝试,请将食谱存储在如下文件夹结构中:

/recipes/X/Y/Z/id.txt 其中X,Y和Z是随机整数,从1到25

例如: /recipes/3/12/22/12345.txt

这是因为文件系统只是另一个数据库。它有更多隐藏的元数据更新来处理。

我认为MySQL会更快,更容易管理,因为你必须备份MySQL数据库。

答案 5 :(得分:0)

打开一个文件比使用mysql connect +查询更快。 但是,如果你的网站已经需要一个mysql连接来检索其他一些信息,你可能想要坚持你的查询,因为最长的部分是连接,你的查询非常轻。

另一方面,打开10个文件比从数据库查询10个记录长,因为你只打开一个mysql连接。

在任何情况下,你都要考虑你的查询有多长时间,如果在文本文件中缓存它会有更多的优点而不是缺点。