是否可以使用 Java 与 MySql 建立 Unix 套接字连接以避免 JDBC 的 TCP/IP 开销?
有谁知道使这成为可能的图书馆(或几个图书馆,也许)?
是否可以使用 Java 与 MySql 建立 Unix 套接字连接以避免 JDBC 的 TCP/IP 开销?
有谁知道使这成为可能的图书馆(或几个图书馆,也许)?
此外,mySQL JDBC 驱动程序经过长时间的完善,并进行了一些优化调整,例如元数据缓存。我会惊讶于 JDBC 开发人员会在驱动程序中留下大量 TCP/IP 开销。
从 JNI 转到基于 C 的实现可能会比从减少 TCP/IP 开销中获得的成本更多地跳转到本机代码。
如果你真的想减少 TCP/IP 开销,你可以考虑使用嵌入式数据库,如 sqlite、derby 或 hypersonic。
JDBC 只是一个接口规范。它不会增加任何 TCP/IP 开销。如果有开销,则它是由 JDBC 驱动程序引起的。还有用于内存或文件数据库的 JDBC 驱动程序,根本不使用 TCP/IP。
MYSQL JDBC 驱动程序是 JDBC Type 4 驱动程序。这意味着它不使用任何本机代码来访问数据库。如果 Java 没有访问 unix 套接字的方法,驱动程序也不能使用它们。[1]
如果您真的想使用 unix 套接字,也许可以使用 MySQL 的 ODBC 驱动程序,它似乎支持 unix 套接字,然后使用 JDBC-ODBC 桥从 Java 访问它。
只需使用 junixsocket,http://code.google.com/p/junixsocket/
它是一个由 JNI 提供支持的库,可使用标准 Java 套接字 API 提供对 AF_UNIX 套接字的访问,并且还带有一个 MySQL 连接工厂。
您总是可以使用 C 库并自己包装它。我认为它支持 UNIX 套接字。
请问您如何确定 TCP/IP 开销是一个问题?您是如何将问题(我假设您遇到的)缩小到那个范围的?
问题只是连接开销而不是数据包开销吗?如果建立连接花费的时间太长,连接池库(例如 Apache commons 中的库)会为您处理。