【问题标题】:Is there a difference in using host name vs ip address in a JDBC connection string在 JDBC 连接字符串中使用主机名与 IP 地址是否有区别
【发布时间】:2021-09-14 15:51:30
【问题描述】:
当使用从 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
【问题讨论】:
标签:
oracle
performance
jdbc
【解决方案1】:
我不知道。
但是,您的问题让我想起了 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 地址。在我看来,仅根据我自己的经验,没关系。
【解决方案2】:
JDBC 及其驱动程序会将主机名解析为 IP 地址,这将委托给较低级别的 Java 和 OS 服务,这些服务通常会将解析的 IP 地址缓存一段时间。
从技术上讲,使用 IP 地址可能会带来(非常小的)性能优势,但最好使用连接池来重用连接。
使用 IP 地址而不是主机名的最大缺点是它会将您的配置与您当前的网络设置联系起来。如果您的数据库服务器需要移动或出于其他原因获得新的 IP 地址,您将需要做额外的工作,而使用主机名会为您解决这个问题(可能除了一些 DNS 缓存影响)。
简而言之,使用主机名。
【解决方案3】:
对于您的数据库连接字符串,CNAME 比主机名或 IP 地址更好。如果您以后需要将数据库移动到另一台主机,现在稍微额外的网络配置可以为您节省大量时间。
从性能的角度来看,CNAME、主机名和 IP 地址之间的区别是无关紧要的。如果您的连接频率足够高,以至于注意到主机名和 IP 地址之间的差异,那么无论如何您都会因连接过多而扼杀数据库性能。