Как открыть / закрыть драйверы и сессии в драйвере Neo4J Node.Js?

Я использую 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();

2 ответа

Сеансы легкие и должны открываться по запросу и закрываться после вашего запроса. Вот документация поdriver.session():

Приобретите сеанс для связи с базой данных. Сеанс будет заимствовать соединения из базового пула соединений по мере необходимости, и его следует считать легковесным и одноразовым. Это сопряжено с некоторой ответственностью — убедитесь, что вы всегда вызываете close, когда закончите использование сеанса, и аналогичным образом убедитесь, что вы не закрываете сеанс до того, как закончите его использовать. После закрытия базовое соединение будет выпущено в пул соединений и доступно для использования другими.

Драйвер подключается к Neo4j и обрабатывает пул соединений, который будет использоваться всеми сеансами. Насколько велик этот пул соединений и как долго каждое соединение остается активным, зависит от конфигурации при создании драйвера. См. эту документацию наneo4j.driver()для значений по умолчанию.

Рекомендуется создать один экземпляр драйвера и удерживать его, поскольку создание соединения требует больших затрат и может занять несколько секунд. Если драйвер подключен к Neo4j и его работа не была прервана сетевой ошибкой, это можно проверить с помощьюdriver.verifyConnectivity().

Этот пост о лучших практиках Neo4j содержит дополнительную информацию о подключении и обработке сеансов.

На мой взгляд, вы можете сохранить соединение (драйвер), но сеанс следует открывать и закрывать, как указано в инструкциях. 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

Другие вопросы по тегам