Болт (сетевой протокол)
Оригинальный автор(ы) | Нео Технология |
---|---|
Стабильная версия | Версия 1
|
Написано в | Различные языки |
Операционная система | Любой |
Платформа | Кросс-платформенный |
Тип | Сетевой протокол |
Лицензия | Creative Commons 3.0 Attribution-ShareAlike |
Веб-сайт | протокол болта |
Протокол Bolt ( Bolt ) — это , ориентированный на соединение сетевой протокол , используемый для клиент-сервер связи в приложениях баз данных . Он работает через TCP- соединение или WebSocket .
Bolt ориентирован на операторы и позволяет клиенту отправлять сообщения, содержащие оператор, состоящий из одной строки и набора типизированных параметров. Сервер отвечает на каждый запрос сообщением о результате и дополнительным потоком записей результатов.
История
[ редактировать ]Протокол Bolt был впервые представлен публике в ноябре 2015 года во время интервью, проведенного Дунканом Брауном и опубликованного на DZone . [1] Первый выпуск программного обеспечения, реализующего этот протокол, состоялся в декабре 2015 года в рамках знакового выпуска Neo4j Server. [2] В апреле 2016 года был выпущен Neo4j Server 3.0, который содержал первую серверную реализацию протокола, сопровождаемую набором клиентских драйверов Bolt. Этот релиз привлек внимание нескольких ведущих СМИ. [3] [4] [5]
Управление версиями
[ редактировать ]Протокол поддерживает явное управление версиями и согласование версий между клиентом и сервером. Существует только одна опубликованная версия протокола: версия 1.
Обзор протокола — версия 1
[ редактировать ]Обмен сообщениями
[ редактировать ]Клиенты и серверы Bolt отправляют данные по соединению в виде последовательности сообщений. Каждое сообщение имеет тип (обозначаемый байтом «подписи») и может включать дополнительные данные. Клиент управляет взаимодействием, и каждое сообщение, отправленное клиентом, вызывает отправку сервером одного или нескольких ответных сообщений.
Сообщения клиента:
Тип | Подпись |
---|---|
ГОРЯЧИЙ | 0x01 [6] |
БЕГАТЬ | 0x10 [7] |
DISCARD_ALL | 0x2F [8] |
PULL_ALL | 0x3F [9] |
ACK_FAILURE | 0x0E [10] |
ПЕРЕЗАГРУЗИТЬ | 0x0F [11] |
Сообщения сервера:
Тип | Подпись |
---|---|
УСПЕХ | 0x70 [12] |
ОТКАЗ | 0x7F [13] |
ИГНОРИРУЕТСЯ | 0x7E [14] |
ЗАПИСЫВАТЬ | 0x71 [15] |
Кодирование передачи сообщений
[ редактировать ]Каждое сообщение кодируется в последовательность байтов. Эти байты передаются с использованием двоичного фрагментированного кодирования , где каждому фрагменту предшествует беззнаковое 16-битное целое число с обратным порядком байтов , обозначающее количество байтов, которые следуют сразу за ним. Длина 0 используется для обозначения конца сообщения.
Обработка сбоев
[ редактировать ]Клиент может отправить несколько сообщений на сервер, не дожидаясь предварительного ответа. [16] Сервер последовательно обрабатывает каждое сообщение. Однако, поскольку между сообщениями, отправленными клиентом, могут существовать логические зависимости, сервер не будет оценивать запросы, которые он получает после отправки FAILURE в ответ на предыдущее сообщение. Вместо этого он будет отправлять сообщение IGNORED в ответ на каждое сообщение клиента, пока клиент не подтвердит сбой, отправив сообщение ACK_FAILURE.
Это похоже на обработку сбоев и восстановление в проводном протоколе PostgreSQL .
Кодирование данных
[ редактировать ]Bolt поддерживает кодирование ряда различных типов данных.
Тип | Описание |
---|---|
Нулевой [17] | Обозначает отсутствие значения. |
логическое значение [18] | Логическое значение true или false. |
Целое число [19] | 64-битное целое число со знаком. |
Плавать [20] | 64-битное число с плавающей запятой. |
Нить [21] | Строка в кодировке UTF-8. |
Список [22] | Упорядоченный сбор значений. |
Карта [23] | Неупорядоченная коллекция значений с ключами. |
Узел [24] | Узел в диаграмме свойств с дополнительными свойствами и метками. |
Отношение [25] | Направленное типизированное соединение между двумя узлами в графе свойств . Каждое отношение может иметь свойства и всегда имеет индивидуальность. |
Путь [26] | Запись направленного обхода графа свойств , состоящего из последовательности из нуля или более сегментов. |
Ссылки
[ редактировать ]- ^ «Представляем Bolt, будущий двоичный протокол Neo4j – Часть 1 – База данных DZone» . dzone.com . Проверено 2 июня 2017 г.
- ^ «Рвно вперед: выпуск Neo4j 3.0 Milestone 1 уже здесь — база данных графов Neo4j» . neo4j.com . 4 декабря 2015 года . Проверено 2 июня 2017 г.
- ^ Мартин, Александр Дж. (26 апреля 2016 г.). «Neo4j использует двоичный протокол для улучшения своей игры с графовыми базами данных» . theregister.co.uk . Проверено 2 июня 2017 г.
- ^ «Neo4j 3.0 выпущен с двоичным протоколом связи и стандартизированными драйверами» . ИнфоQ . Проверено 2 июня 2017 г.
- ^ «Neo Technology выпускает Neo4j 3.0» . tomsitpro.com . 26 апреля 2016. Архивировано из оригинала 7 мая 2017 года . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.
- ^ «Протокол Болта, Версия 1» . www.boltprotocol.org . Проверено 2 июня 2017 г.