Java組み込みデータベースの比較[終了]


99

私は自分の財政を管理するための小さな(Java)アプリケーションを開発するつもりです。組み込みデータベースを使用する必要があると思いますが、この問題に関する経験はありません。利用可能な製品いくつか調べてみましたが、どれが自分に適しているのか判断できません。H2HSQLDBDerby、およびBerkeley DBは良い候補のようですが、それらがどのように互いに比較されるかはまだわかりません。それらを比較して、どちらを使用するかを決定するのを手伝ってくれてありがとう。

私はアプリケーションにHibernateを使用するつもりです(DBMS提供のAPIの使用を推奨しない限り)が、SQLブラウジングツール(スキーマの変更とデータの変更)を使用してデータベースを簡単に編集する機能も必要です。

ありがとうございました。


何をしようとしているのかがわからなければ、この質問に答えることはできません。プロジェクトのサイズ、作成するテーブルの数、レコードの数などに関する情報で質問を更新することをお勧めします
Outlaw Programmer



5
そのような良い質問がナチスによって締め切られるのは不愉快です。確かに、いくつかのあいまいな質問は適切ではありませんが、これは間違いなく適切です。「適切」とは、法的定義ではなく、コミュニティにとって有用であることを意味します。
2017

回答:


60

どちらか

  • HSQLDB -OpenOfficeで使用され、テスト済みで安定しています。使い方は簡単です。db-dataを編集する場合は、ファイルを開いて挿入ステートメントを編集するだけです。

または

  • H2 -サイード(もともとはあまりにも、HSQLDBを設計し、開発者によって)速くなるように

どのパフォーマンスと安定性が必要かによって、どちらを使用するかはあなた次第です。

H2の開発者は、優れたパフォーマンス評価を提示しています。http
//www.h2database.com/html/performance.html


35

私はほとんどすべての組み込みデータベースのニーズにApache Derbyを使用しています。DerbyベースのSunのJava DBを使用することもできますが、Derbyの最新バージョンははるかに新しいです。商用のネイティブデータベースがサポートする多くのオプションをサポートしていますが、はるかに小さく、簡単に埋め込むことができます。問題なく100万以上のレコードを含むデータベーステーブルがいくつかあります。

私はHSQLDBとHypersonicを約3年前に使用していました。当時、いくつかの主要なパフォーマンスの問題があり、それらの問題のため、そこからダービーに切り替えました。Derbyは、Apacheのインキュベーターにいたときでもしっかりしています。


非常に多くのバグがあり、最後の更新が数年前だったという事実がなければ、ダービーは素晴らしいでしょう。
Hooli

2
@Hooliバグを証明できませんが、「...最後の更新は数年前でした」は正しくありません。コメントを投稿したとき(2016年8月)との比較:1年前(2015年10月)未満のリリース、2か月後(2016年10月)、および1年後のリリース(2017年10月-最新))。
スロー

他の誰かが検索でこの件名に遭遇した場合に備えて、このコメントを更新します。Derbyの最新のリリースは2019年3月でした。ここに彼らのサイト情報があります: db.apache.org/derby
JavaJd

@Chris Dail通常のデータベースとして、またはメモリ内で、または一部のキャッシュのために、ダービーを数百万のレコードに使用しましたか?
Shreyans jain '26

30

私は自分のプロジェクトの1つでJava組み込みデータベースを使用する必要があり、各データベースの長所と短所を理解する多くの研究を行いました。私は、人気のある組み込みJavaデータベース(H2、HSQLDB、Derby、ObjectDB、Neo4j、OrientDB)の長所と短所をリストしたブログを書きました。私のH2を選択したのは、自分の要件に最も適していると思ったからです。ブログのリンク:http : //sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html よろしくお願いします!



14

HSQLDBは良い候補です(OpenOfficeで使用されているという事実があるため、一部の人が納得しているかもしれません)が、このような小規模な個人アプリケーションでは、なぜ(古典的なリレーショナルデータベースの代わりに)オブジェクトデータベースを使用しないのですか?

私は自分のプロジェクトの1つでDB4Oを使用しましたが、非常に満足しています。オブジェクト指向なので、Hibernateレイヤー全体を必要とせず、オブジェクトを直接挿入/更新/削除/クエリできます!さらに、スキーマについて心配する必要はありません。オブジェクトを直接操作し、残りはDB4Oが処理します。

この新しいタイプのデータベースに慣れるには少し時間がかかることに同意しますが、DB40チュートリアルをチェックして、DBの操作がいかに簡単かを確認してください。

編集:コメントで述べたように、DB4Oはクラスの新しいバージョンを自動的に処理します。さらに、アプリケーションの外部でデータベースを参照および更新するためのツールは、こちらから入手できます。http//code.google.com/p/db4o-om/


2
ありがとう。DB4Oは、このような小さなプロジェクトに適しているように見えますが、アプリケーションの外部でデータを参照および編集する機能は非常に重要だと思います。また、新しいバージョンのクラスを処理するのは簡単でしょうか?(例:フィールドの追加/削除)
Hosam Aly

私の編集で述べたように、アプリケーションの外部でDBを参照および編集するためのツールが存在します。そして、Fabianが言ったように、クラスの新しいバージョンは自動的にハンドヘルドされます。
ウーカイ2009年

更新していただきありがとうございます。ブラウジングツールを持つことは私にとって非常に重要でしたので、どうもありがとうございました。
Hosam Aly

12

Java DB(SunによるApache Derbyのディストリビューション) JDK 6で出荷さます!

私はジェイソンコーエンのようなことをしたかったので、これがJDKディストリビューションで最も簡単な方法のように見えると思っていました(先週の私の要件は、今週です)。それとも私はそのように怠惰です。


あなたはおそらく正しいです!Java 1.5でも実行する必要があるため、これは私たちのオプションではありません。
Jason Cohen

...私はあなたがそれが最も怠惰なことではなく、最も簡単な方法であることについて正しいと言っていました。:-P
ジェイソンコーエン

Java DBは、JDKのSun / Oracle実装にのみ同梱されています。Javaの標準部分ではありません。
バジルブルク2017

7

アプリケーションの「構成なし」オプションとして、本番環境でHSQLDBを使用します。それは人々が実際のデータベースを設定する手間をかけずに試用することを可能にします。

ただし、通常の使用でサポートされていません。理由はいくつかあります:

  1. データのサイズに比例して遅くなります。
  2. アプリの外部からアクセスするのが難しい(カスタムレポートなど)。
  3. トランザクション/ディスク同期を正しく行うのは難しいため、データが失われる可能性があります。

少なくとも(2)と(3)については、それを回避する方法はありますが、それは困難です。たとえばMySQLをインストールする方がはるかに簡単です。


7

neo4jは:

表ではなくグラフで構造化されたデータを格納する、組み込み型のディスクベースの完全トランザクションJava永続化エンジン

私はまだ試す機会がありませんでしたが、非常に有望に見えます。これはSQLデータベースではないことに注意してください-オブジェクトグラフは永続化されます-そのため、既存のアプリには適切でない場合があります。



5

ほとんどのことはすでに述べられていますが、私はいくつかのペットプロジェクトでHSQL、Derby、Berkely DBを使用したことを付け加えることができます。ですから、正直に言ってもそれほど重要ではないと思います。言及する価値があることの1つは、HSQLがSQLステートメントを含むテキストファイルとして自分自身を保存することです。開発時に、テストとデータのセットアップをすばやく行うことが本当に簡単になります。必要に応じてクイック編集もできます。同様に変更する必要がある場合は、すべてを任意のデータベースに簡単に転送できると思います:)


5

HSQLDBは​​、大規模なアプリケーションで問題を引き起こす可能性がありますが、それほど安定していません。

私が聞いた中で最も優れたもの(ただし、実際の経験ではありません)はberkleyDBです。しかし、それをオープンソース化しない限り、ライセンスのために使用するのに腕と脚がかかります...これを参照してくださいhttp://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html詳細については。

ps。berkleyDBは、ご存じない場合のリレーショナルデータベースではありません。


ああ、私はバークレーがリレーショナルデータベースではないことを知りませんでした!どうもありがとう!
Hosam Aly

それが良くないという意味ではありません。しかし、個人的なことを考えると、おそらくあなたの使用にはあまりにも良いと思います。また、sqliteもご覧ください。Javaバインディングがあると思いますが、atmが見つかりません。
Chii

4

私は.NetとJavaの両方DB4Oの大ファンです。

初期のリリース以降、パフォーマンスは大幅に向上しました。ライセンスモデルも悪くありません。オブジェクトのクエリに使用できるオプションが特に気に入っています。例によるクエリは非常に強力で使い慣れています。


4

これらを評価するためにどのような基準を使用しますか?まだわからない場合は、今すぐ決める必要はありません。アプリケーションをできる限りデータベース実装にとらわれないようにしてみてください-適切なラッパー、データアクセスオブジェクトなどを提供し、すべての事実を伝え、決定する必要があるときにこの決定を下します。

リレーショナルデータベースとSQLを使用している場合、上記は(JDBCなどを使用して)難しくありません。データベースを切り替えたいときに、アプリケーションの機能が同じままであることを確認できるように、周囲に十分なテストがあることを確認してください。

しばらく前に同じ問題に遭遇しました。どのデータベースを使用すればよいかわからなかったため、最初のソリューションではDerby(またはHSQLDB?)を使用しました。 (パフォーマンスに関連する)問題があり、どの解決策が本当に効果的でした。


3

私はDerbyを使用しており、データ型変換関数、特に日付/時刻関数は本当に嫌いです。(数値タイプ)<-> Varchar変換は苦痛です。

したがって、DBステートメントでデータ型変換を使用することを計画している場合は、組み込みDBの使用を検討してください。

最新のDerbyバージョンのデータ型変換


3

個人的にはHSQLDBを好みますが、それは私が最初に試したからです。

H2はより高速で、より良いGUIフロントエンドを提供します(ちなみに、これは汎用であり、JDBCドライバーで動作します)。

少なくともHSQLDB、H2、およびDerbyは、アプリケーションといくつかのツール(通常、組み込みモードでは許可されていない)を使用してDBに同時にアクセスできるため、開発に最適なサーバーモードを提供します。


3

私はこの投稿に少し遅れていると思います(かなり遅れています;-))が、Java&.NET用のオープンソースのオブジェクト指向組み込みデータベースであるPerstを追加したいと思います。あなたの検討のために。Perstは、Java用のオープンソース/デュアルライセンスの組み込みデータベースです。このディストリビューションは、GoogleのAndroidプラットフォームと互換性があり、Perst Lite for Java MEも含まれています。私たちは、Androidベンチマークを構築し、このテーマに関するホワイトペーパーを作成しました...こちらをご覧くださいhttp ://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

最高です、クリス


3

私が正しければ、H2はHSQLDBを書いた人たちと同じです。あなたが彼らのサイトのベンチマークを信頼するならば、それはずっと良いです。また、サンコミュニティがダービーに急速に飛び込んできたという考えもあります。


2
DerbyDBで懸念される時期尚早のダービーの概念は何ですか?成熟?
simgineer

2

SQLブラウジングについて言及したことは承知していますが、質問の他のすべてのことから、素晴らしくシンプルなオブジェクトDBであるDB4Oについても検討することをお勧めします。


ありがとう。DB4Oは、このような小さなプロジェクトに適しているように見えますが、アプリケーションの外部でデータを参照および編集する機能は非常に重要だと思います。また、新しいバージョンのクラスを処理するのは簡単でしょうか?(例:フィールドの追加/削除)
Hosam Aly

はい、いくつかのリファクタリングを自動的にサポートします。詳細については、ibm.com
developerworks / java / library / j
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.