java - 在 localhost 而不是域上连接/使用 MySQL 是否更快(即使域解析到同一台计算机)?

标签 java mysql jdbc

如果我在 Linux 机器上运行 MySQL,如果连接到本地主机运行查询是否比连接到解析为同一个机器的域更快?这是来自使用 JDBC 的 Java。

最佳答案

直接使用本地主机上任何接口(interface)的 IP 地址 - 环回接口(interface) (127.0.0.1) 或任何其他接口(interface) - 是绝对最佳性能的选项。数据包实际上会以 CPU 速度通过环回接口(interface)(无论实际使用哪个 IP)进行路由。

但是,比起其他接口(interface)的 IP,更喜欢 127.0.0.1 的原因有以下三个:

  • 环回接口(interface)对系统的运行至关重要,因此它在启动过程的早期就被初始化并且几乎始终可用。

  • 它不受外部因素影响:虽然移除 eth0 电缆本身不会中断 localhost 通过 eth0 的 IP 对其自身的访问,但如果您有任何许多“自动配置”系统会在链路丢失时愉快地关闭接口(interface)。

  • 如果您设置了防火墙,当涉及公共(public)接口(interface)的 IP 时,规则链很可能会更长(因此性能稍差)。

如果您使用主机名,本地主机名通常会通过/etc/hosts 查找来解析,该查找速度非常快,尽管直接使用 IP 会完全删除此查找。根据您的设置,它也有许多缓存在内存中,因此以后它的速度几乎快得令人眼花缭乱。

如果您使用公共(public)主机名,这可能涉及 DNS 查询,这意味着增加了 CPU 使用率和网络延迟。在本地主机上使用缓存名称服务器将主要消除此问题。但是请记住,如果您的 DNS 服务变得不稳定,可能仍然会出现问题。

使用公共(public)主机名的一个好处是它类似于 db.example.com。这允许您将数据库移动到单独的服务器,而无需更改客户端的配置。

由于您使用的是 JDBC,我假设您正在为所有查询重用单个连接,在这种情况下,主机名解析本身的开销在所有情况下都应该可以忽略不计,除非您必须处理损坏的 DNS 服务器。不过,选择 127.0.0.1 地址可能仍然有一些优点,因为它可能更有效地设置防火墙。

关于java - 在 localhost 而不是域上连接/使用 MySQL 是否更快(即使域解析到同一台计算机)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356893/

相关文章:

java - 使用 JDBC 进行批量插入的有效方法

java - 打开一个新的终端窗口并通过java在其中执行命令而不使用bash脚本

java - 如何使用 mockito 测试 ehcache?

java - vert.x 响应式(Reactive) mySQL 客户端查询总是给出空结果

mysql - 我的程序返回值时出现问题

mysql - 使用 crontab 运行程序无法将非英文字符插入数据库

java - 无法在 spring-integration 4.1.x 中将 String 值转换为 ExpressionEvaluatingRequestHandlerAdvice 的表达式

java - Java 中的切换键

php - Mysql php更新功能问题

mysql - 并发请求时 Hikari CP 连接错误