Bolt(ネットワークプロトコル)
コンテンツへジャンプ目次
| ボルト | |
|---|---|
| 原作者 | Neo4j |
| 安定版リリース | バージョン5.8 |
| で書かれています | 様々な言語 |
| オペレーティングシステム | どれでも |
| プラットフォーム | クロスプラットフォーム |
| タイプ | ネットワークプロトコル |
| ライセンス | クリエイティブ・コモンズ 3.0 表示-継承 |
| ウェブサイト | www.neo4j.com /docs / bolt /current / |
Boltプロトコル(Bolt )は、データベースアプリケーションにおけるクライアント・サーバー通信に使用されるコネクション指向 ネットワークプロトコルです。TCP接続またはWebSocketを介して動作します。
Bolt はステートメント指向であり、クライアントは単一の文字列と型指定されたパラメータのセットからなるステートメントを含むメッセージを送信できます。サーバーは各ステートメントに対して、結果メッセージと、オプションで結果レコードのストリームで応答します。
歴史
[編集]Boltプロトコルは、2015年11月にダンカン・ブラウン氏が実施し、DZoneに掲載されたインタビューの中で初めて公開されました。[ 1 ]このプロトコルを実装したソフトウェアの最初のリリースは、Neo4j Serverのマイルストーンリリースの一部として、2015年12月に行われました。[ 2 ] 2016年4月には、Neo4j Server 3.0がリリースされ、プロトコルの最初のサーバー実装と、Boltクライアントドライバースイートが含まれていました。このリリースは、いくつかの主要メディアから注目を集めました。[ 3 ] [ 4 ] [ 5 ]
バージョン管理
[編集]Boltネットワークプロトコルは、クライアントとサーバー間の互換性を確保するためにバージョンネゴシエーションを使用します。クライアントは、サポートされているプロトコルバージョンを最大4つ送信します。これらのバージョンは32ビット整数としてエンコードされ、古い順に送信されます。サーバーは互換性のある最も高いバージョンを応答し、一致するバージョンが見つからない場合は0を返して接続を切断します。Bolt 4.0以降、このプロトコルはメジャーバージョンとマイナーバージョンをサポートしています。Bolt 4.3では範囲ベースのマイナーバージョン管理が導入され、クライアントは連続するマイナーバージョンを簡潔に指定できるようになりました。[ 6 ]
プロトコルの概要
[編集]プロトコルの新しいバージョンは定期的にリリースされ、パフォーマンス、機能、互換性が向上します
メッセージング
[編集]
Boltクライアントとサーバーはどちらも、接続を介して一連のメッセージとしてデータを送信します。各メッセージにはタイプ(「署名」バイトで示される)があり、追加データが含まれる場合があります。クライアントが相互作用を駆動し、クライアントが送信した各メッセージに対して、サーバーから1つ以上の応答メッセージが送信されます
以下の情報は Bolt バージョン 5.8 に関するものであり、プロトコルの最新の開発を反映していない可能性があります。
クライアントメッセージ:
| タイプ | 署名 |
|---|---|
| HELLO | 0x01 [ 7 ] |
| ログオン | 0x6A [ 8 ] |
| ログオフ | 0x6B [ 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を送信した後は、受信したリクエストを評価しません。代わりに、クライアントがRESETメッセージを送信して失敗を確認するまで、すべてのクライアントメッセージに対してIGNOREDメッセージを返信します。
これは、 PostgreSQLワイヤ プロトコルの障害処理と回復に似ています。
PackStream の概要 - バージョン 1
[編集]PackStreamは、豊富な型を持つデータを交換するためのバイナリ表現形式です。Boltメッセージングプロトコルの構文レイヤーを提供します。
データエンコーディング
[編集]Boltは、さまざまなデータ型のエンコーディングをサポートしています。
| タイプ | 説明 |
|---|---|
| Null [ 25 ] | 値が存在しないことを表します |
| ブール値[ 26 ] | ブール値の true または false。 |
| 整数[ 27 ] | 64ビット符号付き整数 |
| 浮動小数点数[ 28 ] | 64ビット浮動小数点数 |
| バイト[ 29 ] | バイト配列 |
| 文字列[ 30 ] | UTF-8でエンコードされた文字列 |
| リスト[ 31 ] | 順序付けられた値のコレクション。 |
| 辞書[ 32 ] | キーと値のエントリのコレクション (順序は保証されません)。 |
| 構造[ 33 ] | 型シグネチャを持つ複合値。 |
参考文献
[編集]- ^ 「Neo4jの次期バイナリプロトコル、Boltの紹介 - パート1 - DZoneデータベース」 dzone.com 2017年6月2日閲覧
- ^ 「Bolting Forward: The Neo4j 3.0 Milestone 1 Release Is Here - Neo4j Graph Database」 . neo4j.com . 2015年12月4日. 2017年6月2日閲覧。
- ^ Martin, Alexander J. (2016年4月26日). 「Neo4jがバイナリプロトコルを導入し、グラフデータベースの性能を向上」 . theregister.co.uk . 2017年6月2日閲覧。
- ^ 「Neo4j 3.0がバイナリ通信プロトコルと標準化されたドライバーとともにリリース」 InfoQ 2017年6月2日閲覧。
- ^ 「Neo TechnologyがNeo4j 3.0をリリース」。tomsitpro.com 。2016年4月26日。 2017年5月7日時点のオリジナルよりアーカイブ。 2017年6月2日閲覧。
- ^ "バージョン管理" . neo4j.com . 2025年1月10日閲覧。
- ^ 「Helloメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「ログオンメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「ログオフメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「テレメトリメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「さよならメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「リセットメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「メッセージを実行」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「メッセージを破棄する」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「Pull message」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「Begin message」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「コミットメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「ロールバックメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「ルートメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「成功メッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「失敗メッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「無視されたメッセージ」 . neo4j.com . 2025年1月9日閲覧。
- ^ 「メッセージを録音する」 . neo4j.com . 2025年1月9日閲覧。
- ^ "Pipelining" . neo4j.com . 2025年1月9日閲覧。
- ^ 「Nullデータ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「ブールデータ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「整数データ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「Floatデータ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「バイトデータ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「文字列データ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「リストデータ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「辞書データ型」 . neo4j.com . 2025年1月10日閲覧。
- ^ 「構造データ型」 . neo4j.com . 2025年1月10日閲覧。
外部リンク
[編集]| ボルト | |
|---|---|
| 原作者 | Neo4j |
| 安定版リリース | バージョン5.8 |
| で書かれています | 様々な言語 |
| オペレーティングシステム | どれでも |
| プラットフォーム | クロスプラットフォーム |
| タイプ | ネットワークプロトコル |
| ライセンス | クリエイティブ・コモンズ 3.0 表示-継承 |
| ウェブサイト | www.neo4j.com/docs/bolt/current/ |
Boltプロトコル(Bolt )は、データベースアプリケーションにおけるクライアント・サーバー通信に使用されるコネクション指向 ネットワークプロトコルです。TCP接続またはWebSocketを介して動作します。
Bolt はステートメント指向であり、クライアントは単一の文字列と型指定されたパラメータのセットからなるステートメントを含むメッセージを送信できます。サーバーは各ステートメントに対して、結果メッセージと、オプションで結果レコードのストリームで応答します。
歴史
Boltプロトコルは、2015年11月にダンカン・ブラウン氏が行ったインタビューの中で初めて公開され、DZoneに掲載されました。[1]このプロトコルを実装したソフトウェアの最初のリリースは、Neo4j Serverのマイルストーンリリースの一部として、2015年12月に行われました。[2] 2016年4月には、Neo4j Server 3.0がリリースされ、プロトコルの最初のサーバー実装と、Boltクライアントドライバーのスイートが含まれていました。このリリースは、いくつかの主要メディアから注目を集めました。[3] [4] [5]
バージョン管理
Boltネットワークプロトコルは、クライアントとサーバー間の互換性を確保するためにバージョンネゴシエーションを使用します。クライアントは、サポートされているプロトコルバージョンを最大4つ、32ビット整数としてエンコードして送信し、古いエントリを優先します。サーバーは互換性のある最高のバージョンを応答するか、一致するものが見つからない場合はゼロ値を返して接続を閉じます。Bolt 4.0以降、プロトコルはメジャーバージョンとマイナーバージョンをサポートしています。Bolt 4.3では範囲ベースのマイナーバージョン管理が導入され、クライアントは連続するマイナーバージョンをコンパクトに指定できるようになりました。[6]
プロトコルの概要
プロトコルの新しいバージョンは定期的にリリースされ、パフォーマンス、機能、互換性が向上します
メッセージング

Boltクライアントとサーバーはどちらも、接続を介して一連のメッセージとしてデータを送信します。各メッセージにはタイプ(「署名」バイトで示される)があり、追加データが含まれる場合があります。クライアントが相互作用を駆動し、クライアントが送信した各メッセージに対して、サーバーから1つ以上の応答メッセージが送信されます
以下の情報は Bolt バージョン 5.8 に関するものであり、プロトコルの最新の開発を反映していない可能性があります。
クライアントメッセージ:
| タイプ | 署名 |
|---|---|
| HELLO | 0x01 [7] |
| ログオン | 0x6A [8] |
| ログオフ | 0x6B [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を送信した後、受信したリクエストを評価しません。代わりに、クライアントがRESETメッセージを送信して失敗を確認するまで、すべてのクライアントメッセージにIGNOREDメッセージを返信します
これは、 PostgreSQLワイヤ プロトコルの障害処理と回復に似ています。
PackStream の概要 - バージョン 1
PackStreamは、豊富な型を持つデータを交換するためのバイナリ表現形式です。Boltメッセージングプロトコルの構文レイヤーを提供します。
データエンコーディング
Boltは、さまざまなデータ型のエンコーディングをサポートしています。
| タイプ | 説明 |
|---|---|
| Null [25] | 値が存在しないことを表します |
| ブール値[26] | ブール値の true または false。 |
| 整数[27] | 64ビット符号付き整数 |
| 浮動小数点数[28] | 64ビット浮動小数点数 |
| バイト[29] | バイト配列 |
| 文字列[30] | UTF-8でエンコードされた文字列 |
| リスト[31] | 順序付けられた値のコレクション。 |
| 辞書[32] | キーと値のエントリのコレクション (順序は保証されません)。 |
| 構造[33] | 型シグネチャを持つ複合値。 |
参考文献
- ^ 「Neo4jの次期バイナリプロトコル、Boltの紹介 – パート1 - DZoneデータベース」dzone.com . 2017年6月2日閲覧。
- ^ 「Bolting Forward: The Neo4j 3.0 Milestone 1 Release Is Here - Neo4j Graph Database」. neo4j.com . 2015年12月4日. 2017年6月2日閲覧。
- ^ Martin, Alexander J. (2016年4月26日). 「Neo4jがバイナリプロトコルを導入し、グラフデータベースの性能を向上」theregister.co.uk . 2017年6月2日閲覧。
- ^ 「Neo4j 3.0がバイナリ通信プロトコルと標準化されたドライバーとともにリリース」InfoQ 2017年6月2日閲覧。
- ^ “Neo Technology、Neo4j 3.0をリリース”. tomsitpro.com . 2016年4月26日. 2017年5月7日時点のオリジナルよりアーカイブ。 2017年6月2日閲覧。
- ^ “バージョン管理”. neo4j.com . 2025年1月10日閲覧。
- ^ “Hello message”. neo4j.com . 2025年1月9日閲覧。
- ^ 「ログオンメッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ 「ログオフメッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ “テレメトリメッセージ”. neo4j.com . 2025年1月9日閲覧。
- ^ “さよならメッセージ”. neo4j.com . 2025年1月9日閲覧。
- ^ “リセットメッセージ”. neo4j.com . 2025年1月9日閲覧。
- ^ “Run message”. neo4j.com . 2025年1月9日閲覧。
- ^ “メッセージを破棄する”. neo4j.com . 2025年1月9日閲覧。
- ^ “Pull message”. neo4j.com . 2025年1月9日閲覧。
- ^ “Begin message”. neo4j.com . 2025年1月9日閲覧。
- ^ “コミットメッセージ”. neo4j.com . 2025年1月9日閲覧。
- ^ 「ロールバックメッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ “ルートメッセージ”. neo4j.com . 2025年1月9日閲覧。
- ^ 「成功メッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ 「失敗メッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ 「無視されたメッセージ」. neo4j.com . 2025年1月9日閲覧。
- ^ 「メッセージを録音する」. neo4j.com . 2025年1月9日閲覧。
- ^ “Pipelining”. neo4j.com . 2025年1月9日閲覧。
- ^ 「Nullデータ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「ブールデータ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「整数データ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「Floatデータ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「バイトデータ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「文字列データ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「リストデータ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「辞書データ型」. neo4j.com . 2025年1月10日閲覧。
- ^ 「構造データ型」. neo4j.com . 2025年1月10日閲覧。
外部リンク
- Boltプロトコル仕様