11

Hibernate のようなリレーショナル DB / ORM を使用せずに、Java でオブジェクトを格納および取得する「簡単な」方法を知っていますか?

[オブジェクト グラフの途中で任意のオブジェクトを取得することはできないため、この目的のためにそのままのシリアル化を検討していないことに注意してください。ライセンスが制限されているため、DB4O も検討していません。ありがとう。]

「簡単」の意味: キー/値のペアなどの低レベルの詳細を処理してオブジェクト グラフを再構築する必要がないこと (BerkeleyDB や従来のキャッシュの場合と同様)。同じことが、ドキュメント指向または列指向の DB (CouchDB、HBase、...、さらには Lucene) からオブジェクトを再構築する場合にも当てはまります。

おそらく、私が気付いていない、前述のストレージ システムとオブジェクト モデル (RDBMS の場合の ORM など) との間の統合レイヤーを提供する興味深いプロジェクトが存在します。

本番環境でそれらをうまく使用している、またはリレーショナル DB 以外の永続化戦略を試している人はいますか? RDFストアはどうですか?

更新: 非常に興味深い記事を見つけました:分散型キー値ストアのリスト

4

9 に答える 9

5

Hibernateをお勧めします。これは、データベースを使用するときに開発者を悩ませている醜い詳細のほとんどを処理しながら、長年にわたってデータベースソフトウェアに対して行われた最適化を可能にするためです。

于 2009-01-14T16:17:30.750 に答える
2

NeoDatisは面白そうです。LGPLの下でライセンスされているため、GLP本体ほど制限的ではありません。

彼らの1分間のチュートリアルをチェックして、ニーズに合っているかどうかを確認してください。

于 2009-01-14T16:32:36.510 に答える
2

XStreamをお勧めします。これは POJO を単純に取得し、それらから XML を作成して、ディスクに保存できるようにします。非常に使いやすく、オープンソースでもあります。

于 2009-01-14T16:58:27.440 に答える
1

db4oの支払いを検討する必要があると思います。

他の何かが必要な場合は、タイトルに「MIT スタイルのライセンスで」を追加してください。

于 2009-01-14T17:34:47.443 に答える
1

MattのようにHibernate(または、より一般的にはORマッピング)をお勧めしますが、バックエンドにはRDBMSもあり、あなたが何を意味するのかよくわかりません

...リレーショナルDBを使わずに?...

また、OR マッピングは常に良い考えであるとは限らないため (開発パフォーマンスと実行時パフォーマンス)、アプリケーションについて詳しく知ることも興味深いでしょう。

編集:私はテラコッタについてすぐに学びました.DBをそのツールに置き換えることについては、ここでスタックオーバーフローの良い議論があります. まだ実験的ですが、読む価値があります。

于 2009-01-14T16:22:58.243 に答える
0

Terracottaは、可用性と拡張性に優れた永続的なディスクオブジェクトストアを提供します。この機能だけに使用することも、幅広い機能を使用して完全にクラスター化されたアプリケーションを実装することもできます。

テラコッタ:

  • オブジェクトIDを壊さず、最も自然なプログラミングインターフェイスを提供します
  • シリアル化は必要ありません
  • ほぼすべてのJavaクラス(マップ、ロック、キュー、FutureTask、CyclicBarrierなど)をクラスター化(および永続化)します
  • オブジェクトをメモリ速度でディスクに永続化する
  • オブジェクトのデルタのみを移動し、非常に高いパフォーマンスを提供します

これは、gnipがメモリ内の永続性のためにTerracottaをどのように使用するかについてのケーススタディです-データベースはありません。Gnipは、FacebookやTwitterなどのすべてのイベントを取り込み、正規化された方法で消費者向けにそれらを生成します。彼らの現在の解決策は、50,000メッセージ/秒を超える処理です。

これはOSSであり、SpringやHibernateを含む他の多くのサードパーティフレームワークと高度に統合されています。

于 2009-02-17T08:21:34.960 に答える
0

この質問に関するPrevaylerのコメントをチェックしてください。Prevaylerは、オブジェクトのシリアル化のトランザクションラッパーです。大まかに言って、プレーンJavaでオブジェクトを使用し、SQLなしのJava APIを介してディスクに永続化します。これは、独自のシリアル化を作成するよりも少し便利です。

警告-永続化メカニズムとしてシリアル化を使用すると、クラスを更新するときに保存されたデータが無効になるリスクがあります。ラッパーライブラリを使用している場合でも、シリアル化/逆シリアル化の処理をカスタマイズすることをお勧めします。また、クラスにserialVersionUIDを含めると、クラスがいつ更新されるかというJVMの概念をオーバーライドできます(したがって、保存されたシリアル化されたデータを再ロードできません)。

于 2009-01-14T16:25:55.913 に答える
0

私の質問に対するある種の答えを見つけたと思います。

データを関係、正規化、および結合の観点から常に考えてきた場合、ドキュメント指向のパラダイムの考え方を身につけるのは簡単なことではありません。

CouchDBはその条件に合っているようです。キー値ストアとして機能することもできますが、優れたクエリ機能 (マップ/リデュース、ビューの照合)、同時実行の準備、および言語に依存しない HTTP アクセスにより、私はそれを選択しました。

JSON 構造を正しく定義してオブジェクトにマップする必要があるのは不具合だけですが、Java と Scala のリレーショナル モデルを使用するための簡単な解決策を思い付くと確信しています (競合が離れているため、後でキャッシングについて心配します)。データベース)。Terracotta は依然として有用ですが、RDBMS シナリオの場合ほどではありません。

ご意見をお寄せいただきありがとうございます。

于 2009-03-01T23:01:46.773 に答える