当前,所有 MySQL 数据/API 调用均由远程 DB 集群处理(即网络延迟是影响脚本总执行时间的一个因素)。
为了减少此情况下的执行时间,在每个应用服务器上运行本地 MySQL 实例来处理 mysql_real_escape_string API 调用是否合理?有人这样做过吗?
答案1
你以为你想做的事并不是你想做的事。
调用mysql_real_escape_string
不会真正向服务器发送任何内容(这可以通过查看tcpdump
输出来确认)。该调用需要当前连接才能确定使用的字符集(因此可能需要引用的内容)。
通过运行mysql_real_escape_string
除真实、实时、实际数据库之外的任何数据库,你都无法提高性能根本,并且您将面临连接配置不一致的风险,从而面临各种潜在风险。
答案2
您将通过 TCP 连接进行进程外调用,即使它是到本地主机的调用。此外,您将为 mysql 进程使用额外的内存,并增加代码的复杂性。
更好的方法是找到一个可以复制 mysql_real_escape_string 功能的函数,而无需使用 mysql。您必须确保此函数的工作原理与 mysql_real_escape_string 完全相同,否则您可能会面临安全问题。
我还想问,如果您的脚本进行了如此多的字符串转义调用,以至于问题变得严重,您是否应该重新考虑您的设计。您是如何发现这些调用是问题所在?您是否分析过您的代码?如果没有,您很可能找错了方向。
答案3
我从来没有需要这样做,但这似乎是一件非常合理的事情。
我会非常小心,确保您的本地 mysqld 版本和配置与真实服务器相互匹配,因为不匹配可能会导致非常有趣的问题。