Bolt (сетевой протокол)

Болт
Оригинальный автор(ы)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 отправляют данные по соединению в виде последовательности сообщений. Каждое сообщение имеет тип (обозначается байтом «сигнатуры») и может включать дополнительные данные. Клиент управляет взаимодействием, и каждое сообщение, отправленное клиентом, вызовет отправку одного или нескольких ответных сообщений сервером.

Следующая информация относится к версии 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 - версия 1

PackStream — это двоичный формат представления для обмена богато типизированными данными. Он обеспечивает синтаксический слой для протокола обмена сообщениями Bolt.

Кодирование данных

Bolt поддерживает кодирование различных типов данных.

ТипОписание
Ноль [25]Представляет собой отсутствие значения.
Булев [26]Булево значение true или false.
Целое число [27]64-битное целое число со знаком.
Поплавок [28]64-битное число с плавающей точкой.
Байты [29]Массив байтов.
Строка [30]Строка в кодировке UTF-8.
Список [31]Упорядоченный сбор значений.
Словарь [32]Сбор записей «ключ-значение» (порядок не гарантируется).
Структура [33]Составное значение с сигнатурой типа.

Ссылки

  1. ^ "Представляем Bolt, будущий двоичный протокол Neo4j – Часть 1 - База данных DZone". dzone.com . Получено 2 июня 2017 г. .
  2. ^ "Болтинг вперед: релиз Neo4j 3.0 Milestone 1 уже здесь - База данных Neo4j Graph". neo4j.com . 4 декабря 2015 г. . Получено 2 июня 2017 г. .
  3. ^ Мартин, Александр Дж. (26 апреля 2016 г.). «Neo4j использует бинарный протокол для улучшения своей графовой базы данных». theregister.co.uk . Получено 2 июня 2017 г.
  4. ^ "Neo4j 3.0 выпущен с двоичным протоколом связи и стандартизированными драйверами". InfoQ . Получено 2 июня 2017 г. .
  5. ^ "Neo Technology Releases Neo4j 3.0". tomsitpro.com . 26 апреля 2016 г. Архивировано из оригинала 7 мая 2017 г. Получено 2 июня 2017 г.
  6. ^ "Версионный контроль". neo4j.com . Получено 10 января 2025 г. .
  7. ^ "Приветственное сообщение". neo4j.com . Получено 9 января 2025 г. .
  8. ^ "Сообщение при входе". neo4j.com . Получено 9 января 2025 г. .
  9. ^ "Сообщение о выходе из системы". neo4j.com . Получено 9 января 2025 г. .
  10. ^ "Телеметрическое сообщение". neo4j.com . Получено 9 января 2025 г. .
  11. ^ "Прощальное сообщение". neo4j.com . Получено 9 января 2025 г. .
  12. ^ "Сброс сообщения". neo4j.com . Получено 9 января 2025 г. .
  13. ^ "Run message". neo4j.com . Получено 9 января 2025 г. .
  14. ^ "Отменить сообщение". neo4j.com . Получено 9 января 2025 г. .
  15. ^ "Pull message". neo4j.com . Получено 9 января 2025 г. .
  16. ^ "Начать сообщение". neo4j.com . Получено 9 января 2025 г. .
  17. ^ "Сообщение о фиксации". neo4j.com . Получено 9 января 2025 г. .
  18. ^ "Сообщение об откате". neo4j.com . Получено 9 января 2025 г. .
  19. ^ "Маршрутное сообщение". neo4j.com . Получено 9 января 2025 г. .
  20. ^ "Сообщение об успешном выполнении". neo4j.com . Получено 9 января 2025 г. .
  21. ^ "Сообщение об ошибке". neo4j.com . Получено 9 января 2025 г. .
  22. ^ "Игнорированное сообщение". neo4j.com . Получено 9 января 2025 г. .
  23. ^ "Записать сообщение". neo4j.com . Получено 9 января 2025 г. .
  24. ^ "Конвейеризация". neo4j.com . Получено 9 января 2025 г. .
  25. ^ "Тип данных Null". neo4j.com . Получено 10 января 2025 г. .
  26. ^ "Булев тип данных". neo4j.com . Получено 10 января 2025 г. .
  27. ^ "Целочисленный тип данных". neo4j.com . Получено 10 января 2025 г. .
  28. ^ "Тип данных с плавающей точкой". neo4j.com . Получено 10 января 2025 г. .
  29. ^ "Тип данных Bytes". neo4j.com . Получено 10 января 2025 г. .
  30. ^ "Строковый тип данных". neo4j.com . Получено 10 января 2025 г. .
  31. ^ "Тип данных списка". neo4j.com . Получено 10 января 2025 г. .
  32. ^ "Тип данных словаря". neo4j.com . Получено 10 января 2025 г. .
  33. ^ "Тип данных структуры". neo4j.com . Получено 10 января 2025 г. .
  • Спецификация протокола болта
Взято с "https://en.wikipedia.org/w/index.php?title=Bolt_(сетевой_протокол)&oldid=1268548975"