使用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访问它。

您可以随时使用C库并自行包装。 我认为它支持UNIX套接字。

我可以问你如何确定TCP / IP开销是一个问题? 你是如何缩小问题(我假设你有)的问题?

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

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

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