我正在使用 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)