我确实有一个显示食谱www.trymasak.my的php网站。在索引页面上显示的食谱每天更新一次。为了获得最新的配方,我只使用一个mysql查询,类似于“select recipe_name,page_views,last_updated来自表顺序的图像”。因此,如果我每天有10000名访客,显然每天会查询10000次。一位朋友告诉我一个更好的方法(在减少服务器负载方面)是当我更新食谱时,我只是将最新的食谱细节(名称,图像等)放入文本文件中,然后制作我的页面而不是查询相同的查询10,000次,只需从文本文件中获取数据。他的建议真的更好吗?如果是,我应该使用哪个最好的php命令来打开,阅读和关闭文本文件?
感谢
答案 0 :(得分:3)
典型的解决方案是缓存在内存中。查询结果或整个页面。
答案 1 :(得分:3)
要知道某些事情的真相,你应该对它进行真正的基准测试。来自Rasmus Ledorf(PHP的作者)的“简单就是硬”非常有趣video / slides(我的意见;)),它解释了如何对您的网站进行基准测试。它将教你如何解决网站悬而未决的问题,而不是浪费你的时间进行过早的优化。
唐纳德克努特做了以下两点 优化声明:“我们应该 比如,忘记效率低下 大约97%的时间:premature optimization是所有邪恶的根源““在已建立的工程中 纪律改善了12%,很容易 获得,从未被认为是边缘的 我相信同样的观点 应以软件为准 工程“5
简而言之,您将使用Siege,ab,httperf等工具运行基准测试。如果您不熟悉此主题,我建议您观看此视频,因为我找到了它一个非常有趣的手表/阅读。
如果考虑到速度,你应该至少考虑:
使用bytecode cache => APC。预编译PHP将真正加速您的网站,至少有以下两个重要原因:
大多数PHP加速器都通过缓存工作 PHP脚本的编译字节码 避免解析和开销 在每个请求上编译源代码 (部分或全部可能永远不会 被执行)。进一步改进 性能,存储缓存的代码 在共享内存中直接执行 从那里,最小化的数量 慢速磁盘读取和内存复制 运行时。
PHP加速器可以实质上 提高PHP的速度 应用。网页的改进 生成吞吐量因子为2 已经观察到7个。 50 计算密集的时间更快 分析程序。
使用内存数据库来存储您的查询=> Redis或Memcached。 There 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连接。
在任何情况下,你都要考虑你的查询有多长时间,如果在文本文件中缓存它会有更多的优点而不是缺点。