是否可以使用Java与MySql建立Unix套接字连接以避免JDBC的TCP / IP开销?
有没有人知道可以实现这一目标的库(或者一些库)?
答案 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连接工厂。