MySQL在Windows平台上提供了多种连接方式,包括:
- 共享内存
- 命名管道
- TCP/IP
我的问题是:如果MySQL将与Web服务器运行在同一台机器上,那么哪种方法在安全性和性能方面最好?
注:这是一个单独的Web服务器场景,没有Web Farm。
谢谢。
就性能而言,如果两者都在同一台机器上运行,那么共享内存是更好的选择,因为它不会遇到可能存在于该机器上或以后安装的防火墙软件问题。
但是,如果将来需要由于扩大规模而将Web服务器和数据库分开,则需要进行更改以支持此操作。
因此,从长远来看,更好的选择是使用TCP / IP,因为这将允许服务器以最小的困难被分离。
共享内存比tcp/ip快4倍。 使用tcp/ip将简单行插入到表中需要约200微秒, 而使用共享内存只需要约55微秒(在我的i5 3ghz上测试)。使用c/connector进行了测试。使用net/connector速度只增加了约3倍。
TCP/IP无论何种情况都是首选配置。
我认为是这样,它是在开发中经过彻底测试的唯一配置。此外
1)命名管道不能保证安全性。人们可以通过 \ServerName\pipe\PipeName 访问它们(即使 C 客户端不会),但 Connector/NET 可以做到这一点。
2)共享内存有几个缺点。例如,无法知道共享内存客户端是否已关闭。也就是说,如果应用程序在未断开连接的情况下退出,则在服务器端资源不会被清理(n wait_timeout 周期默认为 8 小时)。此外,使用共享内存时存在过多的同步。
3)本地 TCP 访问非常快,至少在现代 Windows 上是这样,尽管我认为在 Vista/WS2008 之前并不是这种情况。我对其与管道进行了基准测试,没有什么值得注意的区别。至于安全性,这就是防火墙的作用。
出于安全考虑,禁用TCP/IP网络明显是有益的。 我正在开发一个.NET应用程序,使用MySql连接器连接命名管道没有遇到任何问题。它也可以与Mysql GUI工具一起使用 :),这就是我所需的全部。
我认为命名管道比TCP/IP更有优势(已使用大型转储进行测试)。
但是,您可能需要考虑Web服务器上的实际应用程序使用任何这些连接的性能,因为驱动程序可能无法使用命名管道。
我在Windows上使用php和命名管道时遇到了问题,所以您需要检查故事的这一部分。
共享内存或命名管道比TCP/IP的开销小,但是,Windows是否支持命名管道呢?
另一方面,TCP/IP是最兼容和可扩展的方式,许多连接器甚至不支持其他任何东西。
如果没有必要,您不应将场景限制在“同一台计算机”或平台“Windows”上,始终要考虑可扩展性。
在所有情况下都使用TCP/IP。