我是否应该总是在Neo4j驱动程序上启动新会话以运行每个查询?有没有像MongoDB一样的自动重新连接功能?

w8rqjzmb  于 2022-10-01  发布在  Go
关注(0)|答案(2)|浏览(170)

我是Neo4j的新手。我正在NodeJS应用程序上使用neo4j-driver from npm

在我介绍了不同类型课程的示例时,例如:

var session = driver.session()

var rxSession = driver.rxSession()

它总是注明:-

// Note: Always make sure to close sessions when you are done using them!

我以前用过MySQL和MongoDB,MySQL需要每个端点都有新的连接,因为当服务器与MySQL服务器断开连接时,没有端点或缓存系统来处理事件。而在MongoDB中,一旦连接建立,MongoDB驱动程序就会管理连接丢失事件,并自行重新连接到DB。

那么,是否应该像对待MongoDB驱动程序或MySQL驱动程序一样来对待 neo4j -驱动程序呢?

或者有什么方法可以使用new 4j-Driver,在其中我可以在同一个会话中执行所有操作,或者比方说每个读操作&特定会话中的每个写操作。由于与服务器保持持续连接,因此将大大缩短服务器的响应时间。

nuypyhwy

nuypyhwy1#

1.neo4j驱动程序自动为您的客户端维护数据库连接。
1.不需要在单独的会话中执行每个查询。单个neo4j驱动程序会话可以执行多个事务。

xoefb8l8

xoefb8l82#

会话的获取成本很低,并且可以在执行查询后关闭。另一方面,只要您需要,驱动程序示例维护的数据库连接就应该一直保持。

以下是大卫·艾伦关于这个主题的一篇非常informative post的文章:
Neo4j中的驱动程序对象包含连接池,而且它们的创建成本通常很高--建立所有必要的连接和连接可能需要几秒钟的时间。因此,您的应用程序应该为每个Neo4j DBMS只创建一个驱动程序示例,并保持该示例并将其用于任何事情。[.]

另一方面,课程费用很低。根据需要创建和关闭任意多个它们。

我通常将其封装在单个函数中,以确保在查询之前打开会话,在查询之后关闭会话:

async function query(query, params, database) {
    const session = this.driver.session({ database });

    try {
        const result = await session.run(query, params);
        const records = result.records.map((r) => r.toObject());

        return records;
    } finally {
        await session.close();
    }
}

相关问题