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