2010-09-22 24 views
6

Czy jest możliwe utworzenie połączenia gniazda Unix z MySql z Javą, aby uniknąć nakładu TCP/IP JDBC?Połączenie gniazda Unix z MySql z Javą, aby uniknąć nakładu TCP/IP JDBC?

Czy ktoś zna bibliotekę (lub może kilka bibliotek), która to umożliwia?

+0

Możesz chcieć przenieść MySQL C API http://dev.mysql.com/doc/refman/5.0/en/c.html na Javę używając Swig http://www.swig.org/. Jeśli masz czas i czy wszystko jest tego warte :) – Joset

+0

Myślę, że przyjmujesz to samo podejście, co ja, jeśli nie chcesz, aby serwer mysql był wystawiony na działanie sieci ... używaj iptables i innych zablokuj port, ale aplikacje lokalne nadal będą miały dostęp pod firewallem. – ppostma1

+1

Myślę, że oryginalny plakat chciał mieć złącze JDBC MySQL, które mogłoby używać lokalnego gniazda unix zamiast TCP. Jak inni zauważyli, standardowe złącze JDBC robi wiele sprytnych rzeczy i dopóki nie potwierdzisz, że połączenie sieciowe jest wąskie gardło, ryzykujesz przedwczesną optymalizacją. Nie widzę standardowego sposobu używania gniazd w łączniku JDBC MySQL, aby to zrobić. – mdoar

Odpowiedz

0

Zawsze można wziąć bibliotekę C i owijać ją samodzielnie. Myślę, że obsługuje on gniazda UNIX.

Czy mogę zapytać, w jaki sposób ustaliłeś obciążenie TCP/IP jako problem? W jaki sposób ograniczyłeś problem (który zakładam, że masz) do tego?

Czy problem jest związany z kosztem połączenia, a nie z obciążeniem pakietu? Jeśli ustanawianie połączeń trwa zbyt długo, biblioteka łączenia połączeń (taka jak ta na serwerze Apache) poradzi sobie z tym za Ciebie.

1

Sterownik JDBC mySQL został wypolerowany przez długi czas i ma kilka usprawnień optymalizacyjnych, takich jak buforowanie metadanych. Byłbym zaskoczony, że programiści JDBC zostawiali dużo sterownika TCP/IP na głowie.

Przejście przez JNI do implementacji opartej na C prawdopodobnie kosztowałoby więcej przeskakiwania do kodu natywnego, niż można uzyskać dzięki zmniejszeniu narzutów TCP/IP.

Jeśli naprawdę chcesz zmniejszyć obciążenie TCP/IP, możesz rozważyć użycie wbudowanej bazy danych, takiej jak sqlite, derby lub hipersoniczna.

+1

'Byłbym zaskoczony, że programiści JDBC zostawiliby wiele problemów związanych z TCP/IP w sterowniku. Jak powinienem to zrozumieć? Jak programiści JDBC mają wpływ na TCP/IP? – hek2mgl

+1

Mam na myśli to, że twórcy sterownika myDQL JDBC dostroiliby kod sieci, aby uniknąć niepotrzebnego narzutu podczas korzystania z TCP. Kiedy łączysz się z portem na tym samym komputerze, jądro przeskakuje dużo narzutu związanego z TCP/IP.Z drugiej strony nadal jest to TCP/IP w sieci z pętlą zwrotną, a dane muszą przejść przez warstwy sieciowe. Twórcy JDBC nie mogą oczywiście wpływać na TCP/IP poza tym, co zapewnia Java API. Byłbym zaskoczony, gdyby te teoretyczne koszty miały znaczący wpływ, szczególnie w przypadku bazy danych. –

1

JDBC to tylko specyfikacja interfejsu. Nie dodaje żadnych obciążeń TCP/IP. Jeśli jest narzut, jest spowodowany przez sterownik JDBC. Istnieją również sterowniki JDBC dla pamięci lub baz danych plików i nie korzystają w ogóle z protokołu TCP/IP.

Sterownik JDBC MYSQL to sterownik JDBC typu 4. Oznacza to, że nie używa żadnego natywnego kodu do uzyskania dostępu do bazy danych. Jeśli Java nie ma metody dostępu do gniazd uniksowych, sterownik również nie może ich użyć. [1]

Jeśli naprawdę chcesz używać gniazda unixowego, możliwe jest użycie sterownika ODBC MySQL, który wydaje się obsługiwać gniazda uniksowe, a następnie użyć mostka JDBC-ODBC, aby uzyskać do niego dostęp z poziomu Java.

0

Wystarczy użyć junixsocket, http://code.google.com/p/junixsocket/

Jest to JNI zasilany biblioteka, która zapewnia dostęp do gniazd AF_UNIX użyciu standardowego Java Socket API, a także jest wyposażony w połączenie fabryce MySQL.