php - 在应用程序服务器上缓存 sql 查询输出

标签 php mysql

有没有办法将特定的 mysql 查询输出保存在我的应用程序服务器(不是数据库服务器)上的文件中,并每 n 秒更新一次此数据,以便用户不会向我的数据库发送查询,而只是加载缓存输出?

我想过使用一个 crontab,它打开一个特定的 .php 文件来执行查询并将数据保存到一个文件中,该文件在用户需要数据时加载。如果这是个好主意,是否可以使公共(public) http 请求无法访问此 .php 文件?

最佳答案

首先,这可能不是一个好主意。如果您的目标是减少 I/O,您实际上可能会在用户负载较低时增加 I/O。

其次,如果这样做,您可能需要编写自定义代码来维护本地缓存。然后,您会遇到缓存争用问题——尤其是当写入和读取同时发生时。

第三,如果问题是查询花费的时间太长(这还不清楚,因为您关注的是 I/O 带宽),那么优化数据库和查询将是第一步。

第四,从数据库返回到应用程序的大量数据通常表明数据接口(interface)设计不佳。仔细考虑需要什么真的很有帮助。例如,也许在服务器上排序并返回前 10 行是最好的解决方案。或者,也许依靠数据库端是正确的解决方案。

最后,任何此类解决方案都必然意味着本地缓存可能与数据库不同步。这通常是此类方法的致命问题。

所有这些都可以解决,但它们通常会朝着使代码更复杂的方向发展。如果您现在没有遇到真正的性能问题,那么请记住 Knuth 的建议:“过早优化是万恶之源。” (我同意这种观点,但世界上肯定还有其他邪恶;)

关于php - 在应用程序服务器上缓存 sql 查询输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40450762/

相关文章:

php - ffmpeg安装和转换VIdeo的:

php - 获取在某个时间范围内创建的 MySQL 记录?

Java:如何检查 Windows 上是否安装了 MySQL?

php - 事件提要结构

php - 如何从另一个函数获取变量

php - 防止重复输入

php - OOP PHP — 如何有选择地调用类构造函数中定义的特定方法?

php - 复制MySQL数据库速度加快?

mysql - 表选择查询在mysql中给出别名

php - 检查上个月存在的行(比较两个月之间的数据),其中数字 = 特定值