Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-将MYSQL查询缓存在txt文件中是一种好的做法吗?_Php_Mysql_Caching_Outputcache - Fatal编程技术网

PHP-将MYSQL查询缓存在txt文件中是一种好的做法吗?

PHP-将MYSQL查询缓存在txt文件中是一种好的做法吗?,php,mysql,caching,outputcache,Php,Mysql,Caching,Outputcache,我正在建立一个在线商店&试图通过最小化MYSQL查询来提高性能 通过txt文件缓存mysql查询,然后取回该文件而不是查询,这是一种好的做法吗?这就是我正在做的” php类将sql查询作为字符串 它是否有md5 如果这是第一次运行 然后对数据库执行查询 在数组中获取结果 序列化数组并将其存储为_Query.txt的md5_ 根据缓存是否存在且有效,返回实际查询的未序列化(文件\u get\u contents(md5\u of \u Query.txt))或$results 该类还检查txt文件

我正在建立一个在线商店&试图通过最小化MYSQL查询来提高性能

通过txt文件缓存mysql查询,然后取回该文件而不是查询,这是一种好的做法吗?这就是我正在做的”

  • php类将sql查询作为字符串
  • 它是否有md5
  • 如果这是第一次运行
  • 然后对数据库执行查询
  • 在数组中获取结果
  • 序列化数组并将其存储为_Query.txt的md5_
  • 根据缓存是否存在且有效,返回实际查询的未序列化(文件\u get\u contents(md5\u of \u Query.txt))或$results
  • 该类还检查txt文件的filemtime(),如果该文件超过一小时,则重新执行查询并刷新缓存

  • 这比每次执行sql查询更有效吗?我缺少任何安全问题吗?

    您的方法看起来有点像将问题从一个角落转移到另一个角落

    引入缓存并不能提高Mysql的性能。最好看看哪些查询实际上很慢,然后优化查询


    如果您刚刚启动应用程序,memcache比使用文本文件快得多


    文本文件可以完成这项工作,您概述的步骤很有意义,但memcache会更快,并为您处理大量繁重的工作。

    如果您进行基准测试,创建唯一哈希和执行IO到磁盘的成本将比简单地从MySQL服务器获取更高

    恕我直言,不要费心到那个程度。好主意,但MySQL已经有了内部缓存和性能调整


    专注于构建应用程序,因为“过早优化是万恶之源”“

    如果您希望实现缓存并着眼于未来的可扩展性,我建议您设置RESTful服务来运行数据库上的查询,然后使用web服务器的HTTP缓存功能来缓存结果。步骤如下所示:

  • 原始页面需要运行查询
  • 它生成对服务URL的http GET请求,将参数作为URL中的查询参数传递
  • 位于URL的php脚本接受查询的参数,验证它们,并将它们添加到MySql查询中
  • 脚本在数据库上运行查询
  • 脚本序列化结果并将其设置为输出
  • web服务器缓存请求的响应,并将其返回给具有相同URL的未来请求
  • 原始页面使用来自服务的序列化结果生成HTML

  • 您可以阅读有关使用Apache缓存PHP的更多信息。您现在所做的接近这一点,但您的应用程序将能够通过基于服务的方法更好地扩展。

    我只想衡量一下我的两分钱,serialworm和HPDeveloper所说的分享一个事实,即内存/ram比您提出的任何磁盘IO绑定操作都快得多。 将尽可能多的ram放入mysql,您将不需要处理缓存管理,除非您确实需要升级到集群,这需要考虑其他因素。 Memcache为您提供了对缓存管理的更多控制,因此您需要进行更多的编码


    我会从构建应用程序开始,然后对其进行压力测试和优化查询,和/或根据需要添加缓存管理。

    您是否配置了MySQL?

    两件事2看,和。关于你能有意义地比较这一切的唯一方法是,同时使用这两条准则的两个指标,使用你目前使用的mysql配置、php.ini、httpd.conf、.htaccess、mod rewrite以及许多其他东西,对执行任务的代理技术进行基准测试和分析。

    这是毫无意义的,您应该缓存结果

    查询汇编时间应该可以忽略不计。(如果不是,那么您就没有像它应该使用的那样使用SQL,而是生成愚蠢的
    select
    s流,智能
    join
    可以解决这个问题)

    从磁盘加载查询显然会减慢速度。
    (不过,操作系统可能会缓存磁盘IO,使其难以识别)


    无论如何,真正需要时间的是从数据库中获取结果,然后通过模板将其样式化回网页中。在您的位置,我会将给定查询的样式化结果缓存到磁盘,当被问及,如果缓存不太旧,我会直接
    readfile()
    它们。

    谢谢。您的建议为我节省了大量的尝试和错误。非常感谢,我的WAMP服务器上安装了memcache,现在将使用此缓存进行构建。在单个WAMP上,这不会有什么区别,Windows上的文本文件访问已缓存在内存中。Memcached增加了开销,并窃取了web服务器和数据库将有更多用途的内存。Memcached适用于更大的场景。具有大型服务器场和缓存服务器池,可回答查询和子查询。在这种情况下,memcached(通过网络套接字上的文本协议查询内存)可以从丰富的资源冗余中获得最佳性能。单台机器无法从中获益。很好的一点,但是在应用程序开发生命周期的开始就计划扩展是一个好主意。我不相信该应用程序将托管在WAMP服务器上,我假设它仅用于开发和测试。&@ZJR-是的,该应用程序不会托管在WAMP服务器上:)。它将在具有512-1GB内存的VPS上。