以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
〔A〕第1実施形態の一例
〔A−1〕システム構成例
図1は、第1実施形態の一例としてのデータ管理システム100の概要を示す図である。
データ管理システム100は、複数(図1に示す例では、4つ)のデータ管理装置1−1〜1−4を備える。
各データ管理装置1−1〜1−4は、ブロックチェーン#1及び#2を分散して管理及び記憶する。なお、ブロックチェーン#1は主ブロックチェーンと称され、ブロックチェーン#2は副ブロックチェーンと称されてもよい。
以下、複数のデータ管理装置1−1〜1−4のうち任意のデータ管理装置を示す場合には、符号「1」を使用する。
主ブロックチェーン201には、新規に書き込まれるデータが記録される。副ブロックチェーン202には、主ブロックチェーン201に書き込まれているデータの更新後のデータが記録される。また、副ブロックチェーン202には、副ブロックチェーン202に書き込まれている更新後のデータを再度更新する場合に、再更新後のデータが記録される。
図2は、図1に示したデータ管理システム100の構成を模式的に示すブロック図である。
データ管理システム100は、Database(DB)のApplication Programming Interface(API)にマッピングして実装される。図2に示すように、データ管理システム100は、アプリケーション101,リード/ライト/リライトAPI102,リード/ライト/リライト制御部103及びブロックチェーンサブシステム104として機能する。
アプリケーションプログラム101は、DBを使用するアプリケーションである。
リード/ライト/リライトAPI102は、DBにアクセスするためのAPIであり、DBに対する読み込み,書き込み及び書き換え(別言すれば、再書き込み)を行なう。
リード/ライト/リライト制御部103は、DBの書き込み,読み込み及び書き換えの際のメモリ制御や、読み込みの際のブロックチェーンサブシステム104への検索依頼、リード/ライト/リライトAPI102からのパラメタの受け渡しを行なう。
ブロックチェーンサブシステム104は、主ブロックチェーン201及び副ブロックチェーン202に対する読み込み,書き込み及び書き換えの制御と、ブロックチェーンのコンセンサスロジック1042(図6〜図8等を用いて後述)とを実行する。そして、ブロックチェーンサブシステム104は、ブロックチェーンのファイナリティ処理を行なう。
アプリケーションプログラム101は、リード/ライト/リライトAPI102を呼び出し、リード/ライト/リライト制御部103に処理を依頼する。リード/ライト/リライト制御部103は、ブロックチェーンサブシステム104にデータの操作を依頼する。ブロックチェーンサブシステム104は、必要に応じて、主ブロックチェーン201又は副ブロックチェーン202に対してデータの書き込みや読み出しを行なう。
アプリケーション101,リード/ライト/リライトAPI102,リード/ライト/リライト制御部103,ブロックチェーンサブシステム104としての機能は、各データ管理装置1−1〜1−4のOSにおけるDBサブシステムとして実装される。なお、OSは、Operating Systemの略称である。
図3は、図1に示したデータ管理装置1のハードウェア構成を模式的に示すブロック図である。
データ管理装置1は、Central Processing Unit(CPU)11,メモリ12,表示制御部13,記憶装置14,入力Interface(I/F)15,読み書き処理部16及び通信I/F17を備える。
メモリ12は、例示的に、Read Only Memory(ROM)及びRandom Access Memory(RAM)を含む記憶装置である。メモリ12のROMには、Basic Input/Output System(BIOS)等のプログラムが書き込まれてよい。メモリ12のソフトウェアプログラムは、CPU11に適宜に読み込まれて実行されてよい。また、メモリ12のRAMは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
表示制御部13は、表示装置130と接続され、表示装置130を制御する。表示装置130は、液晶ディスプレイやOrganic Light-Emitting Diode(OLED)ディスプレイ,Cathode Ray Tube(CRT),電子ペーパーディスプレイ等であり、オペレータ等に対する各種情報を表示する。表示装置130は、入力装置と組み合わされたものでもよく、例えば、タッチパネルでもよい。
記憶装置14は、例示的に、データを読み書き可能に記憶する装置であり、例えば、Hard Disk Drive(HDD)やSolid State Drive(SSD),Storage Class Memory(SCM)が用いられてよい。各データ管理装置1−1〜1−4の記憶装置14は、主ブロックチェーン201及び副ブロックチェーン202の少なくとも一部のデータをそれぞれ記憶する。各データ管理装置1−1〜1−4の記憶装置14が記憶するデータが繋ぎ合わされることにより、主ブロックチェーン201及び副ブロックチェーン202の全体のデータが作成されてよい。
入力I/F15は、マウス151やキーボード152等の入力装置と接続され、マウス151やキーボード152等の入力装置を制御する。マウス151やキーボード152は、入力装置の一例であり、これらの入力装置を介して、オペレータが各種の入力操作を行なう。
読み書き処理部16は、記録媒体160が装着可能に構成される。読み書き処理部16は、記録媒体160が装着された状態において、記録媒体160に記録されている情報を読み取り可能に構成される。本例では、記録媒体160は、可搬性を有する。例えば、記録媒体160は、フレキシブルディスク、光ディスク、磁気ディスク、光磁気ディスク、又は、半導体メモリ等である。
通信I/F17は、外部装置との通信を可能にするためのインタフェースである。各データ管理装置1−1〜1−4は、通信I/F17を介して、他のデータ管理装置1−1〜1−4と通信を行なう。
図4は、図2に示したデータ管理装置1の機能構成を模式的に示すブロック図である。
CPU11は、種々の制御や演算を行なう処理装置であり、メモリ12に格納されたOSやプログラムを実行することにより、種々の機能を実現する。すなわち、データ管理装置1のCPU11は、図4に示すように、読み出し処理部111,書き込み処理部112,書き換え処理部113,第1判定部114,第2判定部115及び第3判定部116として機能する。
なお、これらの読み出し処理部111,書き込み処理部112,書き換え処理部113,第1判定部114,第2判定部115及び第3判定部116としての機能を実現するためのプログラムは、例えば前述した記録媒体160に記録された形態で提供される。そして、コンピュータは読み書き処理部16を介してその記録媒体160からプログラム(「データ管理プログラム」と称してもよい。)を読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、そのプログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、その記憶装置から通信経路を介してコンピュータに提供してもよい。
読み出し処理部111,書き込み処理部112,書き換え処理部113,第1判定部114,第2判定部115及び第3判定部116としての機能を実現する際には、内部記憶装置に格納されたプログラムがコンピュータのマイクロプロセッサによって実行される。このとき、記録媒体160に記録されたプログラムをコンピュータが読み取って実行してもよい。なお、本実施形態において、内部記憶装置はメモリ12であり、マイクロプロセッサはCPU11である。
CPU11は、例示的に、データ管理装置1全体の動作を制御する。データ管理装置1全体の動作を制御するための装置は、CPU11に限定されず、例えば、MPUやDSP,ASIC,PLD,FPGAのいずれか1つであってもよい。また、データ管理装置1全体の動作を制御するための装置は、CPU,MPU,DSP,ASIC,PLD及びFPGAのうちの2種類以上の組み合わせであってもよい。なお、MPUはMicro Processing Unitの略称であり、DSPはDigital Signal Processorの略称であり、ASICはApplication Specific Integrated Circuitの略称である。また、PLDはProgrammable Logic Deviceの略称であり、FPGAはField Programmable Gate Arrayの略称である。
読み出し処理部111は、主ブロックチェーン201,副ブロックチェーン202又はライトキャッシュ1031(図6〜図8等を用いて後述;「キャッシュメモリ」と称してもよい。)からデータを読み出す。なお、読み出し処理部111における機能の詳細は、図7等を用いて後述する。
書き込み処理部112は、ライトキャッシュ1031を介して、主ブロックチェーン201に対して、データを書き込む。なお、書き込み処理部112における機能の詳細は、図6及び図8等を用いて後述する。
書き換え処理部113は、ライトキャッシュ1031を介して、主ブロックチェーン201又は副ブロックチェーン202において記録されているデータについての書き換え後のデータを副ブロックチェーン202に書き込む。なお、書き込み処理部112における機能の詳細は、図8等を用いて後述する。
第1判定部114は、読み出し対象のデータが副ブロックチェーン202に記録されているかを判定する。なお、第1判定部114における機能の詳細は、図7等を用いて後述する。
第2判定部115は、読み出し対象のデータが主ブロックチェーン201に記録されているかを判定する。なお、第2判定部115における機能の詳細は、図7等を用いて後述する。
第3判定部116は、読み出し対象のデータがライトキャッシュ1031に格納されているかを判定する。なお、第3判定部116における機能の詳細は、図7等を用いて後述する。
図5の(1)は、図3に示したデータ管理装置1における書き込み処理の概要を説明するブロック図である。
図5の(1)に示すように、ブロックチェーンにデータを書き込む際に、ライトAPI1021は、アプリケーションプログラム101(図5の(1)には不図示)から呼び出される。ライトAPI1021は、リード/ライト/リライト制御部103におけるライトキャッシュ1031(図6等を用いて後述)を経由して、ブロックチェーンサブシステム104に書き込み依頼をする。
ブロックチェーンサブシステム104は、コンセンサスアルゴリズムにより書き込みがコミットされファイナライズが確立することで、主ブロックチェーン201にデータを書き込む(符号A1参照)。
図5の(2)は、図3に示したデータ管理装置1における読み込み処理の概要を説明するブロック図である。
データの読み込み(別言すれば、データの参照)の際は、アプリケーションプログラム101(図5の(2)には不図示)は、リードAPI1022を介して、リード/ライト/リライト制御部103に対して、データの検索を依頼する。
検索対象のデータが副ブロックチェーン202にある場合には、リード/ライト/リライト制御部103は、当該データを副ブロックチェーン202から読み込んでリードキャッシュ1034(図7等を用いて後述)に書き込む。そして、リード/ライト/リライト制御部103は、リードキャッシュ1034にコミット済みのフラグを立てる(符号A2参照)。
また、検索対象のデータが主ブロックチェーン201にある場合には、リード/ライト/リライト制御部103は、当該データを主ブロックチェーン201から読み込んでリードキャッシュ1034に書き込む。そして、リード/ライト/リライト制御部103は、リードキャッシュ1034にコミット済みのフラグを立てる(符号A3参照)。
更に、検索対象のデータが書き込み直後で未コミットある場合には、リード/ライト/リライト制御部103は、当該データをライトキャッシュ1031(図7等を用いて後述)から読み込んでリードキャッシュ1034に書き込む。そして、リード/ライト/リライト制御部103は、リードキャッシュ1034に未コミットのフラグを立てる(符号A4参照)。
そして、リード/ライト/リライト制御部103は、コミットフラグ1032(図6〜8等を用いて後述)と共に、リードAPI1022に対してリードの応答を返す。
図5の(3)は、図3に示したデータ管理装置1における書き換え処理の概要を説明するブロック図である。
データ書き換え(別言すれば、データ更新)の際は、アプリケーションプログラム101(図5の(3)には不図示)は、リライトAPI1023を介して、リード/ライト/リライト制御部103にデータの検索を依頼する。検索されたデータが副ブロックチェーン202に書き込み済みの場合には、リード/ライト/リライト制御部103は、副ブロックチェーン202にデータを書き込む。具体的には、リード/ライト/リライト制御部103は、副ブロックチェーン202のブロックとして簡易コンセンサスロジック1043(図8を用いて後述)を経由してブロックを作成して、データを書き込む(符号A5参照)。この際、元の副ブロックチェーン202のブロックの参照情報が併せて記録される。
検索されたデータが主ブロックチェーン201に書き込み済みの場合には、リード/ライト/リライト制御部103は、副ブロックチェーン202にデータを書き込む。具体的には、リード/ライト/リライト制御部103は、更新データのブロックを主ブロックチェーン201とは別の副ブロックチェーン202のブロックとして、簡易コンセンサスロジック1043を経由して書き込む(符号A6参照)。この際、元の主ブロックチェーン201のブロックの参照情報が併せて記録される。
更に、検索されたブロックがコミット待ちでキュー1041に或る場合には、リード/ライト/リライト制御部103は、コミット待ちのキュー1041の内容を書き換えて、再度キュー1041に入れる。そして、リード/ライト/リライト制御部103は、ブロックチェーンサブシステム104に対して、主ブロックチェーン201への書き込みを依頼する(符号A7参照)。
図6は、図3に示したデータ管理装置1における書き込み処理を説明するブロック図である。
データ書き込みの際に、アプリケーションプログラム101は、ライトデータを、検索のためのKeyとデータ内容を示すValueとして(別言すれば、パラメタとして)、ライトAPI1021に与えてライトAPI1021を呼び出す。
リード/ライト/リライト制御部103は、ライトAPI1021から渡されたパラメタをライトキャッシュ1031に記録し、未コミットであることを示す値“0”をコミットフラグ1032としてライトキャッシュ1031に書き込む。また、リード/ライト/リライト制御部103は、書き込みデータをブロックチェーンサブシステム104に引き渡す。
ブロックチェーンサブシステム104は、渡されたデータをコミット待ちキュー1041に繋げて、コンセンサスロジック1042を呼び出して、主ブロックチェーン201への書き込みのコミット待ち状態にする。
コンセンサスロジック1042は、Proof-of-Work(PoW)のロジックを使用してコミットが取れたら、主ブロックチェーン201にデータとブロック番号を書き込むことで、ファイナリティを確立する(符号B1参照)。
すなわち、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、主ブロックチェーン201にデータを書き込む書き込み処理部112の一例として機能する。
図7は、図3に示したデータ管理装置1における読み込み処理を説明するブロック図である。
データの読み込みの際に、アプリケーションプログラム101は、データのKeyとデータを格納するバッファ(別言すれば、Value)をパラメタとしてリードAPI1022に渡して、リードAPI1022を呼び出す。
リード/ライト/リライト制御部103の検索モジュール1033は、与えられたKeyから、検索対象ブロックを検索する。
リード/ライト/リライト制御部103は、検索対象のブロックが副ブロックチェーン202にある場合には、副ブロックチェーン202の最新のブロックから順に検索してデータを読み出し、リードキャッシュ1034に書き込む(符号C1参照)。併せて、リード/ライト/リライト制御部103は、リードキャッシュ1034におけるコミットフラグ1032を“1”に設定する。
また、リード/ライト/リライト制御部103は、検索対象のブロックが副ブロックチェーン202に無い場合には、主ブロックチェーン201を検索する。検索対象のブロックが主ブロックチェーン201において見つかった場合には、リード/ライト/リライト制御部103は、主ブロックチェーン201からデータを読み出し、リードキャッシュ1034に書き込む(符号C2参照)。併せて、リード/ライト/リライト制御部103は、リードキャッシュ1034におけるコミットフラグ1032を“1”に設定する。
更に、コンセンサスロジック1042でコミットが取れておらずにデータがコミット待ちキュー1041にあり、ブロックチェーンに書き込みが済んでない場合には、リード/ライト/リライト制御部103は、ライトキャッシュ1031のデータをリードキャッシュ1034にコピーする(符号C3参照)。併せて、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、未コミットであることを示す。
そして、リード/ライト/リライト制御部103は、リードデータをコミットフラグ1032と共にリードAPI1022に渡して、リードAPI1022を復帰させる。リードAPI1022は、受け取ったリードデータ及びコミットフラグ1032をアプリケーションプログラム101に渡す。また、リード/ライト/リライト制御部103は、検索の結果、対象データがどこにも存在しない場合には、APIを異常復帰させる。
すなわち、リード/ライト/リライト制御部103は、副ブロックチェーン202における最新のブロックから順に、検索対象のブロックを検索する第1判定部114の一例として機能する。別言すれば、リード/ライト/リライト制御部103は、第1のデータが副ブロックチェーン202に存在するかを判定する第1判定部114の一例として機能する。
また、リード/ライト/リライト制御部103は、副ブロックチェーン202において検索対象のブロックが記録されていない場合に、主ブロックチェーン201において検索対象のブロックを検索する第2判定部115の一例として機能する。別言すれば、リード/ライト/リライト制御部103は、第1のデータが副ブロックチェーン202に存在しないと判定された場合に、第1のデータが主ブロックチェーン201に存在するかを判定する第2判定部115の一例として機能する。
更に、リード/ライト/リライト制御部103は、主ブロックチェーン201及び副ブロックチェーン202において検索対象のブロックが記録されていない場合に、ライトキャッシュ1031に格納されているブロックを検索する第3判定部116の一例として機能する。別言すれば、リード/ライト/リライト制御部103は、第1のデータが主ブロックチェーン201に存在しないと判定された場合に、第1のデータがライトキャッシュ1031に存在するかを判定する第3判定部116の一例として機能する。
また、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、副ブロックチェーン202に検索対象のブロックが記録されている場合に、当該ブロックを副ブロックチェーン202から読み出す読み出し処理部111の一例として機能する。リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、主ブロックチェーン201に検索対象のブロックが記録されている場合に、当該ブロックを主ブロックチェーン201から読み出す読み出し処理部111の一例として機能する。リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、ライトキャッシュ1031に検索対象のブロックが記録されている場合に、当該ブロックをライトキャッシュ1031から読み出す読み出し処理部111の一例として機能する。
図8は、図3に示したデータ管理装置1における書き換え処理を説明するブロック図である。
データ書き換えの際に、アプリケーションプログラム101は、リライトAPI1023に書き換え用とする書き換え対象のデータのKey1とリライトデータのValue1とを渡して、リライトAPI1023を呼び出す。
リード/ライト/リライト制御部103の検索モジュール1033は、受け取ったパラメタ(別言すれば、Key1)に基づき、書き換え対象のデータがどこにあるかを特定する。
検索対象のブロックが副ブロックチェーン202にある場合は、リライトデータを副ブロックチェーン202の最後に追加するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043が使用される(符号D1参照)。リライトデータは、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。そして、簡易コンセンサスロジック1043によって処理が行なわれ、副ブロックチェーン202への記録が行なわれる(符号D2参照)。この際、追加されるブロックには、副ブロックチェーン202の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、リライトデータをリードキャッシュ1034に書き込む(符号D3参照)。
なお、簡易コンセンサスロジック1043は、コンセンサスロジック1042よりも短時間で書き込みデータをコンセンサスすることができる。
また、検索対象のブロックが主ブロックチェーン201にある場合には、リライトデータを副ブロックチェーン202の最後に追記するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043が使用される(符号D1参照)。リライトデータは、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。そして、簡易コンセンサスロジック1043によって処理が行なわれ、副ブロックチェーン202への記録が行なわれる(符号D2参照)。この際、追加されるブロックには、主ブロックチェーン201の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、リライトデータをリードキャッシュ1034に書き込む(符号D3参照)。
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ1034には未コミットを示す“0”が立っている。そこで、リード/ライト/リライト制御部103は、ライトキャッシュ1031及び対応するコミット待ちキュー1041(「コミット待ちキュー#1」と称してもよい。)にデータを再登録する(符号D4参照)。これにより、コンセンサスロジック1042によって処理が行なわれ、主ブロックチェーン201への記録が行なわれる(符号D5参照)。
また、検索対象のブロックが発見できない場合には、リード/ライト/リライト制御部103は、リライトAPI1023をエラーで復帰させる。
なお、既にブロックチェーンに書き込まれているデータは、書き込みの際のKeyでのチェックが済んでおり、一旦コンセンサスロジック1042を通過している。そこで、データ更新の際には、新規データ書き込みの際に使用されるコンセンサスロジック1042よりも簡易なロジックを有する簡易コンセンサスロジック1043が使用される。例えば、書き込みの際にPoWのロジックが使用された場合には、書き換えの際には、Proof of Byzantine Fault Tolerance(PBFT)やSieve等のコミットに時間がかからないロジックが使用されてよい。
すなわち、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、書き換え対象のブロックが副ブロックチェーン202に記録されている場合に、新たなブロックを副ブロックチェーン202の末尾に書き込む書き換え処理部113の一例として機能する。別言すれば、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、主ブロックチェーン201における第1のデータの存在位置をポイントして、第1のデータの更新後のデータを、副ブロックチェーン202に書き込む書き換え処理部113の一例として機能する。更に別言すれば、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、第1のデータが副ブロックチェーン202に存在すると判定された場合に、更新後のデータを副ブロックチェーン202に書き込む書き換え処理部113の一例として機能する。
また、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、書き換え対象のブロックが主ブロックチェーン201に記録されている場合に、新たなブロックを副ブロックチェーン202の末尾に書き込む書き換え処理部113の一例として機能する。別言すれば、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、第1のデータが主ブロックチェーン201に存在すると判定された場合に、更新後のデータを副ブロックチェーンに書き込む書き換え処理部113の一例として機能する。
更に、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、書き換え対象のブロックがライトキャッシュ1031に格納されている場合に、ライトキャッシュ1031に新たなブロックを書き込む書き込み処理部112の一例として機能する。別言すれば、リード/ライト/リライト制御部103及びブロックチェーンサブシステム104は、第1のデータがライトキャッシュ1031に存在すると判定された場合に、ライトキャッシュ1031を介して更新後のデータを主ブロックチェーン201に書き込む書き込み処理部112の一例として機能する。
図9は、図8に示した書き換え処理におけるデータ記録場所毎の処理を説明する樹形図である。図10の(1)は、図9に示した副ブロックチェーン202への書き込み済みの場合の処理の詳細を説明するブロック図である。また、図10の(2)は、図9に示した主ブロックチェーン201への書き込み済みの場合の処理の詳細を説明するブロック図である。
図9に示す例では、データの書き換え処理として、Bc_rewrite (“Key1”, “data”)が実行される(図9の符号E1参照)。
始めに、副ブロックチェーン202が検索される。既に副ブロックチェーン202に書き込み済みである場合には(図9の符号E2参照)、副ブロックチェーン202の末尾に検索対象のブロックと同じキー“Key1”を持つブロック(“Key1”, “data”)を作成して前のブロックがポイントされる(図9の符号E3及び図10の符号F1参照)。
次に、主ブロックチェーン201が検索される。既に主ブロックチェーン201に書き込み済みの場合には(図9の符号E4参照)、主ブロックチェーン201の更新対象のブロック番号をポイントして、副ブロックチェーン202の末尾に新たなブロック(“Key1”, “data”)が書き込まれる(図9の符号E5及び図10の符号F2参照)。
また、ブロックチェーンに書き込まれるコミット前の場合には(図9の符号E6参照)、コミット待ちキュー1041及びライトキャッシュ1031のデータが更新されて、ブロックチェーンサブシステム104に再コミットが依頼される(図9の符号E7参照)。
〔A−2〕動作例
図6に示した書き込み処理を、図11に示すフローチャート(ステップS1〜S4)に従って説明する。
アプリケーションプログラム101は、ライトキャッシュ1031に書き込みのためのKey及びValueを渡す(ステップS1)。
リード/ライト/リライト制御部103は、ライトキャッシュ1031にKey及びValueを書き込み、コミットフラグ1032を“0”に設定する(ステップS2)。
リード/ライト/リライト制御部103は、書き込みデータをブロックチェーンサブシステム104に書き込み、コミット待ちキュー1041でコミット待ちにさせる(ステップS3)。
ブロックチェーンサブシステム104は、コンセンサスロジック1042においておコンセンサスが取れたら主ブロックチェーン201にデータを書き込み、ライトキャッシュ1031をクリアする(ステップS4)。そして、処理は終了する。
次に、図7に示した読み込み処理を、図12に示すフローチャート(ステップS11〜S19)に従って説明する。
アプリケーションプログラム101は、リードAPI1022に読み込みのためのKeyを渡す(ステップS11)。
リード/ライト/リライト制御部103の検索モジュール1033は、リードAPI1022が取得したKeyに基づき、副ブロックチェーン202を最新のブロックから順に検索する(ステップS12)。
検索モジュール1033は、副ブロックチェーン202に該当データが存在するかを判定する(ステップS13)。
副ブロックチェーン202に該当データが存在する場合には(ステップS13のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“1”に設定する。また、リード/ライト/リライト制御部103は、リードAPI1022にValueを返してリードAPI1022を復帰させる(ステップS14)。そして、処理は終了する。
一方、副ブロックチェーン202に該当データが存在しない場合には(ステップS13のNoルート参照)、処理はステップS15へ進む。そして、検索モジュール1033は、リードAPI1022が取得したKeyに基づき、主ブロックチェーン201を最新のブロックから順に検索する(ステップS15)。
検索モジュール1033は、主ブロックチェーン201に該当データが存在するかを判定する(ステップS16)。
主ブロックチェーン201に該当データが存在する場合には(ステップS16のYesルート参照)、処理はステップS14へ進む。
一方、主ブロックチェーン201に該当データが存在しない場合には(ステップS16のNoルート参照)、検索モジュール1033は、ライトキャッシュ1031に該当データが存在するかを判定する(ステップS17)。
ライトキャッシュ1031に該当データが存在する場合には(ステップS17のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定する。また、リード/ライト/リライト制御部103は、リードAPI1022にValueを返してリードAPI1022を復帰させる(ステップS18)。そして、処理は終了する。
一方、ライトキャッシュ1031に該当データが存在しない場合には(ステップS17のNoルート参照)、リード/ライト/リライト制御部103は、検索失敗として、リードAPI1022を異常復帰させる(ステップS19)。そして、処理は終了する。
次に、図8に示した書き換え処理を、図13及び図14に示すフローチャート(ステップS21〜S33)に従って説明する。なお、図13にはステップS21〜S28の処理を示し、図14にはステップS29〜S33の処理を示す。
アプリケーションプログラム101は、リライトAPI1023に書き換えのためのKey1及びValue1を渡す(図13のステップS21)。
リード/ライト/リライト制御部103の検索モジュール1033は、リライトAPI1023が受けったKey1に基づき、副ブロックチェーン202,主ブロックチェーン201の順でデータを検索する(図13のステップS22)。
検索モジュール1033は、副ブロックチェーン202に該当データが存在するかを判定する(図13のステップS23)。
副ブロックチェーン202に該当データが存在する場合には(図13のステップS23のYesルート参照)、処理は図14にステップS29へ進む。
一方、副ブロックチェーン202に該当データが存在しない場合には(図13のステップS23のNoルート参照)、検索モジュール1033は、主ブロックチェーン201に該当データが存在するかを判定する(図13のステップS24)。
主ブロックチェーン201に該当データが存在する場合には(図13のステップS24のYesルート参照)、処理は図14のステップS32へ進む。
一方、主ブロックチェーン201に該当データが存在しない場合には(図13のステップS24のNoルート参照)、検索モジュール1033は、ライトキャッシュ1031に該当データが存在するかを判定する(図13のステップS25)。
ライトキャッシュ1031に該当データが存在しない場合には(図13のステップS25のNoルート参照)、処理は図13のステップS26へ進む。そして、リード/ライト/リライト制御部103は、書き換え対象のデータがないため、リライト失敗としてリライトAPI1023をエラー復帰させ(図13のステップS26)、処理は終了する。
一方、ライトキャッシュ1031に該当データが存在する場合には(図13のステップS25のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定する。また、リード/ライト/リライト制御部103は、Key及びValueをリードキャッシュ1034に書き込み、リライトAPI1023を正常復帰させる(図13のステップS27)。
リード/ライト/リライト制御部103は、コミット待ちキュー#1を書き換え、コンセンサスロジック1042に主ブロックチェーン201への書き込みを依頼する(図13のステップS28)。そして、処理は終了する。
図13のステップS23において、副ブロックチェーン202に該当データが存在する場合には(図13のステップS23のYesルート参照)、処理は図14のステップS29へ進む。すなわち、リード/ライト/リライト制御部103は、リライトAPI1023に渡されたKey1及びValue1をリライトキャッシュ1035に書き込み、リライトAPI1023を復帰させる(図14のステップS29)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043にKey1及びValue1を渡す。また、リード/ライト/リライト制御部103は、副ブロックチェーン202の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー#2を経由して新たなブロックを副ブロックチェーン202に書き込む(図14のステップS30)。
リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定し、Key1及びValue1をリードキャッシュ1034に書き込み、リライトAPI1023を正常復帰させる(図14のステップS31)。そして、処理は終了する。
図13のステップS24において、主ブロックチェーン201に該当データが存在する場合には(図13のステップS24のYesルート参照)、処理は図14のステップS32へ進む。すなわち、リード/ライト/リライト制御部103は、リライトAPI1023に渡されたKey1及びValue1をリライトキャッシュ1035に書き込み、リライトAPI1023を復帰させる(図14のステップS32)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043にKey1及びValue1を渡す。また、リード/ライト/リライト制御部103は、コミット待ちキュー#2を経由して副ブロックチェーン202に新たなブロックを書き込む。さらに、リード/ライト/リライト制御部103は、主ブロックチェーン201に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする(図14のステップS33)。そして、処理は図14のステップS31へ進む。
〔A−3〕効果
上述した第1実施形態の一例におけるデータ管理装置1によれば、例えば以下の効果を奏することができる。
書き込み処理部112は、第1のデータを主ブロックチェーン201に書き込む。書き換え処理部113は、主ブロックチェーン201における第1のデータの存在位置をポイントして、第1のデータの更新後のデータを、副ブロックチェーン202に書き込む。
これにより、ブロックチェーンのデータを書き換えることができる。
第1判定部114は、第1のデータが副ブロックチェーン202に存在するかを判定する。書き換え処理部113は、第1判定部114によって第1のデータが副ブロックチェーン202に存在すると判定された場合に、更新後のデータを副ブロックチェーン202に書き込む。
これにより、更新後のデータと同じキーを持つデータがどこに存在するかに応じて、更新後のデータの書き込み先を制御できる。
第2判定部115は、第1判定部114によって第1のデータが副ブロックチェーン202に存在しないと判定された場合に、第1のデータが主ブロックチェーン201に存在するかを判定する。書き換え処理部113は、第2判定部115によって第1のデータが主ブロックチェーン201に存在すると判定された場合に、更新後のデータを副ブロックチェーン202に書き込む。
これにより、副ブロックチェーン202に更新対象のデータが存在しない場合に限って、主ブロックチェーン201における更新対象のデータの存在位置をポイントした更新後のデータが副ブロックチェーン202に書き込まれる。従って、更新対象のデータを2回以上書き換える場合においても、主ブロックチェーン201又は副ブロックチェーン202に存在する最新のデータの存在位置をポイントして、更新後のデータを副ブロックチェーン202に書き込むことができる。
第3判定部116は、第2判定部115によって第1のデータが主ブロックチェーン201に存在しないと判定された場合に、第1のデータがライトキャッシュメモリ1031に存在するかを判定する。書き込み処理部112は、第3判定部116によって第1のデータがライトキャッシュ1031に存在すると判定された場合に、ライトキャッシュ1031を介して更新後のデータを主ブロックチェーン201に書き込む。
ファイナライズが完了していないため主ブロックチェーン201に書き込まれておらず、ライトキャッシュ1031に存在するデータについても、書き換えを行なうことができる。
第1判定部114は、第1のデータが副ブロックチェーン202に存在するかを判定する。読み出し処理部111は、第1判定部114によって第1のデータが副ブロックチェーン202に存在すると判定された場合に、第1のデータを副ブロックチェーン202から読み出す。
これにより、読み出し対象のデータが主ブロックチェーン201及び副ブロックチェーン202に存在する場合においても、最新のデータである副ブロックチェーン202に存在するデータを読み出すことができる。
第2判定部115は、第1判定部114によって第1のデータが副ブロックチェーン202に存在しないと判定された場合に、第1のデータが主ブロックチェーン201に存在するかを判定する。読み出し処理部111は、第2判定部115によって第1のデータが主ブロックチェーン201に存在すると判定された場合に、第1のデータを主ブロックチェーン201から読み出す。
これにより、読み出し対象のデータについて一度も書き換えが行なわれていない場合に限って、新規書き込みに係るデータが記録される主ブロックチェーン201からデータを読み出すことができる。
第3判定部116は、第2判定部115によって第1のデータが主ブロックチェーン201に存在しないと判定された場合に、第1のデータがライトキャッシュ1031に存在するかを判定する。読み出し処理部111は、第3判定部116によって第1のデータがライトキャッシュ1031に存在すると判定された場合に、第1のデータをライトキャッシュ1031から読み出す。
これにより、ファイナライズが完了していないため主ブロックチェーン201に書き込まれておらず、ライトキャッシュ1031に存在するデータについても、読み出しを行なうことができる。別言すれば、ブロックチェーンへのデータの書き込み指示が発生した直後から、書き込み対象のデータを参照できる。
〔B〕第2実施形態の一例
〔B−1〕システム構成例
図15は、第2実施形態の一例としてのデータ管理システム300の構成を模式的に示すブロック図である。
データ管理システム300は、データ管理装置3,Domain Name System(DNS)クライアント3011及び管理端末4を備える。
データ管理システム300において、ホストIPの対応表は、一度作成すると頻繁には書き換わらないものとする。また、データ管理システム300において、ホストの追加及び削除はある程度の頻度で発生するが、主ブロックチェーン201への書き込みの頻度よりは少ないものとする。
データ管理装置3は、DNSサーバとして機能し、1台のサーバ上で動作するプログラムを展開する。データ管理装置3は、DNSプロトコルハンドリング部3012,DNSデータ参照部3013及びDNSデータ作成更新部3014としての機能を備える。また、データ管理装置3は、上述した実施形態の一例におけるデータ管理装置1と同様に、リード/ライト/リライトAPI102,リードAPI1022,リード/ライト/リライト制御部103及びブロックチェーンサブシステム104としての機能を備える。
DNSクライアント3011は、データ管理装置3にDNSのクエリを送る。
DNSプロトコルハンドリング部3012は、DNSのデータをDNSのプロトコルに変換する。
DNSデータ参照部3013は、ホスト及びIPのテーブルデータを、リードAPI1022を用いて読み出して、DNSプロトコルハンドリング部3012に返す。
DNSデータ作成更新部3014は、ホスト及びIPのテーブルを管理端末4の指示に従って、書き込み,更新及び削除するために、リード/ライト/リライトAPI102を呼び出す。
データ管理装置3は、図3に示した実施形態の一例におけるデータ管理装置1と同様のハードウェア構成を備えると共に、図4に示した実施形態の一例におけるデータ管理装置1と同様の機能構成を備える。
図16は、図15に示したデータ管理装置3におけるホスト−IPテーブルの新規作成処理を説明するブロック図である。
管理端末4は、DNSデータ作成更新部3014を介して、新規のライトデータ301を書き込む処理を行なう。
ライトデータ301は、ライトAPI1021を介して、Keyにホスト名を入れられると共に、ValueにIPアドレスを入れられて、リード/ライト/リライト制御部103に渡される。
リード/ライト/リライト制御部103は、ライトキャッシュ1031にKey及びValueを書き込むと共に、コミットフラグ1032に未コミットを示す値“0”を書き込む。また、リード/ライト/リライト制御部103は、データをブロックチェーンサブシステム104のコミット待ちキュー1041に渡す。
ブロックチェーンサブシステム104は、コンセンサスロジック1042でコンセンサスが取れたら、主ブロックチェーン201のブロックにデータを記録する(符号G1参照)。以降、追加の記録は、主ブロックチェーン201に書き込まれる。
図17は、図15に示したデータ管理装置3におけるホスト−IPテーブルの更新処理を説明するブロック図である。
ホスト−IPデータの書き換えの際は、管理端末4は、DNSデータ作成更新部3014を経由して、リライトデータ301を渡す。リライトデータ301は、書き換えようとするデータを示すKey1とデータ内容のValue1とを含み、リライトAPI1023に渡される。
リード/ライト/リライト制御部103の検索モジュール1033は、受け取ったパラメタ(別言すれば、Key1)に基づき、検索対象のデータがどこにあるのかを特定する。
該当ブロックが副ブロックチェーン202にある場合には、副ブロックチェーン202の最後に記録するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043にリライトデータ301が渡される(符号H1参照)。リライトデータ301は、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。簡易コンセンサスロジック1043は、リライトデータ301を副ブロックチェーン202の末尾に記録する(符号H2参照)。この際、副ブロックチェーン202のブロックの書き換えであることを示すため、追加したブロックには、旧ブロックポインタで書き換え対象のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032が“0”に設定し、リードキャッシュ1034にリライトデータ301を書き込む(符号H3参照)。
また、検索対象のブロックが主ブロックチェーン201にある場合には、リライトデータを副ブロックチェーン202の最後に追記するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043が使用される(符号H1参照)。リライトデータ301は、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。そして、簡易コンセンサスロジック1043によって処理が行なわれ、副ブロックチェーン202への記録が行なわれる(符号H2参照)。この際、追加されるブロックには、主ブロックチェーン201の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、リライトデータ301をリードキャッシュ1034に書き込む(符号H3参照)。
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ1034には未コミットを示す“0”が立っている。そこで、リード/ライト/リライト制御部103は、ライトキャッシュ1031及び対応するコミット待ちキュー1041(「コミット待ちキュー#1」と称してもよい。)にデータを再登録する(符号H4参照)。これにより、コンセンサスロジック1042によって処理が行なわれ、主ブロックチェーン201への記録が行なわれる(符号H5参照)。
また、検索対象のブロックが発見できない場合には、リード/ライト/リライト制御部103は、リライトAPI1023をエラーで復帰させる。
図18は、図15に示したデータ管理装置3におけるホスト−IPテーブルの削除処理を説明するブロック図である。
ホスト−IPデータの削除の際は、管理端末4は、DNSデータ作成更新部3014を経由して、デリートデータ301を渡す。デリートデータ301は、書き換えようとするデータを示すKey1とデータ内容のValue1における“Delete”とを含み、リライトAPI1023に渡される。
リード/ライト/リライト制御部103の検索モジュール1033は、受け取ったパラメタ(別言すれば、Key1)に基づき、検索対象のデータがどこにあるのかを特定する。
該当ブロックが副ブロックチェーン202にある場合には、副ブロックチェーン202の最後に記録するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043にデリートデータ301が渡される(符号I1参照)。デリートデータ301は、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。簡易コンセンサスロジック1043は、デリートデータ301を副ブロックチェーン202の末尾に記録する(符号I2参照)。この際、副ブロックチェーン202のブロックの書き換えであることを示すため、追加したブロックには、旧ブロックポインタで書き換え対象のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032が“0”に設定し、リードキャッシュ1034にデリートデータ301を書き込む(符号I3参照)。
また、検索対象のブロックが主ブロックチェーン201にある場合には、リライトデータを副ブロックチェーン202の最後に追記するために、リライトキャッシュ1035を経由してブロックチェーンサブシステム104の簡易コンセンサスロジック1043が使用される(符号I1参照)。デリートデータ301は、簡易コンセンサスロジック1043の使用のために、対応するコミット待ちキュー1041(「コミット待ちキュー#2」と称してもよい。)に書き込まれる。そして、簡易コンセンサスロジック1043によって処理が行なわれ、副ブロックチェーン202への記録が行なわれる(符号I2参照)。この際、追加されるブロックには、主ブロックチェーン201の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、デリートデータ301をリードキャッシュ1034に書き込む(符号I3参照)。
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ1034には未コミットを示す“0”が立っている。そこで、リード/ライト/リライト制御部103は、ライトキャッシュ1031及び対応するコミット待ちキュー1041(「コミット待ちキュー#1」と称してもよい。)にデータを再登録する(符号I4参照)。これにより、コンセンサスロジック1042によって処理が行なわれ、主ブロックチェーン201への記録が行なわれる(符号I5参照)。
図19は、図15に示したデータ管理装置3におけるホスト−IPテーブルの参照処理を説明するブロック図である。
DNSプロトコルハンドリング部3012は、DNSクライアント3011からの問い合わせに従って、DNSデータ参照部3013にクエリによる問い合わせを行なう(符号J1参照)。
データの読み込みの際に、DNSデータ参照部3013は、リードAPI1022に必要とするデータのKeyとデータを格納するバッファ(別言すれば、Value)をパラメタとして渡して、リードAPI1022を呼び出す。
リード/ライト/リライト制御部103の検索モジュール1033は、与えられたKeyから、検索対象ブロックを検索する。
リード/ライト/リライト制御部103は、検索対象のブロックが副ブロックチェーン202にある場合には、副ブロックチェーン202の最新のブロックから順に検索してデータを読み出し、リードキャッシュ1034に書き込む(符号J2参照)。
また、リード/ライト/リライト制御部103は、検索対象のブロックが副ブロックチェーン202に無い場合には、主ブロックチェーン201を検索する。検索対象のブロックが主ブロックチェーン201において見つかった場合には、リード/ライト/リライト制御部103は、主ブロックチェーン201からデータを読み出し、リードキャッシュ1034に書き込む(符号J3参照)。
更に、コンセンサスロジック1042でコミットが取れておらずにデータがコミット待ちキュー1041にあり、ブロックチェーンに書き込みが済んでない場合には、リード/ライト/リライト制御部103は、ライトキャッシュ1031のデータをリードキャッシュ1034にコピーする(符号J4参照)。併せて、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定して、未コミットであることを示す。
そして、リード/ライト/リライト制御部103は、リードデータをコミットフラグ1032と共にリードAPI1022に渡して、リードAPI1022を復帰させる。また、リード/ライト/リライト制御部103は、検索の結果、対象データがどこにも存在しない場合には、APIを異常復帰させる。
アドレスが存在した場合には、DNSデータ参照部3013は、リードAPI1022の結果をDNSプロトコルハンドリング部3012に返す(符号J5参照)。
DNSプロトコルハンドリング部3012は、DNSクライアント3011に応答を返す。
〔B−2〕動作例
図16に示した書き込み処理を、図20に示すフローチャート(ステップS41〜S44)に従って説明する。
DNSデータ作成更新部3014は、ライトAPI1021に書き込みのためのKey“Host-name”及びValue“IP-addr”を渡す(ステップS41)。
リード/ライト/リライト制御部103は、ライトキャッシュ1031にKey及びValueを書き込み、コミットフラグ1032を“0”に設定する(ステップS42)。
リード/ライト/リライト制御部103は、書き込みデータをブロックチェーンサブシステム104に書き込み、コミット待ちキュー1041でコミット待ちにさせる(ステップS43)。
ブロックチェーンサブシステム104は、コンセンサスロジック1042においておコンセンサスが取れたら主ブロックチェーン201にデータを書き込み、ライトキャッシュ1031をクリアする(ステップS44)。そして、処理は終了する。
次に、図17に示したホスト−IPテーブルの更新処理を、図21及び図22に示すフローチャート(ステップS51〜S63)に従って説明する。なお、図21にはステップS51〜S58の処理を示し、図22にはステップS59〜S63の処理を示す。
DNSデータ作成更新部3014は、リライトAPI1023に書き換えのためのKey“Host-name”及びValue“IP-addr”を渡す(図21のステップS51)。
リード/ライト/リライト制御部103の検索モジュール1033は、リライトAPI1023が受けったKeyに基づき、副ブロックチェーン202,主ブロックチェーン201の順でデータを検索する(図21のステップS52)。
検索モジュール1033は、副ブロックチェーン202に該当データが存在するかを判定する(図21のステップS53)。
副ブロックチェーン202に該当データが存在する場合には(図21のステップS53のYesルート参照)、処理は図22のステップS59へ進む。
一方、副ブロックチェーン202に該当データが存在しない場合には(図21のステップS53のNoルート参照)、検索モジュール1033は、主ブロックチェーン201に該当データが存在するかを判定する(図21のステップS54)。
主ブロックチェーン201に該当データが存在する場合には(図21のステップS54のYesルート参照)、処理は図22のステップS62へ進む。
一方、主ブロックチェーン201に該当データが存在しない場合には(図21のステップS54のNoルート参照)、検索モジュール1033は、ライトキャッシュ1031に該当データが存在するかを判定する(図21のステップS55)。
ライトキャッシュ1031に該当データが存在しない場合には(図21のステップS55のNoルート参照)、処理は図21のステップS56へ進む。そして、リード/ライト/リライト制御部103は、書き換え対象のデータがないため、リライト失敗としてリライトAPI1023をエラー復帰させ(図21のステップS56)、処理は終了する。
一方、ライトキャッシュ1031に該当データが存在する場合には(図21のステップS55のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定する。また、リード/ライト/リライト制御部103は、Key及びValueをリードキャッシュ1034に書き込み、リライトAPI1023を正常復帰させる(図21のステップS57)。
リード/ライト/リライト制御部103は、コミット待ちキュー#1を書き換え、コンセンサスロジック1042に主ブロックチェーン201への書き込みを依頼する(図21のステップS58)。そして、処理は終了する。
図21のステップS53において、副ブロックチェーン202に該当データが存在する場合には(図21のステップS53のYesルート参照)、処理は図22のステップS59へ進む。すなわち、リード/ライト/リライト制御部103は、リライトAPI1023に渡されたKey及びValueをリライトキャッシュ1035に書き込み、リライトAPI1023を復帰させる(図22のステップS59)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043にKey及びValueを渡す。また、リード/ライト/リライト制御部103は、副ブロックチェーン202の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー#2を経由して新たなブロックを副ブロックチェーン202に書き込む(図22のステップS60)。
リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定し、Key及びValueをリードキャッシュ1034に書き込み、リライトAPI1023を正常復帰させる(図22のステップS61)。そして、処理は終了する。
図21のステップS54において、主ブロックチェーン201に該当データが存在する場合には(図21のステップS54のYesルート参照)、処理は図22のステップS62へ進む。すなわち、リード/ライト/リライト制御部103は、リライトAPI1023に渡されたKey及びValueをリライトキャッシュ1035に書き込み、リライトAPI1023を復帰させる(図22のステップS62)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043にKey及びValueを渡す。また、リード/ライト/リライト制御部103は、コミット待ちキュー#2を経由して副ブロックチェーン202に新たなブロックを書き込む。更に、リード/ライト/リライト制御部103は、主ブロックチェーン201に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする(図22のステップS63)。そして、処理は図22のステップS61へ進む。
次に、図18に示したホスト−IPテーブルの削除処理を、図23及び図24に示すフローチャート(ステップS71〜S86)に従って説明する。なお、図23にはステップS71〜S78の処理を示し、図24にはステップS79〜S86の処理を示す。
DNSデータ作成更新部3014は、リライトAPI1023に書き換えのためのKey“Host-name”及びValue“Delete”を渡す(図23のステップS71)。
リード/ライト/リライト制御部103の検索モジュール1033は、リライトAPI1023が受けったKeyに基づき、副ブロックチェーン202,主ブロックチェーン201の順でデータを検索する(図23のステップS72)。
検索モジュール1033は、副ブロックチェーン202に該当データが存在するかを判定する(図23のステップS73)。
副ブロックチェーン202に該当データが存在する場合には(図23のステップS73のYesルート参照)、処理は図24のステップS79へ進む。
一方、副ブロックチェーン202に該当データが存在しない場合には(図23のステップS73のNoルート参照)、検索モジュール1033は、主ブロックチェーン201に該当データが存在するかを判定する(図23のステップS74)。
主ブロックチェーン201に該当データが存在する場合には(図23のステップS74のYesルート参照)、処理は図24のステップS83へ進む。
一方、主ブロックチェーン201に該当データが存在しない場合には(図23のステップS74のNoルート参照)、検索モジュール1033は、ライトキャッシュ1031に該当データが存在するかを判定する(図23のステップS75)。
ライトキャッシュ1031に該当データが存在しない場合には(図23のステップS75のNoルート参照)、処理は図24のステップS86へ進む。
一方、ライトキャッシュ1031に該当データが存在する場合には(図23のステップS75のYesルート参照)、リード/ライト/リライト制御部103は、コミット待ちキュー#1のValueが“Delete”であるかを判定する(図23のステップS76)。
コミット待ちキュー#1のValueが“Delete”である場合には(図23のステップS76のYesルート参照)、処理は図24のステップS86へ進む。
一方、コミット待ちキュー#1のValueが“Delete”でない場合には(図23のステップS76のNoルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定する。また、リード/ライト/リライト制御部103は、Key及びValueをリードキャッシュ1034に書き込み、リライトAPI1023を正常復帰させる(図23のステップS77)。
リード/ライト/リライト制御部103は、コミット待ちキュー#1を書き換え、コンセンサスロジック1042に主ブロックチェーン201への書き込みを依頼する(図23のステップS78)。そして、処理は終了する。
図23のステップS73において、副ブロックチェーン202に該当データが存在する場合には(図23のステップS73のYesルート参照)、処理は図24にステップS79へ進む。すなわち、リード/ライト/リライト制御部103は、読み出したデータのValueが“Delete”であるかを判定する(図24のステップS79)。
読み出したデータのValueが“Delete”である場合には(図24のステップS79のYesルート参照)、処理は図24のステップS86へ進む。
一方、読み出したデータのValueが“Delete”でない場合には(図24のステップS79のNoルート参照)、リード/ライト/リライト制御部103は、リライトAPI1023に渡された“Host-name”及び“Delete”をリライトキャッシュ1035に書き込む。また、リード/ライト/リライト制御部103は、リライトAPI1023を復帰させる(図24のステップS80)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043に“Host-name”及び“Delete”を渡す。また、リード/ライト/リライト制御部103は、副ブロックチェーン202の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー#2を経由して新たなブロックを副ブロックチェーン202に書き込む(図24のステップS81)。
リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定し、Key及び“Delete”をリードキャッシュ1034に書き込む(図24のステップS82)。そして、処理は終了する。
図23のステップS74において、主ブロックチェーン201に該当データが存在する場合には(図23のステップS74のYesルート参照)、処理は図24のステップS83へ進む。すなわち、リード/ライト/リライト制御部103は、読み出したデータのValueが“Delete”であるかを判定する(図24のステップS83)。
読み出したデータのValueが“Delete”である場合には(図24のステップS83のYesルート参照)、処理は図24のステップS86へ進む。
一方、読み出したデータのValueが“Delete”でない場合には(図24のステップS83のNoルート参照)、リード/ライト/リライト制御部103は、リライトAPI1023に渡された“Host-name”及び“Delete”をリライトキャッシュ1035に書き込む。また、リード/ライト/リライト制御部103は、リライトAPI1023を復帰させる(図24のステップS84)。
リード/ライト/リライト制御部103は、簡易コンセンサスロジック1043に“Host-name”及び“Delete”を渡す。また、リード/ライト/リライト制御部103は、コミット待ちキュー#2を経由して副ブロックチェーン202に新たなブロックを書き込む。更に、リード/ライト/リライト制御部103は、主ブロックチェーン201に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする(図24のステップS85)。そして、処理は図24のステップS82へ進む。
図23のステップS75において、ライトキャッシュ1031に該当データが存在しない場合には(図23のステップS75のNoルート参照)、処理は図24のステップS86へ進む。また、図23のステップS76において、コミット待ちキュー#1のValueが“Delete”である場合にも(図23のステップS76のYesルート参照)、処理は図24のステップS86へ進む。リード/ライト/リライト制御部103は、削除するデータが無いため、Delete失敗としてリライトAPI1023をエラー復帰させる(図24のステップS86)。そして、処理は終了する。
次に、図19に示したホスト−IPテーブルの参照処理を、図25に示すフローチャート(ステップS91〜S101)に従って説明する。
DNSデータ参照部3013は、リードAPI1022に読み込みのためのKey“host-name1”を渡す(ステップS91)。
リード/ライト/リライト制御部103は、Keyに基づき、副ブロックチェーン202を最新のブロックから順に検索する(ステップS92)。
リード/ライト/リライト制御部103は、副ブロックチェーン202に該当データが存在するかを判定する(ステップS93)。
副ブロックチェーン202に該当データが存在しない場合には(ステップS93のNoルート参照)、処理はステップS98へ進む。
一方、副ブロックチェーン202に該当データが存在する場合には(ステップS93のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“1”に設定する。また、リード/ライト/リライト制御部103は、リードAPI1022にValue“IP-addr”を設定する(ステップS94)。
リード/ライト/リライト制御部103は、Valueの値が“Delete”であるかを判定する(ステップS95)。
Valueの値が“Delete”でない場合には(ステップS95のNoルート参照)、リード/ライト/リライト制御部103は、検索成功としてリードAPI1022にValueを返す(ステップS96)。そして、処理は終了する。
一方、Valueの値が“Delete”である場合には(ステップS95のYesルート参照)、リード/ライト/リライト制御部103は、検索失敗としてリードAPI1022を異常復帰させる(ステップS97)。そして、処理は終了する。
ステップS93において、副ブロックチェーン202に該当データが存在しない場合には(ステップS93のNoルート参照)、リード/ライト/リライト制御部103は、Keyに基づき、主ブロックチェーン201を検索する(ステップS98)。
リード/ライト/リライト制御部103は、主ブロックチェーン201に該当データが存在するかを判定する(ステップS99)。
主ブロックチェーン201に該当データが存在する場合には(ステップS99のYesルート参照)、処理はステップS94へ移行する。
一方、主ブロックチェーン201に該当データが存在しない場合には(ステップS99のNoルート参照)、リード/ライト/リライト制御部103は、ライトキャッシュ1031に該当データが存在するかを判定する(ステップS100)。
ライトキャッシュ1031に該当データが存在しない場合には(ステップS100のNoルート参照)、処理はステップS97へ移行する。
一方、ライトキャッシュ1031に該当データが存在する場合には(ステップS100のYesルート参照)、リード/ライト/リライト制御部103は、リードキャッシュ1034のコミットフラグ1032を“0”に設定する。また、リード/ライト/リライト制御部103は、リードAPI1022にValue“IP-addr”を設定する(ステップS101)。そして、処理はステップS95へ移行する。
〔B−3〕効果
上述した第2実施形態の一例におけるデータ管理装置3によれば、第1実施形態の一例と同様の効果を奏することができると共に、例えば以下の効果を奏することができる。
ホストの追加及び削除の頻度が主ブロックチェーン201への書き込みの頻度よりも低いDNSサーバにおいても、主ブロックチェーン201及び副ブロックチェーン202を使用したデータの新規作成処理,更新処理,削除処理及び参照処理を実施できる。
〔C〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
〔D〕付記
以上の第1及び第2実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1のデータを第1のブロックチェーンに書き込む書き込み処理部と、
前記第1のブロックチェーンにおける前記第1のデータの存在位置をポイントして、前記第1のデータの更新後のデータを、第2のブロックチェーンに書き込む書き換え処理部と、
を備える、データ管理装置。
(付記2)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定する第1判定部を更に備え、
前記書き換え処理部は、前記第1判定部によって前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
付記1に記載のデータ管理装置。
(付記3)
前記第1判定部によって前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定する第2判定部を更に備え、
前記書き換え処理部は、前記第2判定部によって前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
付記2に記載のデータ管理装置。
(付記4)
前記第2判定部によって前記第1のデータが前記第1のブロックチェーンに存在しないと判定された場合に、前記第1のデータがキャッシュメモリに存在するかを判定する第3判定部を更に備え、
前記書き込み処理部は、前記第3判定部によって前記第1のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第1のブロックチェーンに書き込む、
付記3に記載のデータ管理装置。
(付記5)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定する第1判定部と、
前記第1のブロックチェーン又は前記第2のブロックチェーンからデータを読み出す読み出し処理部と、
を更に備え、
前記読み出し処理部は、前記第1判定部によって前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第2のブロックチェーンから読み出す、
付記1〜4のいずれか1項に記載のデータ管理装置。
(付記6)
前記第1判定部によって前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定する第2判定部を更に備え、
前記読み出し処理部は、前記第2判定部によって前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第1のブロックチェーンから読み出す、
付記5に記載のデータ管理装置。
(付記7)
前記第2判定部によって前記第1のデータが前記第1のブロックチェーンに存在しないと判定された場合に、前記第1のデータがキャッシュメモリに存在するかを判定する第3判定部を更に備え、
前記読み出し処理部は、前記第3判定部によって前記第1のデータが前記キャッシュメモリに存在すると判定された場合に、前記第1のデータを前記キャッシュメモリから読み出す、
付記6に記載のデータ管理装置。
(付記8)
コンピュータに、
第1のデータを第1のブロックチェーンに書き込み、
前記第1のブロックチェーンにおける前記第1のデータの存在位置をポイントして、前記第1のデータの更新後のデータを、第2のブロックチェーンに書き込む、
処理を実行させる、データ管理プログラム。
(付記9)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記8に記載のデータ管理プログラム。
(付記10)
前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記9に記載のデータ管理プログラム。
(付記11)
前記第1のデータが前記第1のブロックチェーンに存在しないと判定された場合に、前記第1のデータがキャッシュメモリに存在するかを判定し、
前記第1のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第1のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記10に記載のデータ管理プログラム。
(付記12)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第2のブロックチェーンから読み出す、
処理を前記コンピュータに実行させる、付記8〜11のいずれか1項に記載のデータ管理プログラム。
(付記13)
前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第1のブロックチェーンから読み出す、
処理を前記コンピュータに実行させる、付記12に記載のデータ管理プログラム。
(付記14)
前記第1のデータが前記第1のブロックチェーンに存在しないと判定された場合に、前記第1のデータがキャッシュメモリに存在するかを判定し、
前記第1のデータが前記キャッシュメモリに存在すると判定された場合に、前記第1のデータを前記キャッシュメモリから読み出す、
処理を前記コンピュータに実行させる、付記13に記載のデータ管理プログラム。
(付記15)
第1のデータを第1のブロックチェーンに書き込み、
前記第1のブロックチェーンにおける前記第1のデータの存在位置をポイントして、前記第1のデータの更新後のデータを、第2のブロックチェーンに書き込む、
データ管理方法。
(付記16)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
付記15に記載のデータ管理方法。
(付記17)
前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第2のブロックチェーンに書き込む、
付記16に記載のデータ管理方法。
(付記18)
前記第1のデータが前記第1のブロックチェーンに存在しないと判定された場合に、前記第1のデータがキャッシュメモリに存在するかを判定し、
前記第1のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第1のブロックチェーンに書き込む、
付記17に記載のデータ管理方法。
(付記19)
前記第1のデータが前記第2のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第2のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第2のブロックチェーンから読み出す、
付記15〜18のいずれか1項に記載のデータ管理方法。
(付記20)
前記第1のデータが前記第2のブロックチェーンに存在しないと判定された場合に、前記第1のデータが前記第1のブロックチェーンに存在するかを判定し、
前記第1のデータが前記第1のブロックチェーンに存在すると判定された場合に、前記第1のデータを前記第1のブロックチェーンから読み出す、
付記19に記載のデータ管理方法。