【问题标题】:Unix socket connection to MySql with Java to avoid JDBC's TCP/IP overhead?Unix 套接字使用 Java 连接到 MySql 以避免 JDBC 的 TCP/IP 开销?
【发布时间】:2010-09-22 16:43:25
【问题描述】:

是否可以使用 Java 与 MySql 建立 Unix 套接字连接以避免 JDBC 的 TCP/IP 开销?

有谁知道使这成为可能的图书馆(或几个图书馆,也许)?

【问题讨论】:

  • 您可能希望使用 Swig swig.org 将 MySQL C API dev.mysql.com/doc/refman/5.0/en/c.html 移植到 Java。如果你有时间并且一切都值得:)
  • 我认为最初的发布者想要的是一个 MySQL JDBC 连接器,它可以使用本地 unix 套接字而不是 TCP。正如其他人指出的那样,标准的 JDBC 连接器做了很多聪明的事情,除非您确认网络连接是一个瓶颈,否则您将面临过早优化的风险。我没有看到在 MySQL JDBC 连接器中使用套接字来执行此操作的标准方法。
  • 我想你正在采取与我相同的方法,如果你不希望 mysql 服务器暴露在网络上......使用 iptables 等来阻止端口,但本地应用仍然可以在防火墙下访问。

标签: java mysql jdbc unix-socket


【解决方案1】:

此外,mySQL JDBC 驱动程序经过长时间的完善,并进行了多项优化调整,例如元数据缓存。如果 JDBC 开发人员会在驱动程序中留下大量 TCP/IP 开销,我会感到惊讶。

从 JNI 转到基于 C 的实现可能会比从减少 TCP/IP 开销中获得的成本更多地跳转到本机代码。

如果您真的想减少 TCP/IP 开销,您可以考虑使用嵌入式数据库,如 sqlite、derby 或 hypersonic。

【讨论】:

  • I would be surprised that the JDBC developers would have left a lot of TCP/IP overhead in the driver. 这个应该怎么理解? JDBC 开发人员如何影响 TCP/IP?
  • 我的意思是 mySQL JDBC 驱动程序的开发人员会调整网络代码以避免在使用 TCP 时产生不必要的开销。当您连接到同一台机器上的端口时,内核会跳过很多与 TCP/IP 相关的开销。另一方面,它仍然是环回网络上的 TCP/IP,数据必须通过网络层。 JDBC 开发人员当然不能在 Java API 提供的范围之外影响 TCP/IP。如果这种理论开销会产生重大影响,我会感到惊讶,尤其是在它背后有数据库的情况下。
【解决方案2】:

JDBC 只是一个接口规范。它不会增加任何 TCP/IP 开销。如果有开销,则它是由 JDBC 驱动程序引起的。还有内存或文件数据库的 JDBC 驱动程序,根本不使用 TCP/IP。

MYSQL JDBC 驱动程序是 JDBC Type 4 驱动程序。这意味着它不使用任何本机代码来访问数据库。如果Java没有访问unix套接字的方法,驱动也不能使用它们。[1]

如果你真的想使用 unix 套接字,也许可以使用 MySQL 的 ODBC 驱动程序,它似乎支持 unix 套接字,然后使用 JDBC-ODBC 桥从 Java 访问它。

【讨论】:

    【解决方案3】:

    您总是可以使用 C 库并自己包装它。我认为它支持 UNIX 套接字。

    请问您如何确定 TCP/IP 开销是一个问题?您是如何将问题(我假设您遇到的)缩小到这个范围的?

    问题只是连接开销而不是数据包开销吗?如果建立连接花费的时间太长,连接池库(例如 Apache commons 中的那个)会为您处理。

    【讨论】:

      【解决方案4】:

      只需使用 junixsocket,http://code.google.com/p/junixsocket/

      它是一个由 JNI 提供支持的库,它使用标准 Java 套接字 API 提供对 AF_UNIX 套接字的访问,并且还带有一个 MySQL 连接工厂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2015-01-12
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多