2012-02-08 9 views
13

私は大学時代からRDBMSを使用していましたが、実際にはNoSQLデータベースの基本的な概念でに苦しんでいます...しかし、彼らのコンセプトは本当にクールだと思います。Neo4jとORM(Hibernate)

私は(私が間違っている場合、これらはここに私の質問に遊ぶので、私を修正してください!)次のことを理解してを信じ

  • のNoSQLは、いくつかの正式な仕様ではありません。それは関係ありませんし、SQLこのよう
  • 使用しないデータベースの新しい「品種」の基礎となる概念であり、それぞれのNoSQLシステムが異なる

これらの場合(例えば、MongoDBはJSON中心です)が真であれば、グラフベースのデータベースNeo4jに注目してみましょう。

Neo4jはデータベースだけでなく、Hibernateなどの従来のORMツールの必要性を本質的に置き換えるJava APIも提供しているようです。

だから、私の最後の質問は具体的には、実際にその最後の主張の明確化/確認のための要求です:

  • はそれが真実であることを私のバックエンドは全くのNeo4jベース、私はを必要としないということであれば休止状態(私の通常のORM)ですか?これらの2つのAPIは相互排他的ですか、または両方のAPIを使用する際に何らかの利点がありますか?

ありがとうございます!

+0

No answerで扱われていない小さな修正:NoSQLはデータベースがリレーショナルでないことを意味しません。ほとんどのグラフデータベースはNoSQLと見なされていますが、関係はグラフデータベースの基本的な概念です。 –

答えて

5

AFAIK、Hibernateは、SQLライクなデータベースのみをサポートするオブジェクト/リレーショナルマッピングフレームワークです。だから、Neo4jを使うのであれば、それを使う必要はありません。Neo4jのAPIを使うのではないでしょうか。

しかし、Neo4jとSQLデータベースの両方を使用できないため、Hibernateとneo4j API(プロジェクト内の異なるオブジェクトを保存/照会する可能性が高い)を混在させることはありません。

http://docs.neo4j.org/chunked/snapshot/tutorials-java-embedded-hello-world.htmlのように、Neo4jのウェブサイトに掲載されている基本的な例を確認しましたか?

EDIT:

あなたが正しい、NOSQLは、特定の標準を定義していません。 http://martinfowler.com/articles/nosql-intro.pdf

+4

Hibernate OGMはNoSQLデータベースを使用できます。 – shaILU

+1

となりました。これはNeo4Jも同様にサポートしています:http://in.relation.to/Bloggers/HibernateOGM400Beta4IsOut#H-InitialEmbeddedNeo4jIntegration(まだ実験中ですが) – Sanne

2

@assyliasは、Neo4JのようなグラフDBのORMとしてHibernateを使用することはできないと言いましたが、他の解決策もあります。

まず、Neo4J APIを使用してグラフをトラバースして頂点とエッジを取得し、それがORMではないことを考慮して、取得した頂点やエッジをHibernateなどのカスタムエンティティにマップしません。

これは解決策になるかもしれませんが、他のグラフデータベース(たとえばOrientDBのような)とは違って独自のapiを持つNeo4J用に書かれたコードで終わるでしょう。より柔軟なデータの取得方法とその結果のオブジェクトへのマッピング方法については、基本的に一連のJava APIと抽象レイヤーであるTinkerpopスタック(http://tinkerpop.com/)をグラフデータベースで扱うことをお勧めします。

グラフDBの主な概念よりも抽象化されたBlueprint(http://blueprints.tinkerpop.com)を見始めると、特定のDBベンダーに依存しないコードを書くことができます。オブジェクトを頂点や端にマップするためのフレームワーク(FRM)(http://frames.tinkerpop.com/)、グラフを簡単に照会するための言語であるGremlin(http://gremlin.tinkerpop.com/)を見てください。

+1

+1の青写真とフレーム。フレームはおそらくORMのような休止状態に近いクローズです。しかし、すべてのORMと同様に、フレームでのパフォーマンスについてはヒットします。 – Pridkett

7

Hibernateの代わりに、私はhttp://www.springsource.org/spring-data/neo4jを見てみましょう。これはアノテーション駆動で、Springがサポートしていてとてもうまく動作します。これは何かに作用するだろうか?

8

私は大学以来のRDBMSを使用してきたし、本当にのNoSQLデータベースの基礎となる概念に苦しんでいます...しかし、私は彼らのコンセプトは本当にクールだと思います。

のNeo4jのようなグラフデータベースは、エッジと他の頂点に接続された頂点に関してドメインを発現します。エッジには開始点と終了点が含まれます。各頂点とエッジには、頂点とエッジに関する追加情報を格納するために使用できるキーマップとプロパティのマップがあります。もちろん、これを自分のドメインで拡張することもできますが、簡単に始めることができます。

これらの概念を実際に見るには、Getting Started Guide for Gremlinをお勧めします。 Gremlinは、Neo4jおよび他のいくつかのグラフデータベースで動作するグラフをトラバースするためのドメイン固有の言語です。 Gremlinはグラフデータベースに対して、SQLとリレーショナルデータベースの関係を示します。

グラフを学んでいる間、Gremlinを強く推奨できません。ほんの数分で、Gremlinチュートリアルの作業を開始できます。 Gremlinは小さなグラフを試してすぐにフィードバックを得ることができるREPLを提供します。生産システムでGremlinを使用しなくても、REPLで得られた知識は設計の検証に役立ち、より厳密なユニットテストと開発の前兆となります。

Neo4jのAPIで直接作業したい場合は、traversal framework tutorialが役立ちます。

それは私のバックエンドが全くのNeo4jベース、私は(私のいつものORMである)にHibernateを必要としないということであればというのは本当ですか?

あなたがのNeo4jに新しいしているので、私はあなたが最初のORMがあなたのために行う必要があるかを理解するまで、あなたはORMのを避けることをお勧めします。クエリの結果をあなたのドメインにマッピングする経験が本当にあるか見てみましょう。痛みがORMによって改善できる場合、Peterによって言及されたSpring-Dataフレームワークが有用かもしれません。

おそらく、あなたはおそらく大丈夫でしょう。私はいくつかのプロジェクトに取り組んできましたが、ORMによって導入された偶発的な複雑さが利益をはるかに上回っていました。クエリ結果をドメインにマッピングすることは、システムの最も複雑な部分ではありませんでした。バージョン4ベータのよう

2

は、Hibernate OGMはのNeo4jのサポートを追加しました:

のHibernate OGMは、現在のNeo4j、完全なトランザクションプロパティ グラフデータベースと連携することができます。

グラフデータベースは、相互接続ノード のシステムとしてのデータを表しています。たとえば、ソーシャルネットワークの人々の間に のような情報を格納する必要がある場合は非常に効果的です。 では、プロパティグラフで、グラフの要素にプロパティを追加することもできます。

Hibernate OGMは、エンティティをノードとしてマップします。ここでは、 エンティティの属性がノードのプロパティになります。現時点では、エンティティ へのノードの変換のためのいくつかの 追加のプロパティを追加しますが、我々は 最新のNeo4jのバージョンで追加されたラベルのメカニズムを使用してそれらを交換することを計画しています。

2つのノード間の関係は、 2つのエンティティの間の関連を表します。現在、双方向関連は2人の 関係が必要ですが、我々はのNeo4jは両方向の関係を ナビゲートすることができますので、これを変更しようとしています。

Neo4jとの統合は実験的ですが、すぐに改善する予定です( )。 あなたの意見や感想を教えてください。

http://planet.jboss.org/post/hibernate_ogm_4_0_0_beta4_is_out

それはまだ非常に初期の頃だと、最初のサポートは、時間の経過とともに改善する可能性があります。私はそれをセットアップして試してみようとしています。より良い統合性を持つSpring projectもあることを知っています。

0

あなたがFermaを使用して検討していますか?グラフデータベースに固有のORMです。 Neo4Jを含むすべての主要ブランドをサポートしています。ここにプロジェクトからの説明があります。

フェルマーは、従来のデータベースのオブジェクトリレーショナルモデル(ORM)ライブラリ と同様の役割を担う堅牢なフレームワークです。 FERMA は、多くの場合、オブジェクト・グラフ・モデル(OGM)ライブラリと呼ばれ、そのような頂点またはエッジのようなグラフの要素に Javaオブジェクトにマッピングされています。短い では、スキーマは、Javaインターフェースと 基礎となるグラフと対話するための抽象化のレベルを提供 クラスを使用して定義されることを可能にします。