Perbandingan Database Tertanam Java [ditutup]

99

Saya bermaksud mengembangkan aplikasi kecil (Java) untuk mengelola keuangan saya. Saya yakin saya perlu menggunakan database tertanam, tetapi saya tidak memiliki pengalaman terkait masalah ini. Saya mencoba melihat beberapa produk yang tersedia , tetapi saya tidak dapat memutuskan mana yang lebih cocok untuk saya. H2 , HSQLDB , Derby dan Berkeley DB tampaknya merupakan kandidat yang baik, tetapi saya masih belum melihat bagaimana mereka dibandingkan satu sama lain. Saya menghargai bantuan Anda untuk membandingkannya dan membantu saya memutuskan mana yang akan digunakan.

Saya bermaksud menggunakan Hibernate untuk aplikasi saya (kecuali Anda akan merekomendasikan menggunakan API yang disediakan DBMS), tetapi saya juga ingin memiliki kemampuan untuk mengedit database dengan mudah menggunakan alat penelusuran SQL (memodifikasi skema dan mengubah data).

Terima kasih.

Hosam Aly
sumber
Tanpa mengetahui apa yang Anda coba lakukan, tidak mungkin menjawab pertanyaan ini. Saya sarankan untuk memperbarui pertanyaan dengan info tentang ukuran proyek Anda, berapa banyak tabel yang menurut Anda akan Anda miliki, berapa banyak catatan, dll.
Outlaw Programmer
3
kemungkinan duplikat dari database java Tertanam
Hosam Aly
5
Sangat menjengkelkan bahwa pertanyaan bagus seperti itu ditutup oleh Nazi. Tentu, beberapa pertanyaan samar tidak cocok, tetapi yang ini pasti cocok. Dimana "Cocok" berarti berguna bagi komunitas, bukan oleh beberapa definisi legalistik.
Tuntable

Jawaban:

60

Antara

  • HSQLDB - Digunakan oleh OpenOffice, teruji dan stabil. Mudah digunakan. Jika Anda ingin mengedit db-data Anda, Anda cukup membuka file dan mengedit pernyataan sisipkan.

atau

  • H2 - Dikatakan lebih cepat (oleh pengembang, yang awalnya merancang hsqldb juga)

Yang mana yang Anda gunakan terserah Anda, tergantung seberapa besar performa dan seberapa besar stabilitas yang Anda butuhkan.

Pengembang H2 telah memberikan evaluasi kinerja yang bagus:
http://www.h2database.com/html/performance.html

Sven Lilienthal
sumber
35

Saya menggunakan Apache Derby untuk hampir semua kebutuhan database saya yang disematkan. Anda juga dapat menggunakan Java DB Sun yang didasarkan pada Derby tetapi versi Derby terbaru jauh lebih baru. Ini mendukung banyak opsi yang didukung database komersial dan asli tetapi jauh lebih kecil dan lebih mudah untuk disematkan. Saya memiliki beberapa tabel database dengan lebih dari satu juta catatan tanpa masalah.

Saya dulu menggunakan HSQLDB dan Hypersonic sekitar 3 tahun yang lalu. Itu memiliki beberapa masalah kinerja utama pada saat itu dan saya beralih ke Derby dari itu karena masalah itu. Derby sangat solid bahkan saat masih dalam inkubator di Apache.

Chris Dail
sumber
Derby akan bagus jika bukan karena ada begitu banyak bug dan pembaruan terakhir dilakukan beberapa tahun yang lalu.
Hooli
2
@Hooli Saya tidak bisa membuktikan adanya bug, tetapi "... pembaruan terakhir adalah beberapa tahun yang lalu" tidak benar. Sehubungan dengan waktu Anda memposting komentar Anda ( Agustus 2016 ): ada rilis kurang dari setahun sebelumnya ( Oktober 2015 ), rilis dua bulan setelah ( Oktober 2016 ), dan rilis lebih dari setahun setelahnya ( Oktober 2017 - Terbaru ).
Slaw
Memperbarui komentar ini jika orang lain menemukan subjek ini dalam penelusuran. Rilisan terbaru Derby adalah pada Maret / 2019. Berikut adalah info situs mereka: db.apache.org/derby
JavaJd
@Chris Dail Apakah Anda menggunakan derby untuk jutaan rekaman sebagai database normal atau dalam memori atau untuk beberapa cache?
Shreyans jain
30

Saya perlu menggunakan database tertanam Java di salah satu proyek saya dan saya melakukan banyak penelitian untuk memahami pro dan kontra dari setiap database. Saya menulis blog yang mencantumkan pro dan kontra dari database java tersemat populer (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), Anda dapat melihatnya. Saya memilih H2 karena saya pikir itu paling sesuai dengan kebutuhan saya. Tautan untuk blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Semoga membantu!

Rohan Karwa
sumber
14

HSQLDB adalah kandidat yang baik (fakta bahwa ini digunakan di OpenOffice mungkin meyakinkan sebagian dari Anda), tetapi untuk aplikasi personnal yang kecil, mengapa tidak menggunakan database objek (bukan database relasional klasik)?

Saya menggunakan DB4O di salah satu proyek saya, dan saya sangat puas dengannya. Karena berorientasi objek, Anda tidak memerlukan seluruh lapisan Hibernate, dan dapat langsung memasukkan / memperbarui / menghapus / kueri objek! Selain itu, Anda tidak perlu khawatir tentang skema, Anda langsung bekerja dengan objek dan DB4O akan mengerjakan sisanya!

Saya setuju bahwa mungkin perlu beberapa waktu untuk membiasakan diri dengan jenis database baru ini, tetapi periksa tutorial DB40 untuk melihat betapa mudahnya bekerja dengan DB!

EDIT: Seperti yang dikatakan di komentar, DB4O menangani secara otomatis versi kelas yang lebih baru. Selain itu, alat untuk menjelajahi dan memperbarui basis data di luar aplikasi tersedia di sini: http://code.google.com/p/db4o-om/

Wookai
sumber
2
Terima kasih. DB4O terlihat bagus untuk proyek kecil, tetapi saya yakin kemampuan untuk menelusuri dan mengedit data di luar aplikasi sangat penting. Juga apakah mudah untuk menangani versi kelas yang lebih baru? (mis. bidang yang ditambahkan / dihapus)
Hosam Aly
Seperti yang saya katakan di edit saya, ada alat untuk browsing dan mengedit DB di luar aplikasi. Dan seperti yang dikatakan Fabian, versi kelas yang lebih baru secara otomatis ditangani.
Wookai
Terima kasih atas pembaruannya. Memiliki alat penelusuran sangat penting bagi saya, jadi terima kasih banyak.
Hosam Aly
12

Java DB (distribusi Apache Derby dari Sun) sekarang dikirimkan di JDK 6!

Saya pernah ingin melakukan sesuatu seperti Jason Cohen dan berpikir ini sepertinya cara termudah berada di distro JDK (yang minggu lalu sekarang menjadi persyaratan untuk aplikasi saya). Atau mungkin saya hanya malas seperti itu.

Stu Thompson
sumber
Mungkin Anda benar! Kami memiliki persyaratan untuk juga berjalan di bawah Java 1.5 jadi ini bukan pilihan bagi kami.
Jason Cohen
... Maksud saya, Anda benar tentang itu menjadi cara termudah, bukan benar tentang malas. :-P
Jason Cohen
Java DB dikirimkan hanya dengan implementasi Sun / Oracle dari JDK. Bukan bagian standar Java.
Basil Bourque
7

Kami menggunakan HSQLDB dalam produksi sebagai opsi "tanpa konfigurasi" untuk aplikasi kami. Ini memungkinkan orang untuk mencoba tanpa perlu repot menyiapkan database yang sebenarnya.

Namun kami tidak mendukungnya untuk penggunaan normal. Alasannya ada beberapa:

  1. Memperlambat secara proporsional dengan ukuran data.
  2. Sulit untuk mengakses di luar aplikasi kita (misalnya untuk laporan khusus).
  3. Transaksi / sinkronisasi disk sulit dilakukan dengan benar, sehingga data mudah hilang.

Setidaknya untuk (2) dan (3), ada cara untuk mengatasinya tetapi sulit; jauh lebih mudah misalnya menginstal MySQL.

Jason Cohen
sumber
7

neo4j adalah:

mesin persistensi Java yang tertanam, berbasis disk, dan sepenuhnya transaksional yang menyimpan data terstruktur dalam grafik daripada dalam tabel

Saya belum sempat mencobanya - tapi kelihatannya sangat menjanjikan. Perhatikan bahwa ini bukan database SQL - grafik objek Anda disimpan untuk Anda - jadi mungkin tidak sesuai untuk aplikasi Anda yang sudah ada.

devstopfix
sumber
5

Kebanyakan hal telah dikatakan, tetapi saya dapat menambahkan bahwa saya telah menggunakan HSQL, Derby dan Berkely DB di beberapa proyek hewan peliharaan saya dan semuanya bekerja dengan baik. Jadi saya rasa tidak terlalu penting untuk jujur. Satu hal yang perlu disebutkan adalah bahwa HSQL menyimpan dirinya sebagai file teks dengan pernyataan SQL yang cukup bagus. Sangat memudahkan saat Anda mengembangkan untuk melakukan pengujian dan menyiapkan data dengan cepat. Dapat juga melakukan pengeditan cepat jika diperlukan. Kira Anda dapat dengan mudah mentransfer semua itu ke database apa pun jika Anda perlu mengubahnya juga :)

willcodejavaforfood
sumber
5

HSQLDB dapat menyebabkan masalah untuk aplikasi besar, tidak terlalu stabil.

Yang terbaik yang pernah saya dengar (bukan pengalaman langsung) adalah berkleyDB. Tetapi kecuali Anda membukanya, itu akan membebani Anda dengan tangan dan kaki untuk digunakan karena lisensi ... lihat http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html ini untuk detailnya.

ps. berkleyDB bukanlah database relasional jika Anda tidak mengetahuinya.

Chii
sumber
Oh, saya tidak tahu Berkeley bukanlah database relasional! Terima kasih banyak!
Hosam Aly
bukan berarti itu tidak bagus. tetapi saya menduga ini mungkin terlalu baik untuk Anda gunakan mengingat itu untuk sesuatu yang pribadi. juga, lihat sqlite. Saya pikir itu memiliki java binding, tetapi atm tidak dapat menemukannya.
Chii
4

Saya adalah penggemar berat DB4O untuk .Net dan Java .

Performa menjadi jauh lebih baik sejak rilis awal. Model lisensi juga tidak terlalu buruk. Saya terutama menyukai opsi yang tersedia untuk menanyakan objek Anda. Kueri dengan contoh sangat kuat dan mudah digunakan.

Kilhoffer
sumber
4

Kriteria apa yang akan Anda gunakan untuk mengevaluasi ini? Jika Anda belum tahu, Anda tidak perlu memutuskan sekarang. Cobalah untuk menjadikan aplikasi Anda sebagai database-implementasi-agnostik yang Anda bisa - menyediakan pembungkus yang sesuai, objek akses data, dll., Dan buat keputusan ini ketika Anda memiliki semua fakta yang ada dan Anda harus memutuskan.

Jika Anda menggunakan database relasional dan SQL maka cara di atas seharusnya tidak terlalu sulit (menggunakan JDBC dll). Pastikan Anda memiliki banyak pengujian di sekitarnya sehingga saat Anda ingin beralih antar database, Anda dapat menentukan bahwa fungsionalitas aplikasi Anda tetap sama.

Saya mengalami masalah yang sama beberapa waktu lalu. Saya tidak tahu database mana yang harus digunakan, jadi solusi pertama saya menggunakan Derby (atau HSQLDB?), Dan saya kemudian dapat beralih ke HSQLDB (atau Derby? Tidak dapat mengingat solusi mana yang berhasil) setelah saya menentukan di mana Saya memiliki masalah (terkait dengan kinerja) dan solusi mana yang benar-benar cocok untuk saya.

Brian Agnew
sumber
3

Saya telah menggunakan Derby dan saya sangat benci fungsi konversi tipe datanya, terutama fungsi tanggal / waktu. (Jenis Nomor) <--> Konversi Varchar itu menyakitkan.

Jadi jika Anda berencana menggunakan konversi tipe data dalam pernyataan DB Anda mempertimbangkan penggunaan DB tertanam lainnya, saya terlambat mempelajarinya.

Konversi tipe data Versi Derby terbaru

Telcontar
sumber
3

Saya pribadi menyukai HSQLDB, tetapi sebagian besar karena ini adalah yang pertama saya coba.

H2 dikatakan lebih cepat dan menyediakan antarmuka GUI yang lebih bagus (yang umum dan bekerja dengan driver JDBC mana pun).

Setidaknya HSQLDB, H2 dan Derby menyediakan mode server yang bagus untuk pengembangan, karena Anda dapat mengakses DB dengan aplikasi Anda dan beberapa alat secara bersamaan (yang biasanya tidak diizinkan oleh mode tertanam).

Joachim Sauer
sumber
3

Saya kira saya agak terlambat (sangat terlambat ;-)) untuk posting ini, tetapi saya ingin menambahkan Perst, database tertanam berorientasi objek open source untuk Java & .NET. sebagai bahan pertimbangan. Perst adalah database tertanam open source / dual license untuk Java. Distribusi ini kompatibel dengan platform Google Android, dan juga termasuk Perst Lite untuk Java ME. Kami bahkan telah membuat tolok ukur Android dan membuat whitepaper tentang subjek ... Anda dapat melihatnya di sini: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Semua yang terbaik, Chris


sumber
3

Jika saya benar, H2 berasal dari orang yang sama yang menulis HSQLDB. Jauh lebih baik jika Anda mempercayai tolok ukur di situs mereka. Juga, ada beberapa anggapan bahwa komunitas matahari melompat terlalu cepat ke dalam Derby.

smartnut007
sumber
2
Apa pengertian derby dini yang dikhawatirkan dengan DerbyDB? Kematangan?
simgineer
2

Saya menyadari Anda menyebutkan penjelajahan SQL, tetapi semua hal lain dalam pertanyaan Anda membuat saya ingin menyarankan agar Anda juga mempertimbangkan DB4O , yang merupakan DB objek sederhana yang hebat .

Fabian Steeg
sumber
Terima kasih. DB4O terlihat bagus untuk proyek kecil, tetapi saya yakin kemampuan untuk menelusuri dan mengedit data di luar aplikasi sangat penting. Juga apakah mudah untuk menangani versi kelas yang lebih baru? (mis. bidang yang ditambahkan / dihapus)
Hosam Aly
Ya, ini mendukung beberapa pemfaktoran ulang secara otomatis, Anda dapat menemukannya lebih lanjut di sini: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg