2010-09-22 34 views
6

Có thể tạo kết nối socket Unix với MySql bằng Java để tránh chi phí TCP/IP của JDBC không?Kết nối socket Unix với MySql với Java để tránh chi phí TCP/IP của JDBC?

Có ai biết thư viện (hoặc một vài thư viện, có lẽ) làm cho điều này có thể xảy ra không?

+0

Bạn có thể muốn chuyển MySQL C API http://dev.mysql.com/doc/refman/5.0/en/c.html sang Java bằng Swig http://www.swig.org/. Nếu bạn có thời gian và nếu nó là tất cả giá trị nó :) – Joset

+0

Tôi đang nghĩ rằng bạn đang dùng cùng một cách tiếp cận như tôi có, nếu bạn không muốn máy chủ mysql tiếp xúc với web ... sử dụng iptables và như vậy chặn cổng, nhưng các ứng dụng cục bộ vẫn có thể truy cập dưới tường lửa. – ppostma1

+1

Tôi nghĩ rằng những gì các poster ban đầu muốn là một kết nối JDBC MySQL có thể sử dụng socket unix cục bộ thay vì TCP. Như những người khác đã chỉ ra, trình kết nối JDBC tiêu chuẩn thực hiện rất nhiều công cụ thông minh và trừ khi bạn đã xác nhận rằng kết nối mạng là một nút cổ chai bạn đang mạo hiểm tối ưu hóa sớm. Tôi không thấy một cách tiêu chuẩn để sử dụng các socket trong trình kết nối JDBC MySQL để làm điều này. – mdoar

Trả lời

0

Bạn luôn có thể lấy thư viện C và tự quấn nó. Tôi nghĩ rằng nó hỗ trợ ổ cắm UNIX.

Tôi có thể hỏi bạn đã xác định chi phí TCP/IP là vấn đề không? Làm thế nào bạn đã thu hẹp vấn đề (mà tôi giả sử bạn đang có) xuống đó?

Sự cố chỉ là chi phí kết nối chứ không phải chi phí gói không? Nếu việc thiết lập các kết nối mất quá nhiều thời gian, một thư viện kết nối tổng hợp (chẳng hạn như thư viện trong Apache commons) sẽ xử lý điều đó cho bạn.

1

Trình điều khiển JDBC mySQL đã được đánh bóng trong một thời gian dài và có một số tinh chỉnh tối ưu hóa, như bộ nhớ đệm siêu dữ liệu. Tôi sẽ ngạc nhiên khi các nhà phát triển JDBC đã để lại rất nhiều chi phí TCP/IP trong trình điều khiển.

Việc chuyển đổi JNI sang C dựa trên việc triển khai C có thể sẽ tốn nhiều tiền hơn khi nhảy tới mã gốc hơn có thể thu được từ việc giảm chi phí TCP/IP.

Nếu bạn thực sự muốn cắt bỏ chi phí TCP/IP, bạn có thể xem xét sử dụng cơ sở dữ liệu nhúng như sqlite, derby hoặc hypersonic.

+1

'Tôi sẽ ngạc nhiên rằng các nhà phát triển JDBC sẽ để lại rất nhiều chi phí TCP/IP trong trình điều khiển .' Làm thế nào tôi nên hiểu điều này? Các nhà phát triển JDBC có ảnh hưởng như thế nào đến TCP/IP? – hek2mgl

+1

Tôi có nghĩa là các nhà phát triển trình điều khiển JDBC mySQL sẽ điều chỉnh mã mạng để tránh các chi phí không cần thiết trong khi sử dụng TCP. Khi bạn kết nối với một cổng trên cùng một máy, thì hạt nhân bỏ qua rất nhiều chi phí liên quan đến TCP/IP.Mặt khác, nó vẫn là TCP/IP trên một mạng loopback và dữ liệu phải đi qua các lớp mạng. Tất nhiên các nhà phát triển JDBC không thể ảnh hưởng đến TCP/IP ngoài những gì được cung cấp bởi API Java. Tôi sẽ ngạc nhiên nếu giả thuyết này sẽ có tác động đáng kể, đặc biệt là với một cơ sở dữ liệu đằng sau nó. –

1

JDBC chỉ là đặc tả giao diện. Nó không thêm bất kỳ chi phí TCP/IP nào. Nếu có phí thì nó là do trình điều khiển JDBC gây ra. Ngoài ra còn có các trình điều khiển JDBC cho bộ nhớ hoặc cơ sở dữ liệu tệp và không sử dụng TCP/IP.

Trình điều khiển JDBC MYSQL là trình điều khiển JDBC Loại 4. Điều đó có nghĩa là nó không sử dụng bất kỳ mã nguồn gốc nào để truy cập cơ sở dữ liệu. Nếu Java không có phương pháp để truy cập vào ổ cắm unix, trình điều khiển cũng không thể sử dụng chúng. [1]

Nếu bạn thực sự muốn sử dụng ổ cắm Unix, có thể sử dụng trình điều khiển ODBC của MySQL có hỗ trợ các khe cắm unix và sau đó sử dụng cầu JDBC-ODBC để truy cập nó từ Java.

0

Chỉ cần sử dụng junixsocket, http://code.google.com/p/junixsocket/

Đó là một thư viện JNI-powered cung cấp quyền truy cập vào ổ cắm AF_UNIX sử dụng các tiêu chuẩn Java Socket API, và cũng đi kèm với một nhà máy kết nối MySQL.

Các vấn đề liên quan