Как открыть / закрыть драйверы и сессии в драйвере 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