NEO4Jデータベースで「ストレステスト」を行っています。大したことではありませんが、部分的な結果を見ると、このテクノロジがオンライン アプリケーションに適しているかどうか疑問に思います (または、単に Cypher を理解していないだけです)。
最初のテストは、次のようにノードごとに追加することでした
(1° node) -[:NEXT_FRAME]-> () -[:NEXT_FRAME]-> () -[:NEXT_FRAME]-> () -[:NEXT_FRAME]-> ... -[:NEXT_FRAME]-> (last node)
次に、このクエリを使用してパス全体を取得します
START n=node:Frame(node_id="0"), m=node:Frame(node_id="9000")
MATCH p=(n)-[:FRAME_NEXT*]->(m)
RETURN p
ORDER BY m.node_id DESC
LIMIT 1
m.node_id == 2
の場合、クエリには約 100 ミリ秒かかることに注意してください。現在、最大 9000 ノードで、最大 30 秒かかる場合があります。私は専門家ではありませんが、時間がかかりすぎます。9K ノードでこれほど大きな違いが生じるとは思いません。
それで、私は何が欠けていますか?
乾杯(そしてメリークリスマス)
編集:
私はpy2neoを使用しており、クエリのタイミングをこのようにしています:
q_str = """
START n=node:Frame(node_id="0"), m=node:Frame(node_id="%d")
MATCH p=(n)-[:FRAME_NEXT*]->(m)
RETURN p
ORDER BY m.node_id DESC
LIMIT 1
""" % (i,)
print q_str
before = datetime.datetime.now()
query = neo4j.CypherQuery(graph_db, q_str)
record, = query.execute().data
after = datetime.datetime.now()
diff = after - before
diff_ms = diff.total_seconds() *1000
print 'Query took %.2f ms' % (diff_ms)