我看到嵌入式Neo4j的性能结果有些不太可能,表面上比预期的慢了几个数量级,所以我认为我"做错了",尽管我没有做任何复杂的操作。
我正在使用最新的Neo4j嵌入式Python绑定(https://github.com/neo4j/python-embedded)。
我正在使用最新的Neo4j嵌入式Python绑定(https://github.com/neo4j/python-embedded)。
from neo4j import GraphDatabase
db = GraphDatabase('/tmp/neo4j')
我已创建 1500 个具有简单属性的虚假产品:
fake_products = [{'name':str(x)} for x in range(0,1500)]
我从中提取出节点,并将其创建为子参考节点的连接部分:
with db.transaction:
products = db.node()
db.reference_node.PRODUCTS(products)
for prod_def in fake_products:
product = db.node(name=prod_def['name'])
product.INSTANCE_OF(products)
现在,我看到的代码几乎与文档中的代码完全相同:
PRODUCTS = db.getNodeById(1)
for x in PRODUCTS.INSTANCE_OF.incoming:
pass
遍历这1500个节点在我的Macbook Pro上需要>0.2秒。什么鬼。 (编辑:我当然运行了这个查询很多次,所以在python绑定中至少不是冷缓存的问题)
我尝试增加到15K,它花费了2秒。我下载了Gremlin并发出了一个等效的查询来调查是neo4j还是python绑定的问题:
g.v(1).in("INSTANCE_OF")
..看起来第一次尝试需要大约2秒钟,而在第二次运行时似乎几乎立即完成。
有任何想法为什么会这么慢?我得到的结果肯定是我的错误之一。