2010-11-21 38 views
7

Tôi đang đưa ra quyết định cho một cơ sở dữ liệu nhúng trong một ứng dụng Java servlet sắp tới. Tôi xuống đến hai ứng cử viên cuối cùng: SQLite với SQLiteJDBC "tinh khiết Java" trình điều khiển vs Java DB (aka Derby). Dưới đây là tiêu chí sát thủ của tôi: Ứng dụng phải chạy trên bất kỳ hệ điều hành nào hỗ trợ Java, cụ thể là chúng tôi có các máy chủ Solaris, CentOS, Windows x86 và Windows x64, tất cả đều cần chạy ứng dụng. Và việc cài đặt không liên quan gì đến việc sao chép tập tin chiến tranh vào thư mục triển khai của máy chủ mục tiêu và cho phép máy chủ thực hiện phần còn lại (không có gì khác ngoài việc sao chép zip vào máy chủ đích và sau đó cho phép máy chủ giải nén và chạy ứng dụng). Không nên mucking xung quanh với nhị phân bản địa như là một phần của tiến trình cài đặt, và không có logic thiết lập bổ sung. (Đó không phải là yêu cầu của tôi, nó là của công ty, đối với tất cả các ứng dụng dựa trên servlet, nhưng tôi thích nó).Trình điều khiển Java SQLiteJDBC thuần túy có thực sự thuần túy không?

Tôi biết rằng Derby (Java DB) đáp ứng các tiêu chí trên. Tôi đã thực hiện nó một hoặc hai lần. Nhưng tôi thực sự thích kiến ​​trúc tập tin duy nhất của SQLite và thực tế là cộng đồng SQLite lớn hơn khoảng 20 lần so với Derby. Tôi cũng có một nỗi sợ rằng Oracle sẽ giết Derby vào một ngày nào đó, vì bây giờ họ có thứ gì đó giống như năm sản phẩm cơ sở dữ liệu cạnh tranh dưới chiếc ô của họ và không thể tiếp tục mãi mãi. Derby có lẽ sẽ là nạn nhân đầu tiên khi bắt đầu dọn phòng.

Vì vậy, tôi đã xem xét SQLiteJDBC, tuyên bố có trình điều khiển JDBC "thuần Java" cho SQLite. Bây giờ, tôi sẽ hiểu "thuần Java" có nghĩa là không có phụ thuộc hệ điều hành hoặc thư viện bổ sung, mà một trong những có thể chạy trình điều khiển trong bất kỳ JVM trên bất kỳ hệ điều hành. Vì vậy, tôi đi và lấy tệp jar với trình điều khiển Java thuần túy. Và là loại tò mò, tôi nhìn vào bên trong nó. Sau đó, tôi nhận thấy nó chứa 4 file trong thư mục gốc với phần mở rộng "lib", như sau:

linux-amd64.lib
linux-x86.lib
mac-universal.lib
win-x86.lib

Ok, vậy, có chuyện gì với điều đó? Đây có phải là những thư viện gốc cho hệ điều hành được đặt tên không? Nếu vậy, tôi có thể giả định trình điều khiển Java thuần túy này sẽ chỉ chạy trên một nền tảng có tệp lib thích hợp trong bình không? Nếu đúng như vậy, tôi sẽ phải lấy SQLite ra khỏi danh sách các ứng cử viên, vì winX64 và Solaris là hai hệ điều hành quan trọng nhất của chúng tôi ở đây.

Hoặc có thể tôi đã hiểu sai và trình điều khiển Java thuần túy thực sự là Java tinh khiết và nó sẽ chạy trên bất kỳ JVM nào?

Tất cả các câu trả lời đều được chào đón !!!

Cảm ơn trước, John

Trả lời

2

Nếu tôi hiểu đúng, SQLiteJDBC chính nó là một loại 4 JDBC driver nhưng vẫn đòi hỏi một số hội nhập nhị phân có nguồn gốc từ nền tảng điều hành máy chủ từ SQLite vẫn là một giải pháp C-based và làm không có lớp tích hợp/giao thức mạng như SQL * Net cho Oracle theo như tôi biết. Trang chủ SQLiteJDBC đề cập đến việc triển khai "NestedVM" cho bất kỳ ngôn ngữ nào được GCC hỗ trợ, do đó, có vẻ như có thể triển khai đa nền tảng ở bất cứ nơi nào có môi trường chạy GCC. Tuy nhiên, không có nhắc đến Solaris.

+0

Cảm ơn câu trả lời của bạn. Tôi thú nhận không biết về NestedVM hoặc GCC Runtime. Tôi nhanh chóng đọc về chúng và không thể biết đây có phải là một yêu cầu hay không (cụ thể là yêu cầu GCC Runtime) mà chắc chắn sẽ đúng trên tất cả các máy chủ mục tiêu.Tôi biết rất nhiều hộp Solaris của chúng tôi đã được cài đặt bao gồm ít "gizmos phụ" càng tốt. Và ứng dụng này có thể sẽ được triển khai trên nhiều máy chủ và tôi không có cách nào để trả lời tất cả chúng trước tiên. Bản năng của tôi đang bảo tôi gắn bó với Derby. –

+0

Ồ, và vào đầu tôi chỉ cần bật các hộp Windows x64! Nó không phải là rất khó cho họ một GCC Runtime cài đặt? Vì vậy, không nằm trong danh sách các tệp lib trong jar, SQLLiteJDBC sẽ không hoạt động trên chúng mà không cần cấu hình thêm, tôi nghĩ vậy. –

+1

Đúng. Win64 đi kèm với chia sẻ riêng của mình của trục trặc anyway :) Cygwin có lẽ là một trong những môi trường chạy Linux/GNUish phổ biến nhất, nhưng nói chung đòi hỏi phải cài đặt rõ ràng: không phải là một nhiệm vụ phổ biến trong Userland. FYI: Trang sau đây có một bản tóm tắt tuyệt vời về OSS Java DB Engines http://java-source.net/open-source/database-engines. – JTP

3

http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC - Cung cấp triển khai Java thuần túy, mặc dù nó sử dụng tệp .lib được cung cấp khi có thể khi chúng nhanh hơn.

+0

Cảm ơn thông tin đó. Vì vậy, nếu tôi đã sử dụng SQLiteJDBC đã đề cập ở trên trên một nền tảng mà không có tệp .lib được cung cấp, nó sẽ vẫn hoạt động? –

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