So sánh cơ sở dữ liệu nhúng Java [đã đóng]


99

Tôi dự định phát triển một ứng dụng nhỏ (Java) để quản lý tài chính của mình. Tôi tin rằng tôi cần sử dụng cơ sở dữ liệu nhúng, nhưng tôi không có kinh nghiệm về vấn đề này. Tôi đã cố gắng xem xét một số sản phẩm có sẵn , nhưng tôi không thể quyết định cái nào sẽ phù hợp hơn với tôi. H2 , HSQLDB , DerbyBerkeley DB có vẻ là những ứng cử viên sáng giá, nhưng tôi vẫn không thấy họ so sánh với nhau như thế nào. Tôi đánh giá cao sự giúp đỡ của bạn so sánh chúng và giúp tôi quyết định nên sử dụng cái nào.

Tôi định sử dụng Hibernate cho ứng dụng của mình (trừ khi bạn khuyên bạn nên sử dụng API do DBMS cung cấp), nhưng tôi cũng muốn có khả năng chỉnh sửa cơ sở dữ liệu dễ dàng bằng công cụ duyệt SQL (sửa đổi lược đồ và thay đổi dữ liệu).

Cảm ơn bạn.


Nếu không biết bạn đang cố gắng làm gì, thì không thể trả lời câu hỏi này. Tôi đề nghị cập nhật các câu hỏi với thông tin về kích thước của dự án của bạn, có bao nhiêu bảng bạn nghĩ rằng bạn sẽ có, có bao nhiêu hồ sơ, vv
Outlaw Programmer

3
có thể có bản sao của cơ sở dữ liệu java nhúng
Hosam Aly


5
Thật khó chịu khi những câu hỏi hay như vậy lại bị Đức Quốc xã đóng lại. Chắc chắn, một số câu hỏi mơ hồ không phù hợp, nhưng câu hỏi này chắc chắn là như vậy. Trường hợp "Phù hợp" có nghĩa là hữu ích cho cộng đồng, thay vì theo một số định nghĩa pháp lý.
Tuntable

Câu trả lời:


60

Hoặc

  • HSQLDB - Được sử dụng bởi OpenOffice, đã được thử nghiệm và ổn định. Nó rất dễ sử dụng. Nếu bạn muốn chỉnh sửa dữ liệu db của mình, bạn chỉ cần mở tệp và chỉnh sửa các câu lệnh chèn.

hoặc là

  • H2 - Được cho là nhanh hơn (bởi nhà phát triển, người ban đầu cũng thiết kế hsqldb)

Bạn sử dụng cái nào là tùy thuộc vào bạn, tùy thuộc vào hiệu suất và độ ổn định mà bạn cần.

Nhà phát triển của H2 đã đưa ra một đánh giá hiệu suất tốt:
http://www.h2database.com/html/performance.html


35

Tôi sử dụng Apache Derby cho khá nhiều nhu cầu cơ sở dữ liệu nhúng của mình. Bạn cũng có thể sử dụng Java DB của Sun dựa trên Derby nhưng phiên bản mới nhất của Derby mới hơn nhiều. Nó hỗ trợ rất nhiều tùy chọn mà cơ sở dữ liệu gốc, thương mại hỗ trợ nhưng nhỏ hơn và dễ nhúng hơn nhiều. Tôi đã có một số bảng cơ sở dữ liệu với hơn một triệu bản ghi mà không có vấn đề gì.

Tôi đã từng sử dụng HSQLDB và Hypersonic khoảng 3 năm trước. Nó có một số vấn đề về hiệu suất lớn vào thời điểm đó và tôi chuyển sang Derby từ đó vì những vấn đề đó. Derby đã rất vững chắc ngay cả khi nó được ấp ủ tại Apache.


Derby sẽ rất tuyệt nếu không có quá nhiều lỗi và bản cập nhật cuối cùng đã cách đây vài năm.
Hooli

2
@Hooli Tôi không thể xác nhận lỗi, nhưng "... cập nhật lần cuối cách đây vài năm" là không chính xác. Liên quan đến thời điểm bạn đăng nhận xét của mình ( tháng 8 năm 2016 ): bản phát hành chưa đầy một năm trước ( tháng 10 năm 2015 ), bản phát hành hai tháng sau ( tháng 10 năm 2016 ) và bản phát hành chỉ hơn một năm sau ( tháng 10 năm 2017 - Mới nhất ).
Slaw

Cập nhật nhận xét này trong trường hợp người khác bắt gặp chủ đề này khi tìm kiếm. Derby phát hành gần đây nhất là vào tháng 3 năm 2019. Đây là thông tin trang web của họ: db.apache.org/derby
JavaJd

@Chris Dail Bạn có sử dụng derby cho hàng triệu bản ghi làm cơ sở dữ liệu bình thường hoặc trong bộ nhớ hoặc cho một số bộ nhớ đệm không?
Shreyans jain

30

Tôi cần sử dụng cơ sở dữ liệu nhúng Java trong một trong các dự án của mình và tôi đã nghiên cứu rất nhiều để hiểu ưu và nhược điểm của từng cơ sở dữ liệu. Tôi đã viết một blog liệt kê ưu và nhược điểm của các cơ sở dữ liệu java nhúng phổ biến (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), bạn có thể xem qua. Tôi đã chọn H2 vì tôi nghĩ nó phù hợp nhất với yêu cầu của tôi. Liên kết cho blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Hy vọng nó sẽ hữu ích!



14

HSQLDB là một ứng cử viên sáng giá (thực tế là nó được sử dụng trong OpenOffice có thể thuyết phục một số bạn), nhưng đối với một ứng dụng cá nhân nhỏ như vậy, tại sao không sử dụng cơ sở dữ liệu đối tượng (thay vì cơ sở dữ liệu quan hệ cổ điển)?

Tôi đã sử dụng DB4O trong một trong những dự án của mình và tôi rất hài lòng với nó. Là hướng đối tượng, bạn không cần toàn bộ lớp Hibernate và có thể chèn / cập nhật / xóa / truy vấn trực tiếp các đối tượng! Hơn nữa, bạn không cần phải lo lắng về lược đồ, bạn trực tiếp làm việc với các đối tượng và DB4O thực hiện phần còn lại!

Tôi đồng ý rằng có thể mất một khoảng thời gian để làm quen với kiểu cơ sở dữ liệu mới này, nhưng hãy xem hướng dẫn DB40 để xem nó làm việc với DB dễ dàng như thế nào!

CHỈNH SỬA: Như đã nói trong phần nhận xét, DB4O tự động xử lý các phiên bản mới hơn của các lớp. Hơn nữa, một công cụ để duyệt và cập nhật cơ sở dữ liệu bên ngoài ứng dụng có sẵn tại đây: http://code.google.com/p/db4o-om/


2
Cảm ơn. DB4O có vẻ tốt cho một dự án nhỏ như vậy, nhưng tôi tin rằng khả năng duyệt và chỉnh sửa dữ liệu bên ngoài ứng dụng là rất quan trọng. Ngoài ra, có dễ dàng xử lý các phiên bản mới hơn của các lớp không? (ví dụ: các trường được thêm / xóa)
Hosam Aly

Như đã nói trong phần chỉnh sửa của tôi, tồn tại một công cụ để duyệt và chỉnh sửa DB bên ngoài ứng dụng. Và như Fabian đã nói, các phiên bản mới hơn của các lớp được tự động sử dụng.
Wookai

Cảm ơn các cập nhật. Có một công cụ duyệt web rất quan trọng đối với tôi, vì vậy cảm ơn rất nhiều.
Hosam Aly

12

Java DB (bản phân phối Apache Derby của Sun) hiện có trong JDK 6!

Tôi đã muốn làm một cái gì đó giống như Jason Cohen và đã nghĩ rằng điều này có vẻ như là cách dễ dàng nhất trong bản phân phối JDK (mà tuần trước bây giờ là một yêu cầu cho ứng dụng của tôi). Hoặc có lẽ tôi chỉ lười biếng theo cách đó.


Có lẽ bạn đúng! Chúng tôi có yêu cầu cũng phải chạy dưới Java 1.5 nên đây không phải là một tùy chọn cho chúng tôi.
Jason Cohen 11-08

... Ý tôi là bạn đã đúng về cách dễ dàng nhất, không đúng về việc lười biếng. :-P
Jason Cohen

Java DB chỉ giao hàng với các triển khai Sun / Oracle của JDK. Không phải là một phần tiêu chuẩn của Java.
Basil Bourque vào

7

Chúng tôi sử dụng HSQLDB trong sản xuất như một tùy chọn "không có cấu hình" cho ứng dụng của chúng tôi. Nó cho phép mọi người dùng thử mà không gặp rắc rối khi thiết lập cơ sở dữ liệu thực.

Tuy nhiên chúng tôi không hỗ trợ nó để sử dụng bình thường. Lý do là một số:

  1. Làm chậm tương ứng với kích thước của dữ liệu.
  2. Khó truy cập bên ngoài ứng dụng của chúng tôi (ví dụ: đối với báo cáo tùy chỉnh).
  3. Rất khó để thực hiện đúng các giao dịch / disk-sync, vì vậy rất dễ mất dữ liệu.

Đối với ít nhất (2) và (3), có nhiều cách xung quanh nó nhưng nó khó; nó dễ dàng hơn nhiều để cài đặt MySQL.


7

neo4j là:

một công cụ bền bỉ Java được nhúng, dựa trên đĩa, giao dịch đầy đủ, lưu trữ dữ liệu có cấu trúc trong biểu đồ chứ không phải trong bảng

Tôi chưa có cơ hội để thử nó - nhưng nó có vẻ rất hứa hẹn. Lưu ý rằng đây không phải là cơ sở dữ liệu SQL - biểu đồ đối tượng của bạn vẫn tồn tại cho bạn - vì vậy nó có thể không phù hợp với ứng dụng hiện có của bạn.



5

Hầu hết mọi thứ đã được nói rồi, nhưng tôi chỉ có thể nói thêm rằng tôi đã sử dụng HSQL, Derby và Ber carved DB trong một số dự án thú cưng của mình và tất cả chúng đều hoạt động tốt. Vì vậy, tôi nghĩ rằng nó không thực sự quan trọng nhiều để thành thật. Một điều đáng nói là HSQL tự lưu dưới dạng tệp văn bản với các câu lệnh SQL khá ổn. Giúp bạn thực sự dễ dàng thực hiện các thử nghiệm và thiết lập dữ liệu một cách nhanh chóng. Cũng có thể chỉnh sửa nhanh nếu cần. Đoán rằng bạn có thể dễ dàng chuyển tất cả những thứ đó sang bất kỳ cơ sở dữ liệu nào nếu bạn cần thay đổi :)


5

HSQLDB có thể gây ra sự cố cho các ứng dụng lớn, nó không hoàn toàn ổn định.

Điều tốt nhất tôi đã nghe (tuy nhiên, không phải trải nghiệm đầu tiên) là berkleyDB. Nhưng trừ khi bạn mở nguồn nó, bạn sẽ mất một cánh tay và một chân để sử dụng do cấp phép ... hãy xem http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html này để biết chi tiết.

ps. berkleyDB không phải là cơ sở dữ liệu quan hệ trong trường hợp bạn không biết.


Ồ, tôi không biết Berkeley không phải là một cơ sở dữ liệu quan hệ! Cảm ơn rất nhiều!
Hosam Aly

không có nghĩa là nó không tốt. nhưng tôi nghi ngờ nó có lẽ quá tốt cho việc sử dụng của bạn khi xem xét nó cho một cái gì đó cá nhân. ngoài ra, hãy xem sqlite. Tôi nghĩ rằng nó có liên kết java, nhưng không thể tìm thấy nó atm.
Chii

4

Tôi là một fan hâm mộ lớn của DB4O cho cả .Net và Java .

Hiệu suất đã trở nên tốt hơn nhiều kể từ khi phát hành đầu tiên. Mô hình cấp phép cũng không quá tệ. Tôi đặc biệt thích các tùy chọn có sẵn để truy vấn các đối tượng của bạn. Truy vấn bằng ví dụ rất mạnh mẽ và dễ làm quen.


4

Bạn sẽ sử dụng tiêu chí nào để đánh giá những điều này? Nếu bạn chưa biết, thì bạn không cần phải quyết định ngay bây giờ. Cố gắng làm cho ứng dụng của bạn ở dạng bất khả tri thực hiện cơ sở dữ liệu - cung cấp các trình bao bọc thích hợp, các đối tượng truy cập dữ liệu, v.v. và đưa ra quyết định này khi bạn có tất cả các dữ kiện cần thiết và bạn phải quyết định.

Nếu bạn đang sử dụng cơ sở dữ liệu quan hệ và SQL thì phần trên không quá khó (sử dụng JDBC, v.v.). Đảm bảo rằng bạn có nhiều bài kiểm tra xung quanh để khi bạn muốn chuyển đổi giữa các cơ sở dữ liệu, bạn có thể xác định rằng chức năng của ứng dụng của bạn vẫn như cũ.

Tôi đã gặp vấn đề tương tự một thời gian trước đây. Tôi không biết nên sử dụng cơ sở dữ liệu nào, vì vậy giải pháp đầu tiên của tôi đã sử dụng Derby (hoặc HSQLDB?) Và sau đó tôi có thể chuyển sang HSQLDB (hoặc Derby? Không thể nhớ giải pháp nào hoạt động) sau khi tôi xác định được vị trí Tôi gặp vấn đề (liên quan đến hiệu suất) và giải pháp nào thực sự phù hợp với tôi.


3

Tôi đã sử dụng Derby và tôi thực sự ghét các chức năng chuyển đổi kiểu dữ liệu, đặc biệt là các chức năng ngày / giờ. (Loại số) <--> Chuyển đổi Varchar đó là một nỗi đau.

Vì vậy, nếu bạn có kế hoạch sử dụng chuyển đổi kiểu dữ liệu trong các câu lệnh DB của mình, hãy xem xét việc sử dụng DB nhúng, tôi biết điều đó đã quá muộn.

Chuyển đổi loại dữ liệu Phiên bản Derby mới nhất


3

Cá nhân tôi thích HSQLDB, nhưng chủ yếu là vì nó là lần đầu tiên tôi thử.

H2 được cho là nhanh hơn và cung cấp giao diện người dùng GUI đẹp hơn (là giao diện chung và hoạt động với bất kỳ trình điều khiển JDBC nào).

Ít nhất HSQLDB, H2 và Derby cung cấp các chế độ máy chủ rất tốt cho việc phát triển, vì bạn có thể truy cập DB bằng ứng dụng của mình và một số công cụ cùng lúc (chế độ nhúng thường không cho phép).


3

Tôi đoán là tôi hơi muộn (hơi trễ ;-)) với bài đăng này, nhưng tôi muốn thêm Perst, một cơ sở dữ liệu nhúng hướng đối tượng, mã nguồn mở cho Java & .NET. để bạn xem xét. Perst là một cơ sở dữ liệu nhúng giấy phép kép / nguồn mở cho Java. Bản phân phối tương thích với nền tảng Android của Google và cũng bao gồm Perst Lite cho Java ME. Chúng tôi thậm chí đã xây dựng một điểm chuẩn Android và tạo ra một whitepaper về chủ đề này ... bạn có thể xem tại đây: http://www.mcobject.com/index.cfm?fosystemction=download&pageid=581§ionid=133

Chúc mọi điều tốt đẹp, Chris


3

Nếu tôi đúng H2 là của những người cùng viết HSQLDB. Sẽ tốt hơn rất nhiều nếu bạn tin tưởng vào các điểm chuẩn trên trang web của họ. Ngoài ra, có một số quan điểm cho rằng cộng đồng CN đã nhảy quá nhanh vào Derby.


2
Những khái niệm về trận derby sớm có liên quan đến DerbyDB là gì? Trưởng thành?
simgineer

2

Tôi nhận ra rằng bạn đã đề cập đến duyệt SQL, nhưng mọi thứ khác trong câu hỏi của bạn khiến tôi muốn đề nghị bạn cũng nên xem xét DB4O , một DB đối tượng đơn giản, tuyệt vời .


Cảm ơn. DB4O có vẻ tốt cho một dự án nhỏ như vậy, nhưng tôi tin rằng khả năng duyệt và chỉnh sửa dữ liệu bên ngoài ứng dụng là rất quan trọng. Ngoài ra, có dễ dàng xử lý các phiên bản mới hơn của các lớp không? (ví dụ như thêm / lĩnh vực loại bỏ)
Hosam Aly

Có, nó hỗ trợ một số cấu trúc lại tự động, bạn có thể tìm thêm về nó tại đây: ibm.com/developerworks/java/library/j-db4o3.html
FabianLESg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.