Java Gömülü Veritabanları Karşılaştırması [kapalı]


99

Mali durumumu yönetmek için küçük (Java) bir uygulama geliştirmeyi planlıyorum. Gömülü bir veritabanı kullanmam gerektiğine inanıyorum, ancak bu sorunla ilgili deneyimim yok. Mevcut ürünlerden bazılarına bakmaya çalıştım ama hangisinin benim için daha uygun olacağına karar veremiyorum. H2 , HSQLDB , Derby ve Berkeley DB iyi adaylar gibi görünüyor, ancak yine de birbirleriyle nasıl karşılaştırıldıklarını anlamıyorum. Bunları karşılaştırmanıza ve hangisini kullanacağıma karar vermeme yardımcı olduğunuz için teşekkür ederim.

Uygulamam için Hibernate'i kullanmayı planlıyorum (DBMS tarafından sağlanan API'yi kullanmanızı tavsiye etmediğiniz sürece), ancak aynı zamanda bir SQL tarama aracı (şemayı değiştirme ve verileri değiştirme) kullanarak veritabanını kolayca düzenleme yeteneğine sahip olmak istiyorum.

Teşekkür ederim.


Ne yapmaya çalıştığınızı bilmeden bu soruyu cevaplamanız mümkün değil. Soruyu projenizin boyutu, kaç tablonuz olacağını düşündüğünüz, kaç kayıt vb.
İle



5
Naziler tarafından bu kadar güzel soruların kapatılması can sıkıcı. Elbette, bazı belirsiz sorular uygun değil, ama bu kesinlikle uygun. "Uygun" terimi, bazı yasal tanımlardan ziyade topluluk için yararlı anlamına gelir.
2017'de

Yanıtlar:


60

Ya

  • HSQLDB - OpenOffice tarafından kullanılır, test edilmiş ve kararlıdır. Kullanımı kolaydır. Db verilerinizi düzenlemek istiyorsanız, sadece dosyayı açıp insert ifadelerini düzenleyebilirsiniz.

veya

  • H2 - Daha hızlı olduğu söyleniyor (hsqldb'yi de tasarlayan geliştirici tarafından)

Ne kadar performansa ve ne kadar kararlılığa ihtiyacınız olduğuna bağlı olarak hangisini kullanacağınız size kalmış.

H2 geliştiricisi güzel bir performans değerlendirmesi yaptı:
http://www.h2database.com/html/performance.html


35

Kullandığım Apache Derby hemen hemen tüm gömülü veritabanı ihtiyaçlarını için. Sun'un Derby tabanlı Java DB'sini de kullanabilirsiniz, ancak Derby'nin en son sürümü çok daha yenidir. Ticari, yerel veritabanlarının desteklediği ancak çok daha küçük ve yerleştirilmesi daha kolay olan birçok seçeneği destekler. Herhangi bir sorunu olmayan bir milyondan fazla kaydı olan bazı veritabanı tablolarım var.

HSQLDB ve Hypersonic'i yaklaşık 3 yıl önce kullanıyordum. O sırada bazı önemli performans sorunları var ve bu sorunlar nedeniyle ondan Derby'ye geçiyorum. Derby, Apache'nin kuluçka makinesindeyken bile sağlamdı.


Çok fazla hata olduğu ve son güncellemenin birkaç yıl önce olduğu gerçeği olmasaydı Derby harika olurdu.
Hooli

2
@Hooli Hataları doğrulayamıyorum, ancak "... son güncelleme birkaç yıl önceydi" yanlış. Yorumunuzu yayınladığınız zamana göre ( Ağustos 2016 ): bir yıldan daha kısa bir süre önce ( Ekim 2015 ), iki ay sonra ( Ekim 2016 ) bir sürüm ve bir yıldan biraz daha uzun bir süre sonra ( Ekim 2017 - En Son ).
Salata

Bir aramada başka birinin bu konuyla karşılaşması durumunda bu yorumu güncelleme. Derby'nin en son sürümü Mart / 2019'da yayınlandı. İşte site bilgileri: db.apache.org/derby
JavaJd

@Chris Dail Normal veritabanı olarak veya bellekte veya bazı önbellekleme için milyon kayıt için derbi kullandınız mı?
Shreyans jain

30

Projelerimden birinde Java gömülü veritabanını kullanmam gerekiyordu ve her veritabanının artılarını ve eksilerini anlamak için birçok araştırma yaptım. Popüler gömülü java veritabanlarının (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB) artılarını ve eksilerini listeleyen bir blog yazdım, ona bir göz atabilirsiniz. İhtiyaçlarıma en uygun olduğunu düşündüğüm için H2'yi seçtim. Blog bağlantısı : http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Yardımcı olacağını umuyoruz!



14

HSQLDB iyi bir adaydır (OpenOffice'de kullanılması bazılarınızı ikna edebilir), ancak bu kadar küçük bir kişisel uygulama için neden bir nesne veritabanı (klasik bir ilişkisel veritabanı yerine) kullanmayasınız?

Projelerimden birinde DB4O kullandım ve bundan çok memnunum. Nesne odaklı olarak, tüm Hazırda Beklet katmanına ihtiyacınız yoktur ve nesneleri doğrudan ekleyebilir / güncelleyebilir / silebilir / sorgulayabilirsiniz! Dahası, şema için endişelenmenize gerek yok, doğrudan nesnelerle çalışırsınız ve gerisini DB4O halleder!

Bu yeni veri tabanına alışmanın biraz zaman alabileceğini kabul ediyorum, ancak DB ile çalışmanın ne kadar kolay olduğunu görmek için DB40 eğitimine bakın!

DÜZENLEME: Yorumlarda belirtildiği gibi, DB4O sınıfların daha yeni sürümlerini otomatik olarak işler. Ayrıca, veri tabanına uygulama dışında göz atmak ve güncellemek için bir araç burada mevcuttur: http://code.google.com/p/db4o-om/


2
Teşekkürler. DB4O bu kadar küçük bir proje için iyi görünüyor, ancak uygulama dışında verilere göz atma ve verileri düzenleme becerisinin çok önemli olduğuna inanıyorum. Ayrıca, sınıfların daha yeni sürümlerini işlemek kolay olur mu? (örneğin alanlar eklendi / kaldırıldı)
Hosam Aly

Düzenlememde söylediğim gibi, DB'ye uygulama dışında göz atmak ve düzenlemek için bir araç var. Ve Fabian'ın dediği gibi, sınıfların yeni sürümleri otomatik olarak işlenir.
Wookai

Güncelleme için teşekkürler. Bir göz atma aracına sahip olmak benim için çok önemliydi, bu yüzden çok teşekkürler.
Hosam Aly

12

Java DB (Apache Derby Sun'ın dağılımı) şimdi gemiler içinde JDK 6!

Jason Cohen gibi bir şey yapmak istedim ve bunun JDK dağıtımında olmanın en kolay yolu gibi göründüğünü düşünüyordum (geçen hafta şu anda uygulamam için bir gereklilik). Ya da belki bu şekilde tembelim.


Muhtemelen haklısın! Java 1.5 altında da çalıştırma zorunluluğumuz var, bu yüzden bu bizim için bir seçenek değil.
Jason Cohen

... Tembel olma konusunda doğru değil, en kolay yol olduğu konusunda haklı olduğunu söyledim. :-P
Jason Cohen

Java DB, yalnızca JDK'nın Sun / Oracle uygulamalarıyla birlikte gelir. Java'nın standart bir parçası değil.
Basil Bourque

7

HSQLDB'yi üretimde uygulamamız için "konfigürasyonsuz" bir seçenek olarak kullanıyoruz. İnsanların gerçek bir veritabanı kurma zahmetine girmeden deneme yapmalarına olanak tanır.

Ancak do not normal kullanım için bunu destekleyecek. Sebepler birkaç:

  1. Verinin boyutuyla orantılı olarak yavaşlar.
  2. Uygulamamızın dışından erişmek zor (ör. Özel raporlar için).
  3. İşlemler / disk senkronizasyonunun doğru yapılması zordur, bu nedenle verileri kaybetmek kolaydır.

En azından (2) ve (3) için, etrafından dolaşmanın yolları var ama bu zor; örneğin MySQL'i kurmak çok daha kolay.


7

neo4j :

Tablolar yerine grafikler halinde yapılandırılmış verileri depolayan gömülü, disk tabanlı, tamamen işlemsel bir Java kalıcılık motoru

Henüz deneme şansım olmadı - ama çok umut verici görünüyor. Bunun bir SQL veritabanı olmadığını unutmayın - nesne grafiğiniz sizin için kalıcıdır - bu nedenle mevcut uygulamanız için uygun olmayabilir.



5

Çoğu şey zaten söylendi, ancak HSQL, Derby ve Berkely DB'yi birkaç evcil hayvan projemde kullandığımı ve hepsinin gayet iyi çalıştığını ekleyebilirim. Bu yüzden dürüst olmanın gerçekten önemli olduğunu düşünmüyorum. Bahsetmeye değer bir şey, HSQL'in kendisini oldukça iyi olan SQL ifadeleri ile bir metin dosyası olarak kaydetmesidir. Hızla test yapmak ve verileri ayarlamak için geliştirme yaptığınız zamanlar için gerçekten kolaylaştırır. Gerekirse hızlı düzenlemeler de yapabilir. Değiştirmeniz gerekirse, hepsini herhangi bir veritabanına kolayca aktarabileceğinizi tahmin edin :)


5

HSQLDB, büyük uygulamalar için sorunlara neden olabilir, o kadar da kararlı değildir.

Duyduğum en iyi şey (ilk elden deneyim değil) berkleyDB. Ancak, açık kaynak kullanmadığınız sürece, lisans nedeniyle kullanmanız için size bir kol ve bir bacak maliyeti olacaktır ... bu http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html adresine bakın detaylar için.

ps. berkleyDB, bilmediğiniz bir durumda ilişkisel bir veritabanı değildir.


Oh, Berkeley'in ilişkisel bir veritabanı olmadığını bilmiyordum! Çok teşekkürler!
Hosam Aly

iyi olmadığı anlamına gelmez. ama kişisel bir şey için düşünüldüğünde muhtemelen kullanımınız için çok iyi olduğundan şüpheleniyorum. ayrıca, sqlite'a bir göz atın. Sanırım java bağlamaları var, ancak atm bulamıyorum.
Chii

4

Hem .Net hem de Java için DB4O'nun büyük bir hayranıyım .

İlk sürümlerden bu yana performans çok daha iyi hale geldi. Lisanslama modeli de çok kötü değil. Özellikle nesnelerinizi sorgulamak için mevcut seçenekleri seviyorum. Örnek olarak sorgulama çok güçlüdür ve alışması kolaydır.


4

Bunları değerlendirmek için hangi kriterleri kullanacaksınız? Henüz bilmiyorsanız, şu anda karar vermenize gerek yok. Uygulamanızı mümkün olduğunca veritabanı uygulamasından bağımsız hale getirmeye çalışın - uygun sarmalayıcıları, veri erişim nesnelerini vb. Sağlayın ve bu kararı, elinizde olan tüm gerçeklere sahip olduğunuzda ve karar vermeniz gerektiğinde verin.

İlişkisel veritabanları ve SQL kullanıyorsanız, yukarıdakiler çok zor olmamalıdır (JDBC vb. Kullanarak). Veritabanları arasında geçiş yapmak istediğinizde, uygulamanızın işlevselliğinin aynı kalacağını belirleyebilmeniz için çok sayıda çevreleyen testiniz olduğundan emin olun.

Bir süre önce aynı sorunla karşılaştım. Hangi veritabanına gideceğimi bilmiyordum, bu yüzden ilk çözümüm Derby'yi (veya HSQLDB?) Kullandı ve daha sonra nerede olduğunu belirledikten sonra HSQLDB'ye (veya Derby? Hangi çözümün işe yaradığını hatırlayamıyorum) geçebildim Sorunlarım vardı (performansla ilgili) ve hangi çözüm benim için gerçekten işe yarayacaktı.


3

Derby'yi kullandım ve veri türü dönüştürme işlevlerinden, özellikle tarih / saat işlevlerinden gerçekten nefret ediyorum. (Sayı Türü) <--> Varchar dönüşümü bir acıdır.

Öyleyse, DB ifadelerinizde veri türü dönüşümleri kullanmayı planlıyorsanız, gömülü DB kullanımını düşünün, çok geç öğreniyorum.

En Son Derby Sürümü veri türü dönüşümleri


3

Şahsen HSQLDB'yi tercih ediyorum, ancak daha çok denediğim için.

H2'nin daha hızlı olduğu ve daha hoş bir GUI ön ucu sağladığı söyleniyor (bu genel ve bu arada herhangi bir JDBC sürücüsüyle çalışıyor).

En azından HSQLDB, H2 ve Derby, geliştirme için harika olan sunucu modları sağlar, çünkü DB'ye uygulamanızla ve bazı araçlarla aynı anda erişebilirsiniz (gömülü mod genellikle izin vermez).


3

Sanırım bu gönderiye biraz geç kaldım (çok geç ;-)), ancak Java ve .NET için açık kaynaklı, nesne yönelimli gömülü bir veritabanı olan Perst'i eklemek istiyorum. değerlendirmeniz için. Perst, Java için açık kaynaklı / çift lisanslı gömülü bir veritabanıdır. Dağıtım, Google'ın Android platformuyla uyumludur ve ayrıca Java ME için Perst Lite'ı içerir. Hatta bir Android karşılaştırması oluşturduk ve konuyla ilgili bir whitepaper hazırladık ... buraya bir göz atabilirsiniz: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

En iyi dileklerimle Chris


3

Eğer haklıysam H2, HSQLDB'yi yazan adamlardan. Sitelerindeki ölçütlere güvenirseniz çok daha iyi. Ayrıca, güneş topluluğunun Derby'ye çok hızlı sıçradığına dair bazı görüşler var.


2
DerbyDB ile ilgili erken derbi fikirleri nelerdir? Olgunluk?
simgineer

2

SQL taramasından bahsettiğinizi fark ettim, ancak sorunuzdaki diğer her şey, harika, basit bir nesne DB'si olan DB4O'yu da düşünmenizi önermek istememe neden oluyor .


Teşekkürler. DB4O bu kadar küçük bir proje için iyi görünüyor, ancak uygulama dışında verilere göz atma ve verileri düzenleme becerisinin çok önemli olduğuna inanıyorum. Ayrıca, sınıfların daha yeni sürümlerini işlemek kolay olur mu? (ör. alanlar eklendi / kaldırıldı)
Hosam Aly

Evet, bazı yeniden düzenlemeleri otomatik olarak destekler, bununla ilgili daha fazla bilgiyi burada bulabilirsiniz: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.