有没有办法将特定的 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/