有没有办法在我的应用程序服务器(而不是数据库服务器)上的文件中保存特定的mysql查询输出,并且每n秒更新一次这样的数据,这样用户就不会向我的数据库发送查询而只是加载缓存输出
我考虑过使用crontab打开一个特定的.php来执行查询,并将数据保存到用户需要数据时加载的文件中。如果这是一个好主意,是否可以使这个.php文件无法从公共http请求访问?
答案 0 :(得分:2)
首先,这可能不是一个好主意。如果您的目标是减少I / O,那么当用户负载较低时,您实际上可能会增加I / O.
其次,如果这样做,您可能需要编写自定义代码来维护本地缓存。然后,您会遇到缓存争用问题 - 特别是在同时发生写入和读取时。
第三,如果问题是查询花费的时间太长(由于您专注于I / O带宽而不明确),那么优化数据库和查询将是第一步。
第四,从数据库返回到应用程序的大量数据通常表明数据接口设计不佳。通过所需的思考可能会非常有帮助。例如,可能在服务器上排序并返回前10行是最佳解决方案。或者,也许,依靠数据库方面是正确的解决方案。
最后,任何此类解决方案都必然意味着本地缓存可能与数据库不同步。这通常是这种方法的杀手级问题。
所有这些都可以解决,但它们通常会使代码更复杂。如果你现在没有真正的性能问题,那就记住Knuth所说的:“过早的优化是所有邪恶的根源。” (我同意这种观点,但世界上肯定存在其他邪恶;)