El protocolo Bolt ( Bolt ) es un protocolo de red orientado a la conexión que se utiliza para la comunicación cliente-servidor en aplicaciones de bases de datos . Funciona sobre una conexión TCP o WebSocket .
Bolt se basa en sentencias, lo que permite al cliente enviar mensajes que contienen una sentencia compuesta por una sola cadena de texto y un conjunto de parámetros tipados. El servidor responde a cada sentencia con un mensaje de resultado y, opcionalmente, con un flujo de registros de resultados.
Historia
El protocolo Bolt se presentó al público por primera vez en noviembre de 2015, durante una entrevista realizada por Duncan Brown y publicada en DZone . [ 1 ] La primera versión del software que implementaba el protocolo se lanzó en diciembre de 2015, como parte de una versión clave de Neo4j Server. [ 2 ] En abril de 2016, se lanzó Neo4j Server 3.0, que contenía la primera implementación de servidor del protocolo, junto con un conjunto de controladores de cliente Bolt. Este lanzamiento recibió atención de varios medios de comunicación importantes. [ 3 ] [ 4 ] [ 5 ]
Control de versiones
El protocolo de red Bolt utiliza la negociación de versiones para garantizar la compatibilidad entre clientes y servidores. Los clientes envían hasta cuatro versiones de protocolo compatibles, codificadas como enteros de 32 bits, priorizando las entradas más antiguas. El servidor responde con la versión compatible más alta o un valor cero si no encuentra ninguna coincidencia, cerrando la conexión. A partir de Bolt 4.0, el protocolo admite versiones principales y secundarias. Bolt 4.3 introdujo versiones secundarias basadas en rangos, lo que permite a los clientes especificar versiones secundarias consecutivas de forma compacta. [ 6 ]
Descripción general del protocolo
El protocolo se publica periódicamente en nuevas versiones que introducen mejoras en el rendimiento, la funcionalidad y la compatibilidad.
Mensajería

Tanto los clientes como los servidores de Bolt envían datos a través de la conexión como una secuencia de mensajes. Cada mensaje tiene un tipo (indicado por un byte de "firma") y puede incluir datos adicionales. El cliente dirige la interacción, y cada mensaje que envía provoca que el servidor envíe uno o más mensajes de respuesta.
La siguiente información corresponde a la versión 5.8 de Bolt y puede que no refleje las últimas novedades del protocolo.
Mensajes del cliente:
Mensajes del servidor:
Codificación de transferencia de mensajes
Cada mensaje se codifica en una secuencia de bytes. Estos bytes se transfieren mediante una codificación binaria segmentada , donde cada segmento va precedido de un entero sin signo de 16 bits en formato big-endian que indica el número de bytes que le siguen inmediatamente. Se utiliza una longitud de 0 para indicar el final del mensaje.
Manejo de fallas
Un cliente puede enviar varios mensajes a un servidor sin esperar primero una respuesta. [ 24 ] El servidor procesa cada mensaje secuencialmente. Sin embargo, dado que puede haber dependencias lógicas entre los mensajes enviados por el cliente, el servidor no evaluará las solicitudes que reciba después de enviar FAILURE en respuesta a un mensaje anterior. En su lugar, enviará un mensaje IGNORED en respuesta a cada mensaje del cliente, hasta que este reconozca el fallo enviando un mensaje RESET.
Esto es similar al manejo de fallos y la recuperación en el protocolo de comunicación de PostgreSQL .
Descripción general de PackStream - versión 1
PackStream es un formato de presentación binario para el intercambio de datos con tipado enriquecido. Proporciona una capa de sintaxis para el protocolo de mensajería Bolt.
Codificación de datos
Bolt admite la codificación para varios tipos de datos diferentes.
Referencias
- ↑ "Presentamos Bolt, el próximo protocolo binario de Neo4j – Parte 1 - Base de datos DZone" . dzone.com . Consultado el 2 de junio de 2017 .
- ↑ "Avanzando a toda velocidad: Ya está aquí la versión Neo4j 3.0 Milestone 1 - Base de datos de grafos Neo4j" . neo4j.com . 4 de diciembre de 2015. Consultado el 2 de junio de 2017 .
- ↑ Martin, Alexander J. (26 de abril de 2016). "Neo4j incorpora un protocolo binario para mejorar su sistema de bases de datos de grafos" . theregister.co.uk . Consultado el 2 de junio de 2017 .
- ↑ "Neo4j 3.0 lanzado con protocolo de comunicación binario y controladores estandarizados" . InfoQ . Consultado el 2 de junio de 2017 .
- ↑ "Neo Technology lanza Neo4j 3.0" . tomsitpro.com . 26 de abril de 2016. Archivado del original el 7 de mayo de 2017. Consultado el 2 de junio de 2017 .
- ↑ "Versioning" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Mensaje de saludo" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de inicio de sesión" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de cierre de sesión" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de telemetría" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de despedida" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Restablecer mensaje" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Ejecutar mensaje" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Descartar mensaje" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de extracción" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Inicio del mensaje" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de confirmación" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de reversión" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de ruta" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de éxito" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de error" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje ignorado" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Mensaje de registro" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Pipelining" . neo4j.com . Consultado el 9 de enero de 2025 .
- ↑ "Tipo de datos nulo" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de dato booleano" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de dato entero" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos flotante" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos Bytes" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos String" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos de lista" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos de diccionario" . neo4j.com . Consultado el 10 de enero de 2025 .
- ↑ "Tipo de datos de estructura" . neo4j.com . Consultado el 10 de enero de 2025 .
Enlaces externos
- Especificación del protocolo Bolt
- protocolos de red