如何在Neo4J Node.Js驱动程序中打开/关闭驱动程序和会话?

5
我正在使用 Neo4J Javascript Driver 从我的 Node.Js 应用程序查询数据库。
假设我使用以下结构向 Neo4J 发送多个查询(通过循环)。什么时候需要关闭 session?什么时候需要关闭 driver
我应该在每个循环的结尾这样做吗(如下所示),还是在所有循环完成后这样做?如果是后者,我该怎么做?
还有一个问题——我真的需要关闭 driver 吗?如果我的应用程序持续运行会怎样?如果它因某些错误而退出并重新启动呢?
var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"));

var session = driver.session();

var transactionQueries = ['MATCH ...', 'MATCH ...'];

for (var key in transactionQueries) {
session
.run(transactionQueries[key])
.subscribe({
onNext: function (record) {
  console.log(record.get('name'));
},
onCompleted: function () {
  session.close();
},
onError: function (error) {
  console.log(error);
}
});
}


driver.close();

3
为什么没有人回答这个问题?我也想知道答案 :) - Charl
2个回答

0

会话是轻量级的,应该按需打开并在查询后关闭。这里是关于 driver.session() 的文档:

获取一个与数据库通信的会话。会话将根据需要从底层连接池中借用连接,并且应该被视为轻量级和可丢弃的。 这带来了一些责任-确保您在使用会话完成后始终调用close,同样,请确保在使用完会话之前不要关闭它。一旦关闭,底层连接将被释放到连接池中,并可供其他人使用。

驱动程序连接到Neo4j并处理将由所有会话共享的连接池。此连接池的大小以及每个连接的存活时间取决于创建驱动程序时的配置。有关默认值,请参见 neo4j.driver() 的文档。

建议创建一个驱动程序实例并保持连接,因为创建连接是昂贵的,并且可能需要几秒钟来建立。如果驱动程序已连接到Neo4j,并且没有被网络错误中断,可以通过driver.verifyConnectivity()进行验证。

关于Neo4j最佳实践的帖子提供了有关连接和会话处理的更多信息。


0
在我看来,我认为你可以保留连接(driver),但会话应该像neo4j-javascript-driver上的说明一样打开和关闭。
// Create a session to run Cypher statements in.
// Note: Always make sure to close sessions when you are done using them!
var session = driver.session()

session
  .run('MERGE (james:Person {name : $nameParam}) RETURN james.name AS name', {
    nameParam: 'James'
  })
  .then(result => {
    result.records.forEach(record => {
      console.log(record.get('name'))
    })
  })
  .catch(error => {
    console.log(error)
  })
  .then(() => session.close())

我建议你尝试看看是否有一个OGM可以帮助你更好地编写代码,例如neo4j-node-ogm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接