10

適切なサイズの Neo4j アプリ (1,000 万のノード/rel) を設計および実装したことのある方からの連絡をお待ちしています。また、モデリングとさまざまな API (vanilla java/groovy Neo4j vs Spring-Data -Neo4j 対 Grails GORM/Neo4j)。

追加の OGM (object-graph-mapping) レイヤーと関連する抽象化を追加することが実際に報われるかどうかに興味がありますか?

ノード+プロパティ、リレーションシップ+プロパティ、トラバーサル、および(たとえば)サイファーを使用してデータをモデル化および保存する「プレーンな」グラフモデリングに固執するのが最善であるという経験はありますか?

私の懸念は、特定の OGM 抽象化をグラフ データベースに「強制」すると、ドメイン モデルの適応/変更における将来の柔軟性および/またはデータのクエリにおける柔軟性に影響することです。

私たちは Grails ショップで、GORM/Neo4J と spring-data-neo4j を試しました。

データセットの主な目的は、多数の人々、その別名、仲間、あらゆる種類の犯罪行為と歴史の間の関係をモデル化し、クエリすることです。50 を超えるメイン ドメイン クラスが存在します。モデル (プロジェクトの初期段階で急速に進化する必要があります) と、クエリの速度と柔軟性に柔軟性がなければなりません。

正直に言うと、(例) POJO や POGO、ちょっとした Groovy マジック、いくつかの単純な手巻きのドメイン オブジェクト <-> ノード/リレーションシップ マッピング コードを使用できる場合に、OGM レイヤーを使用する説得力のある理由を見つけるのに苦労しています。 . 私が知る限り、ノードとトラバーサルとサイファー (別名 KISS) を扱うだけで満足できると思います。しかし、他の人の経験や推奨事項を聞いてとてもうれしく思います。

あなたの時間と考えをありがとう、

TP

4

2 に答える 2

7

私は Grails Neo4j プラグインの作成者なので、偏見があるかもしれません。プラグインを作成した主な理由は、ユースケースの約 80% に対して、Grails ドメイン クラスの使いやすさと、すぐに使用できる強力なスキャフォールディングを Neo4j に適用することでした。特定の要件でトラバーサルなどを必要とする残りの 20% については、Neo4j API を直接 (トラバーサル/サイファー) 使用しており、GORM API は使用していません。

各ドメイン インスタンスがサブリファレンス ノードに接続されているため、Neo4j プラグインの現在のバージョンにはスーパーノードの問題があります。複数の同時要求 (別名スレッド) が新しいドメイン インスタンスを追加すると、ロック例外が発生する可能性があります。サブサブリファレンス アプローチまたはインデックス作成を使用して、これを修正しようとしています。

Cypher は、Neo4j Grails プラグインでも使用できます。

一方、Spring-Data-Neo4j は、マッピングの詳細をより細かく制御できる、より高度なアプローチですが、特定のアノテーションを使用する必要があります。そして、それをスキャフォールディングのように Grails に統合する簡単な方法が見つかりませんでした。

~60k ユーザーと ~10^6 rels を持つ生産的なアプリケーションでプラグインの前身バージョンを使用しています。NDA のため、これ以上の詳細を提供することはできません。

于 2012-05-20T17:12:02.510 に答える