3

Cypher に焦点を当てた非常に興味深いチュートリアルに参加した後、Cypher クエリ言語の宣言性に驚きました。私の意見では、これは Neo4J からデータを取得する非常に自然な方法です。

それまでは、ネイティブ API しか使用していませんでした。それはあまり宣言的ではありませんが、しばらくすると慣れます。複雑な構造はすべて非常に似ており、私の特定のプロジェクトの詳細のみが異なります。

それでも、私には Cypher の方が自然に見えたので、主に Cypher クエリを使用してデータベースとやり取りするアプリケーションの 2 番目のバージョンを構築することを検討しています。しかし、問題が発生しました。

アプリケーションを Cypher に変換する方法は数多くあります。いくつかの可能なクエリを試した後、すべて望ましい結果が得られましたが、最速のクエリでさえ、ネイティブ API よりも約 20 倍遅いようです。

さて、宣言性のためにいくらかのパフォーマンスをあきらめてもかまいませんが、すでにパフォーマンスに苦しんでいるアプリケーションでは、20 倍は少し多すぎます。この問題の回避策はありますか? それとも、ネイティブ API を使用する必要がありますか?

4

1 に答える 1

2

あなたの結論は私にはとてもなじみ深いように聞こえます。Neo4jとSpringDataNeo4jを一緒に使用したときにも、パフォーマンスの問題が発生しました。パフォーマンスが本当に重要な部分では、コアのTraversal APIに切り替えました。これは、現在、平均的なCypherクエリよりも大幅に高速です。これは、クエリの処理がないという事実と、トラバーサルのすべての側面を制御するという事実と多くの関係があります。サイファーは、最も最適な戦略が何であるかを推測することしかできません。(近い)将来的には速度が上がると確信していますが、パフォーマンスが本当に重要な場合は、コアAPIに固執すると思います。

また、javaおよびspringデータneo4jを使用する場合は、単純なマッピングモードよりもはるかに高速な高度なマッピングモード(AspectJ)の使用を検討してください。

于 2013-03-12T12:32:11.637 に答える