サイファー クエリを改善する過程で、開始ノードのルックアップ時間が ~200ms から ~500ms (Web 管理データ ブラウザー ツールから報告) かかることに気付きました。ルックアップは、1 秒を超える最悪のケースで最初の実行に時間がかかります。
これをテストするために使用してきたクエリは、次のように単純です。
START user=node:USERS(id={user_id})
RETURN user.id
グラフは非常に大きく、現在約 2,800 万のユーザー ノードがあります (ノードの種類はこれだけです)。しかし、その場合でも、ルックアップ時間はかなり遅いようです。
Neography を使用してコールド グラフで REST API をクエリするベンチマークでは、最初のヒットについて次のように報告されます。
user system total real
0.060000 0.010000 0.070000 ( 0.959000)
後続のヒットの時間は 200 ミリ秒未満です。
user system total real
0.010000 0.000000 0.010000 ( 0.173000)
次の結果で、neo4j-shell 内で同じクエリをテストしました。
neo4j-sh (?)$ start n=node:USERS(id='xxxxxxxxxxxxxxx') return n;
+--------------------------------------------+
| n |
+--------------------------------------------+
| Node[31120999]{id:"xxxxxxxxxxxxxxx", ...} |
+--------------------------------------------+
1 row
252 ms
neo4j-sh (?)$ start n=node:USERS(id='xxxxxxxxxxxxxxx') return n;
+--------------------------------------------+
| n |
+--------------------------------------------+
| Node[31120999]{id:"xxxxxxxxxxxxxxx", ...} |
+--------------------------------------------+
1 row
34 ms
また、それが役立つ場合:
- Neo バージョンは 1.9.2 です
- グラフは、約 62 GB のディスク容量を必要とします (SSD ではありません)。
- 現在の最大ヒープ サイズは 6GB です。
- マシンには 8GB の RAM が搭載されています。
メモリ マッピング設定は次の値に設定されます (グラフに配列プロパティはありません)。
neostore.nodestore.db.mapped_memory=768M
neostore.relationshipstore.db.mapped_memory=768M
neostore.propertystore.db.mapped_memory=1024M
neostore.propertystore.db.strings.mapped_memory=1024M
neostore.propertystore.db.arrays.mapped_memory=130M
このサイズのグラフのルックアップ時間は正常ですか? どうすれば改善できますか?