使用Java与MySql进行Unix套接字连接以避免JDBC的TCP / IP开销?

时间:2010-09-22 16:43:25

标签: java mysql jdbc unix-socket

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

有没有人知道可以实现这一目标的库(或者一些库)?

4 个答案:

答案 0 :(得分:1)

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

将JNI转移到基于C的实现可能会比跳过本机代码花费更多,而不是从减少的TCP / IP开销中获得。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

我可以问您如何确定TCP / IP开销是个问题?你是怎么把这个问题(我认为你有的)缩小到那个?

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

答案 3 :(得分:0)

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

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