16

Java で (本当に) 高性能なメモリ内データベース/ストレージ メカニズムを実装するためのアイデアが必要です。20,000 個以上の Java オブジェクトを格納する範囲で、5 秒程度ごとに更新されます。
私が開いているいくつかのオプション:

純粋な JDBC/データベースの組み合わせ

JDO

JPA/ORM/データベースの組み合わせ

オブジェクト データベース

その他の保管メカニズム

私の最良の選択肢は何ですか?あなたの経験は何ですか?

編集:これらのオブジェクトをクエリできるようにする必要もあります

4

14 に答える 14

12

Prevaylerのようなものを試すことができます(基本的には、シリアル化とバックアップを処理するメモリ内キャッシュで、データが持続し、トランザクション的に安全です)。他にも同様のプロジェクトがあります。大規模なプロジェクトで使用しましたが、安全で非常に高速です。

20,000 個のオブジェクトの同じセット、または少なくとも 5 秒ごとに 20,000 個の新しいオブジェクトではなく、多くの変更がある場合は、変更をキャッシュし、定期的にバッチ モードで変更を書き込む方がよい場合があります (jdbc バッチ更新は、個々の行よりもはるかに高速です)。更新)。各書き込みをトランザクション的にラップする必要があるかどうか、および変更ログの記録が必要か、単に変更を集約する必要があるかによって異なります。

編集: 他の投稿が Prevayler について言及しているように、私はそれが何をするかについてメモを残したいと思いました: . マップを直接変更するのではなく、Prevayler インスタンスに変更のシリアル化可能なレコード (変更命令を含むオブジェクト) を送信することによって変更を行います。Prevayler のバージョンのトランザクションは、シリアライゼーションの変更をディスクに書き込み、障害が発生した場合に最後の完全なバックアップをロードし、それに対して変更を再生できるようにすることです。安全ですが、すべてのデータをロードするのに十分なメモリが必要です。また、かなり古い API であるため、残念ながら汎用インターフェイスはありません。

于 2009-01-13T17:47:47.137 に答える
9

H2を強くお勧めします。これは、元の作成者の1人によって作成されたHSQLDBの一種の「第2世代」バージョンです。 H2を使用すると、実際のP​​ostgreSQLデータベースを必要とせずにDAOレイヤーの単体テストを行うことができます。これはすばらしいことです。

アクティブなネットグループとメーリングリストがあり、作者のThomas Muellerはクエリに非常に敏感です(ハァッ、ちょっとしゃれ)。

于 2009-02-13T17:16:05.000 に答える
7

少し古い質問ですが、最近ではパフォーマンス レベルが 20,000/s のデータベースが非常に多くあります。どのデータベースを選択するかは、作成するデータ構造とクエリの種類によって異なります。また、全体のボリュームにもよります。

約 300,000 回/秒の大量の時系列データで同様の問題が発生し、十分にシンプルな API と適切なパフォーマンスを備えた新しいデータベースを作成することになりました。約 2,000,000 オブジェクトの書き込み/秒を実行でき、ORM を使用しなくなりました。

後にQuestDBに進化しました。

于 2014-06-17T00:28:24.917 に答える
7

それが最速のオプションかどうかはわかりませんが、H2を使用するたびに非常に満足しています。Hypersonic (後に HSQLDB となる) を最初に書いたのと同じ人物によって書かれました。

非常に高速であると言われている別のオプションはPrevaylerです。

于 2009-01-13T17:47:28.310 に答える
4

Chronicle Mapは、組み込み可能な純粋な Java 永続データベースであり、シンプルなjava.util.Mapインターフェースを提供します。単一スレッドからの1 秒あたり約100 万回のクエリ/更新に耐え、一貫した読み取り/書き込みパフォーマンスを実現し、マシンのコア数にほぼ比例してスケーリングします。

以下は、実際の数値を使用した最近のパフォーマンス調査です。

于 2016-07-08T11:45:13.823 に答える
4

以下を試してみてください。Hibernate やその他の ORM フレームワークで非常にうまく機能します

http://hsqldb.org/

于 2009-01-13T17:42:52.313 に答える
3

OrientDBを試してみます。

于 2012-03-07T16:26:00.533 に答える
2

テラコッタもあなたの答えかもしれません. 複数の VM でオブジェクトを共有できるため、負荷を分散できます。

于 2009-02-13T17:10:25.653 に答える
1

hsqldb is quite fast, but it is not ACID transaction-safe. The fastest java-database I know is db4o: benchmarks.

Edit: Please notice that Prevayler is not a database, see http://www.prevayler.org/wiki.jsp?topic=PrevaylerIsNotADatabase. If you're out of RAM, you're out of luck.

于 2009-01-13T18:48:41.820 に答える
1

Berkeley DB for Java is a fast in memory database, extremely useful for simple object graphs.

于 2009-01-13T18:56:54.113 に答える
1

H2 は本当に素晴らしいです。確かに、メモリ、通常のサーバー、およびトランザクションで、すべてを備えています。ただし、パフォーマンスはオブジェクトデータベースと比較できません.Db4oが言及されているのを参照してください.実際、Neodatisを使用するとパフォーマンスが大幅に向上し、Mavenリポジトリですべてが適切にセットアップされました. フェラーリのように頑丈ではありませんが、オラクルのようなトラックではありません。

于 2011-04-21T13:55:43.440 に答える
1

すべてのデータをメモリに保存したい場合は、Prevaylerを参照してください。

私自身は使用したことがありませんが、すべてのデータをメモリに格納できる場合には、リレーショナル データベースを使用するよりもはるかに優れたソリューションのように思えます。

于 2009-01-13T17:47:03.207 に答える
0

CSQL (オープン ソースおよびエンタープライズ バージョンで利用可能)を試すことができます。これは、ディスク ベースのデータベース システムの 30 倍のパフォーマンス向上を提供し、JDBC インターフェイスを提供します。スタンドアロンのメイン メモリ データベースとして、または MySQL、Postgres、Oracle データベースへの透過的なキャッシュとして機能するように構成できます。

于 2009-05-07T06:57:18.467 に答える