Оригинальный автор(ы) | Neo4j |
---|---|
Стабильный релиз | Версия 5.8 |
Написано в | Разные языки |
Операционная система | Любой |
Платформа | Кроссплатформенный |
Тип | Сетевой протокол |
Лицензия | Creative Commons 3.0 Attribution-ShareAlike |
Веб-сайт | www.neo4j.com/docs/bolt/current/ |
Протокол Bolt ( Bolt ) — сетевой протокол, ориентированный на соединение, используемый для клиент-серверной связи в приложениях баз данных . Он работает через TCP -соединение или WebSocket .
Bolt ориентирован на операторы, позволяя клиенту отправлять сообщения, содержащие оператор, состоящий из одной строки и набора типизированных параметров. Сервер отвечает на каждый оператор сообщением результата и необязательным потоком записей результата.
Протокол Bolt был впервые представлен общественности в ноябре 2015 года во время интервью, проведенного Дунканом Брауном и опубликованного на DZone. [1] Первый выпуск программного обеспечения, реализующего протокол, состоялся в декабре 2015 года в рамках знаменательного выпуска Neo4j Server. [2] В апреле 2016 года был выпущен Neo4j Server 3.0, содержащий первую серверную реализацию протокола, сопровождаемую набором клиентских драйверов Bolt. Этот выпуск привлек внимание нескольких основных СМИ. [3] [4] [5]
Сетевой протокол Bolt использует согласование версий для обеспечения совместимости между клиентами и серверами. Клиенты отправляют до четырех поддерживаемых версий протокола, закодированных как 32-битные целые числа, отдавая приоритет более ранним записям. Сервер отвечает наивысшей совместимой версией или нулевым значением, если совпадений не найдено, закрывая соединение. Начиная с Bolt 4.0, протокол поддерживает основные и второстепенные версии. Bolt 4.3 представил второстепенные версии на основе диапазона, что позволяет клиентам компактно указывать последовательные второстепенные версии. [6]
Регулярно выпускаются новые версии протокола, в которых улучшаются производительность, функциональность и совместимость.
Клиенты и серверы Bolt отправляют данные по соединению в виде последовательности сообщений. Каждое сообщение имеет тип (обозначается байтом «сигнатуры») и может включать дополнительные данные. Клиент управляет взаимодействием, и каждое сообщение, отправленное клиентом, вызовет отправку одного или нескольких ответных сообщений сервером.
Следующая информация относится к версии Bolt 5.8 и может не отражать последние разработки в протоколе.
Сообщения клиентов:
Тип | Подпись |
---|---|
ПРИВЕТ | 0x01 [7] |
ВХОД | 0x6A [8] |
ВЫЙТИ | 0x6Б [9] |
ТЕЛЕМЕТРИЯ | 0x54 [10] |
ДО СВИДАНИЯ | 0x02 [11] |
ПЕРЕЗАГРУЗИТЬ | 0x0F [12] |
БЕГАТЬ | 0x10 [13] |
ОТКАЗАТЬСЯ | 0x2F [14] |
ТЯНУТЬ | 0x3F [15] |
НАЧИНАТЬ | 0x11 [16] |
СОВЕРШИТЬ | 0x12 [17] |
ОТКАТ | 0x13 [18] |
МАРШРУТ | 0x66 [19] |
Сообщения сервера:
Тип | Подпись |
---|---|
УСПЕХ | 0x70 [20] |
ОТКАЗ | 0x7F [21] |
ИГНОРИРУЕТСЯ | 0x7E [22] |
ЗАПИСЫВАТЬ | 0x71 [23] |
Каждое сообщение кодируется в последовательность байтов. Эти байты передаются с использованием двоичного кодирования фрагментов , где каждому фрагменту предшествует беззнаковое 16-битное целое число с обратным порядком байтов, обозначающее количество байтов, которые следуют сразу за ним. Длина 0 используется для обозначения конца сообщения.
Клиент может отправлять несколько сообщений на сервер, не дожидаясь ответа. [24] Сервер обрабатывает каждое сообщение последовательно. Однако, поскольку между сообщениями, отправленными клиентом, могут быть логические зависимости, сервер не будет оценивать запросы, которые он получает после отправки FAILURE в ответ на предыдущее сообщение. Вместо этого он будет отправлять сообщение IGNORED в ответ на каждое сообщение клиента, пока клиент не подтвердит сбой, отправив сообщение RESET.
Это похоже на обработку сбоев и восстановление в сетевом протоколе PostgreSQL .
PackStream — это двоичный формат представления для обмена богато типизированными данными. Он обеспечивает синтаксический слой для протокола обмена сообщениями Bolt.
Bolt поддерживает кодирование различных типов данных.
Тип | Описание |
---|---|
Ноль [25] | Представляет собой отсутствие значения. |
Булев [26] | Булево значение true или false. |
Целое число [27] | 64-битное целое число со знаком. |
Поплавок [28] | 64-битное число с плавающей точкой. |
Байты [29] | Массив байтов. |
Строка [30] | Строка в кодировке UTF-8. |
Список [31] | Упорядоченный сбор значений. |
Словарь [32] | Сбор записей «ключ-значение» (порядок не гарантируется). |
Структура [33] | Составное значение с сигнатурой типа. |