为什么在java中创建连接太昂贵

为什么在java中创建连接太昂贵,java,connection,Java,Connection,我确实想知道为什么创建连接被称为过于昂贵,因此 连接是共享的。池中的内容将被保留 为什么在java中创建连接很昂贵 因为创建到远程数据库的连接需要执行数百万条机器指令。您需要: 解析连接字符串 在DNS中查找数据库的主机名 打开TCP/IP网络连接 通过网络连接建立SSL/TLS会话(昂贵的公钥加密、多消息交换) 将用户凭据传递给要进行身份验证的DB服务器,这可能涉及数据库查询以查找匹配的用户详细信息 每次网络数据包交换都会增加几微秒。。。或者更多 如果数据库在同一台计算机上,并且您通过环回

我确实想知道为什么创建连接被称为过于昂贵,因此 连接是共享的。池中的内容将被保留

为什么在java中创建连接很昂贵

因为创建到远程数据库的连接需要执行数百万条机器指令。您需要:

  • 解析连接字符串
  • 在DNS中查找数据库的主机名
  • 打开TCP/IP网络连接
  • 通过网络连接建立SSL/TLS会话(昂贵的公钥加密、多消息交换)
  • 将用户凭据传递给要进行身份验证的DB服务器,这可能涉及数据库查询以查找匹配的用户详细信息
每次网络数据包交换都会增加几微秒。。。或者更多

如果数据库在同一台计算机上,并且您通过环回连接或域套接字进行对话,那么网络交互将更快,但不是即时的。您仍然有系统调用开销、上下文切换/进程或线程调度的成本等等,这只是“传输”层

如果您可以省去SSL/TLS和加密,您可以节省更多的时间

但是,如果建立机器上的非加密数据库连接的平均时间超过5毫秒,我会感到惊讶

现在将其乘以“每分钟有大量新的数据库连接”,不回收连接的开销可能是一个主要问题

但是,在你自己的机器上用你自己的数据库测量它还是值得的

为什么在java中创建连接很昂贵

因为创建到远程数据库的连接需要执行数百万条机器指令。您需要:

  • 解析连接字符串
  • 在DNS中查找数据库的主机名
  • 打开TCP/IP网络连接
  • 通过网络连接建立SSL/TLS会话(昂贵的公钥加密、多消息交换)
  • 将用户凭据传递给要进行身份验证的DB服务器,这可能涉及数据库查询以查找匹配的用户详细信息
每次网络数据包交换都会增加几微秒。。。或者更多

如果数据库在同一台计算机上,并且您通过环回连接或域套接字进行对话,那么网络交互将更快,但不是即时的。您仍然有系统调用开销、上下文切换/进程或线程调度的成本等等,这只是“传输”层

如果您可以省去SSL/TLS和加密,您可以节省更多的时间

但是,如果建立机器上的非加密数据库连接的平均时间超过5毫秒,我会感到惊讶

现在将其乘以“每分钟有大量新的数据库连接”,不回收连接的开销可能是一个主要问题


但是,还是值得在自己的机器上用自己的数据库测量它…

IO,连接通常使用网络通信,比内存处理慢几个数量级。它们通常并不“太贵”。如果你每分钟只需要一次或者其他什么的话,使用后马上扔掉是可以的。如果您在紧密循环中调用它们,它们的成本太高,无法丢弃。不过,连接通常使用网络通信,这比内存处理慢几个数量级。它们通常不会“太贵”。如果你每分钟只需要一次或者其他什么的话,使用后马上扔掉是可以的。但是,如果你在严格的循环中调用它们,它们就太贵了,不能扔掉。我不是说我不同意,而是我更害怕网络延迟(=什么也不做,只是等待),然后CPU指令……我不是说我不同意,但我更害怕网络延迟(=什么也不做,只是等待),然后CPU指令。。。