在 JDBC 连接字符串中使用主机名与 IP 地址有区别吗

Is there a difference in using host name vs ip address in a JDBC connection string

当使用从 Java 到 Oracle (12) 的 JDBC 连接字符串时,从性能角度来看,如果我使用主机名或 IP 地址,是否有区别? JDBC 每次我创建连接时都会转换 IP 地址吗?如果我使用主机名,它会花费更长的时间吗?

首选用途是什么?主机还是 IP?

jdbc:oracle:thin:@myhost.xerox.com:1521:orcl

或者

jdbc:oracle:thin:@150.130.110.55:1521:orcl

我不知道。

但是,您的询问让我想起了 TNSNAMES.ORA 文件,其中包含您访问的数据库的“别名”。我的文件目前包含 57 个数据库。条目如下所示:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = my_db_server)(PORT = 1521))
    (CONNECT_DATA =             -------------------
      (SERVER = DEDICATED)         ^
      (SERVICE_NAME = XE)          |
    )                              Here's the host
  )

其中一些别名使用 host 作为主机名,而另一些则使用 IP 地址。从我的角度来看,仅根据我自己的经验,没关系

JDBC 及其驱动程序都不会将主机名解析为 IP 地址,这将委托给较低级别​​的 Java 和 OS 服务,这些服务通常会缓存已解析的 IP 地址有一段时间了。

从技术上讲,使用 IP 地址可能会带来(非常小的)性能优势,但使用连接池重用连接可以更好地解决这个问题。

使用 IP 地址而不是主机名的最大缺点是它将您的配置与当前的网络设置联系在一起。如果您的数据库服务器需要移动或由于其他原因获得新的 IP 地址,您将需要做额外的工作,而使用主机名将为您解决这个问题(除了一些 DNS 缓存效果)。

简而言之,使用主机名。

对于数据库连接字符串,CNAME 优于主机名或 IP 地址。如果您以后需要将数据库移动到另一台主机,现在稍作额外的网络配置可以为您节省大量时间。

从性能的角度来看,CNAME、主机名和 IP 地址之间的区别无关紧要。如果您连接的频率足够高,以至于注意到主机名和 IP 地址之间的差异,那么无论如何您都会因连接过多而破坏数据库性能。