2011-11-22 12 views
12

私のアプリケーションに最適なソリューションは何か混乱しています。これまで見てきたように、neo4jスタンドアロン(RestGraphDatabase)とEmbeddedGraphDatabase(RemoteGraphDatabaseはまだ実稼働用ではありません)のどちらかを選択する必要があります。Neo4jサーバーと埋め込みサーバー

長所REST -

>異なるサービスがのNeo4j DB(サンプルにアクセスできます。私は、第2のサービスノードDとHの原因である種類A、BおよびCのノードのために責任がある一つのサービスを持っていますDノードをAノードに接続することができます)。そのように私はきれいなドメイン構造を持っています。すべてのサービスは、独自のドメインノードに対してのみ責任があります。私は各サービスを更新でき、アプリケーション全体をシャットダウンする必要はありません。

- >私は別の言語(PHP)

短所からのNeo4jのDBにアクセスすることができます。 - パフォーマンスのNeo4jサーバとサービスが同じマシン上にあるので、待ち時間がある(EmbeddedGraphDatabaseとして良いことではありませんそれほど大きくない)。 - 取引なし

私の質問: これはスタンドアロンサーバーと一緒に行くのがよいでしょうか?あるいは、埋め込まれたものを使って、大きなものにサービスを混ぜるべきですか?トランザクションサポートなしで大きな(複雑な)アプリケーションを実行することは可能ですか?

答えて

8

RESTサーバーのパフォーマンスが低下することは間違いありません。ただし、バッチ処理を使用してRESTサーバーとトランザクションを行うことができます。 http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.htmlを参照してください。サーバー側でトランザクションロジックを実行するドメイン固有のサーバープラグインを作成することもできます(http://docs.neo4j.org/chunked/milestone/server-extending.html)。

アーキテクチャで複数のクライアントマシンからデータベースにアクセスできるようにする必要がある場合は、RESTサーバーまたはNeo4j HA(高可用性)のみが選択できます。 HAは、Neo4j Enterpriseライセンスでのみ使用できます。

アプリケーションアーキテクチャは、どのツールが使用されているかを通知します。アプリケーションが別々のサービスとして最も優れていると判断した場合は、基になる永続性モデルをサポートするためだけにそれらを組み合わせないでください。私はあなたのアプリケーションについて何も知らないが、あなたの説明から、私はRESTサーバーを選択し、バッチまたはサーバープラグインを利用するだろう。

+0

REST-API(2つのPythonライブラリでテスト済み)は大きなデータセット(10 GBをインポートしていたので、実際には巨大なデータセットでさえも)で重大なパフォーマンスの問題があると付け加えたいと思います。バッチインポーターを使用しましたが、一定の制限があると、サーバーはほとんどブロックされます。 その問題に関する公開ディスカッションがありますが、私はまだ解決策を知りません。 一般に、すべての重量挙げに埋め込み設定をお勧めします。 – Bouncner

+0

@Bouncner 3年後、このままであれば分かりますか?あなたと同じくらいの時間に、私たちはこのパフォーマンスの問題に気付きましたが、それ以来それを使用していませんでした。 –

6

すべてがあなたのユースケースによって異なります。あなたは既にプロとコンズのいくつかを挙げています。

サーバー用のもう1つのプロはWeb管理者/ビジュアライゼーションです。

これ以上のオプションがあります。高性能のために埋め込まれたgraphdbを持つことができ、いくつかのサービスのみが埋め込まれて実行され、カスタムのドメイン中心のリモート(RESTまたはそれ以外の)APIを使用して、グラフデータベースを他のサービスに公開することができます。

Neo4j Serverを使用して、パフォーマンス重視のサービスのいくつかをServer-PluginsまたはExtensionsというように追加すると、ユースケースに合ったカスタムリモートAPIが公開される可能性があります。

サービスの開発に埋め込みグラフdbを使用し始めます。後で他のサービスに特定のエンドポイントを公開する場合、Neo4jサーバーに切り替えるのは簡単です。

REST-APIにはリクエストごとに1つのトランザクションがありますが、操作が大きい場合はAPIにbatch operationがあります。

関連する問題