0

我有两个查询:q1 和 q2。我使用下面的代码来查询我的 neo4j 数据库。

driver = GraphDatabase.driver("bolt://localhost:7687",auth= neo4j_user,neo4j_password))
neo4j_session = driver.session()

t = time.time()
neo4j_session.run(q1,q1_parameters) 
print(time.time()-t)

t = time.time()
neo4j_session.run(q2,q2_parameters) 
print(time.time()-t)

q1 和 q2 均由 neo4j 在 Web 界面 ( http://localhost:7474/browser/ ) 中在大约 10 毫秒内执行。上面的代码也在大约 10 毫秒内执行 q1,但 q2 在 1 秒内执行。

为什么即使 web 界面执行速度快 100 倍,neo4j 螺栓连接也不像特定查询(q2)?我相信这不是连接开销,因为 q1 的执行速度几乎与任何一种方式一样快

4

1 回答 1

1

您不应该为每个查询创建新的驱动程序和会话。

Python Bolt 驱动程序的README包含以下“快速示例”,说明如何使用相同的driver和运行 4 个查询(在 3 个写入和 1 个读取事务中) session

from neo4j.v1 import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))

def add_friends(tx, name, friend_name):
    tx.run("MERGE (a:Person {name: $name}) "
           "MERGE (a)-[:KNOWS]->(friend:Person {name: $friend_name})",
           name=name, friend_name=friend_name)

def print_friends(tx, name):
    for record in tx.run("MATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name "
                         "RETURN friend.name ORDER BY friend.name", name=name):
        print(record["friend.name"])

with driver.session() as session:
    session.write_transaction(add_friends, "Arthur", "Guinevere")
    session.write_transaction(add_friends, "Arthur", "Lancelot")
    session.write_transaction(add_friends, "Arthur", "Merlin")
    session.read_transaction(print_friends, "Arthur")
于 2018-05-30T00:10:06.753 回答