Neo4jのJava APIバージョン3.1.0-M08を使用して、Dijkstraアルゴリズムを使用して最短経路探索を構築しました。私は28 GBのディスク上に多くのデータを持っています。ノードは都市を表し、リレーションは接続を表します。通常、都市は非常に多くの接続を持つことになります。私のPathExpander
では、多数のリレーションシップを除外しているため、グラフ全体のわずかな部分しかトラバースされません。それにもかかわらず、検索がひどく実行します。Neo4j Java API:Bad Dijkstraの性能
Relations traversed: 5343
Duration: ~14s
Performance: 373 relations/s
これは、ウォームアップ走行がどのように見えるのホットメソッドプロファイリングものです:
PathExpander
とタイプLong
のCostEvaluator
読み取りプロパティを、Integer
とDouble
。私はgetProperty
への呼び出しをgetAllProperties
に置き換えようとしたが役に立たなかった。
このアプリは、次のJVM引数で起動されます:-Xmx10g -Xms10g
。私はかなり速いSSDを持っており、同じ検索を数回実行して測定する前にキャッシュをあらかじめロードするようにしています。 2回目の実行からは、ディスクのアクティビティは表示されません。これは、横断グラフがRAM内にあることを意味します。
私はGraphDatabaseFactory
をデフォルトの引数で呼び出します。カスタム構成でパフォーマンスが向上する可能性はありますか?テスト目的では16 GBのRAMしか持たないことに注意してください。