(57)【要約】【課題】ブロックチェーンのデータを書き換え可能にする。【解決手段】データ管理装置１は、書き込み処理部１１２と書き換え処理部１１３とを備える。書き込み処理部１１２は、第１のデータを第１のブロックチェーンに書き込む。書き換え処理部１１３は、第１のブロックチェーンにおける第１のデータの存在位置をポイントして、第１のデータの更新後のデータを、第２のブロックチェーンに書き込む。【選択図】図４
2019185296.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータを第１のブロックチェーンに書き込む書き込み処理部と、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む書き換え処理部と、
を備える、データ管理装置。
【請求項２】
前記第１のデータが前記第２のブロックチェーンに存在するかを判定する第１判定部を更に備え、
前記書き換え処理部は、前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
請求項１に記載のデータ管理装置。
【請求項３】
前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定する第２判定部を更に備え、
前記書き換え処理部は、前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
請求項２に記載のデータ管理装置。
【請求項４】
前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定する第３判定部を更に備え、
前記書き込み処理部は、前記第３判定部によって前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第１のブロックチェーンに書き込む、
請求項３に記載のデータ管理装置。
【請求項５】
前記第１のデータが前記第２のブロックチェーンに存在するかを判定する第１判定部と、
前記第１のブロックチェーン又は前記第２のブロックチェーンからデータを読み出す読み出し処理部と、
を更に備え、
前記読み出し処理部は、前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第２のブロックチェーンから読み出す、
請求項１〜４のいずれか１項に記載のデータ管理装置。
【請求項６】
前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定する第２判定部を更に備え、
前記読み出し処理部は、前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第１のブロックチェーンから読み出す、
請求項５に記載のデータ管理装置。
【請求項７】
前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定する第３判定部を更に備え、
前記読み出し処理部は、前記第３判定部によって前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記第１のデータを前記キャッシュメモリから読み出す、
請求項６に記載のデータ管理装置。
【請求項８】
コンピュータに、
第１のデータを第１のブロックチェーンに書き込み、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む、
処理を実行させる、データ管理プログラム。
【請求項９】
第１のデータを第１のブロックチェーンに書き込み、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む、
データ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ管理装置，データ管理プログラム及びデータ管理方法に関する。
【背景技術】
【０００２】
金融系のシステムにおいて、ブロックチェーンを使用してデータを蓄積することにより、データの改ざんが防止されている。このような金融系のシステムでは、取引情報をブロックチェーンに記録することで、取引情報を恒久的に安全に保存することができる。
【０００３】
例えば、ビットコイン等の仮想通貨では、全ての取引情報をブロックチェーンに記録することで、記録の真偽が保障されている。
【０００４】
ブロックチェーンでは、データを書き込んでから読み出すことができるまでの時間に差がある。例えば、コンセンサスアルゴリズムが実行されて、コミットされたデータに限ってブロックチェーンに書き込まれることで、データの一貫性が保障され、安全な取引ができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００９−５３７０２６号公報
【特許文献２】国際公開第２０１７／０９０３２９号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、一旦ブロックチェーンに書き込まれたデータの書き換えを行なうことは容易でないという問題がある。
【０００７】
１つの側面では、ブロックチェーンのデータを書き換え可能にする。
【課題を解決するための手段】
【０００８】
データ管理装置は、第１のデータを第１のブロックチェーンに書き込む書き込み処理部と、前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む書き換え処理部と、を備える。
【発明の効果】
【０００９】
１つの側面では、ブロックチェーンのデータを書き換えることができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態の一例としてのデータ管理システムの概要を示す図である。
【図２】図１に示したデータ管理システムの構成を模式的に示すブロック図である。
【図３】図１に示したデータ管理装置のハードウェア構成を模式的に示すブロック図である。
【図４】図２に示したデータ管理装置の機能構成を模式的に示すブロック図である。
【図５】図３に示したデータ管理装置における書き込み処理，読み込み処理及び書き換え処理の概要を説明するブロック図である。
【図６】図３に示したデータ管理装置における書き込み処理を説明するブロック図である。
【図７】図３に示したデータ管理装置における読み込み処理を説明するブロック図である。
【図８】図３に示したデータ管理装置における書き換え処理を説明するブロック図である。
【図９】図８に示した書き換え処理におけるデータ記録場所毎の処理を説明する樹形図である。
【図１０】図９に示したデータ記録場所毎の処理の詳細を説明するブロック図である。
【図１１】図６に示した書き込み処理を説明するフローチャートである。
【図１２】図７に示した読み込み処理を説明するフローチャートである。
【図１３】図８に示した書き換え処理を説明するフローチャートである。
【図１４】図８に示した書き換え処理を説明するフローチャートである。
【図１５】第２実施形態の一例としてのデータ管理システムの構成を模式的に示すブロック図である。
【図１６】図１５に示したデータ管理装置におけるホスト−Internet Protocol（ＩＰ）テーブルの新規作成処理を説明するブロック図である。
【図１７】図１５に示したデータ管理装置におけるホスト−ＩＰテーブルの更新処理を説明するブロック図である。
【図１８】図１５に示したデータ管理装置におけるホスト−ＩＰテーブルの削除処理を説明するブロック図である。
【図１９】図１５に示したデータ管理装置におけるホスト−ＩＰテーブルの参照処理を説明するブロック図である。
【図２０】図１６に示したホスト−ＩＰテーブルの新規作成処理を説明するフローチャートである。
【図２１】図１７に示したホスト−ＩＰテーブルの更新処理を説明するフローチャートである。
【図２２】図１７に示したホスト−ＩＰテーブルの更新処理を説明するフローチャートである。
【図２３】図１８に示したホスト−ＩＰテーブルの削除処理を説明するフローチャートである。
【図２４】図１８に示したホスト−ＩＰテーブルの削除処理を説明するフローチャートである。
【図２５】図１９に示したホスト−ＩＰテーブルの参照処理を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
【００１２】
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１３】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【００１４】
〔Ａ〕第１実施形態の一例
〔Ａ−１〕システム構成例
図１は、第１実施形態の一例としてのデータ管理システム１００の概要を示す図である。
【００１５】
データ管理システム１００は、複数（図１に示す例では、４つ）のデータ管理装置１−１〜１−４を備える。
【００１６】
各データ管理装置１−１〜１−４は、ブロックチェーン＃１及び＃２を分散して管理及び記憶する。なお、ブロックチェーン＃１は主ブロックチェーンと称され、ブロックチェーン＃２は副ブロックチェーンと称されてもよい。
【００１７】
以下、複数のデータ管理装置１−１〜１−４のうち任意のデータ管理装置を示す場合には、符号「１」を使用する。
【００１８】
主ブロックチェーン２０１には、新規に書き込まれるデータが記録される。副ブロックチェーン２０２には、主ブロックチェーン２０１に書き込まれているデータの更新後のデータが記録される。また、副ブロックチェーン２０２には、副ブロックチェーン２０２に書き込まれている更新後のデータを再度更新する場合に、再更新後のデータが記録される。
【００１９】
図２は、図１に示したデータ管理システム１００の構成を模式的に示すブロック図である。
【００２０】
データ管理システム１００は、Database（ＤＢ）のApplication Programming Interface（ＡＰＩ）にマッピングして実装される。図２に示すように、データ管理システム１００は、アプリケーション１０１，リード／ライト／リライトＡＰＩ１０２，リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４として機能する。
【００２１】
アプリケーションプログラム１０１は、ＤＢを使用するアプリケーションである。
【００２２】
リード／ライト／リライトＡＰＩ１０２は、ＤＢにアクセスするためのＡＰＩであり、ＤＢに対する読み込み，書き込み及び書き換え（別言すれば、再書き込み）を行なう。
【００２３】
リード／ライト／リライト制御部１０３は、ＤＢの書き込み，読み込み及び書き換えの際のメモリ制御や、読み込みの際のブロックチェーンサブシステム１０４への検索依頼、リード／ライト／リライトＡＰＩ１０２からのパラメタの受け渡しを行なう。
【００２４】
ブロックチェーンサブシステム１０４は、主ブロックチェーン２０１及び副ブロックチェーン２０２に対する読み込み，書き込み及び書き換えの制御と、ブロックチェーンのコンセンサスロジック１０４２（図６〜図８等を用いて後述）とを実行する。そして、ブロックチェーンサブシステム１０４は、ブロックチェーンのファイナリティ処理を行なう。
【００２５】
アプリケーションプログラム１０１は、リード／ライト／リライトＡＰＩ１０２を呼び出し、リード／ライト／リライト制御部１０３に処理を依頼する。リード／ライト／リライト制御部１０３は、ブロックチェーンサブシステム１０４にデータの操作を依頼する。ブロックチェーンサブシステム１０４は、必要に応じて、主ブロックチェーン２０１又は副ブロックチェーン２０２に対してデータの書き込みや読み出しを行なう。
【００２６】
アプリケーション１０１，リード／ライト／リライトＡＰＩ１０２，リード／ライト／リライト制御部１０３，ブロックチェーンサブシステム１０４としての機能は、各データ管理装置１−１〜１−４のＯＳにおけるＤＢサブシステムとして実装される。なお、ＯＳは、Operating Systemの略称である。
【００２７】
図３は、図１に示したデータ管理装置１のハードウェア構成を模式的に示すブロック図である。
【００２８】
データ管理装置１は、Central Processing Unit（ＣＰＵ）１１，メモリ１２，表示制御部１３，記憶装置１４，入力Interface（Ｉ／Ｆ）１５，読み書き処理部１６及び通信Ｉ／Ｆ１７を備える。
【００２９】
メモリ１２は、例示的に、Read Only Memory（ＲＯＭ）及びRandom Access Memory（ＲＡＭ）を含む記憶装置である。メモリ１２のＲＯＭには、Basic Input/Output System（ＢＩＯＳ）等のプログラムが書き込まれてよい。メモリ１２のソフトウェアプログラムは、ＣＰＵ１１に適宜に読み込まれて実行されてよい。また、メモリ１２のＲＡＭは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
【００３０】
表示制御部１３は、表示装置１３０と接続され、表示装置１３０を制御する。表示装置１３０は、液晶ディスプレイやOrganic Light-Emitting Diode（ＯＬＥＤ）ディスプレイ，Cathode Ray Tube（ＣＲＴ），電子ペーパーディスプレイ等であり、オペレータ等に対する各種情報を表示する。表示装置１３０は、入力装置と組み合わされたものでもよく、例えば、タッチパネルでもよい。
【００３１】
記憶装置１４は、例示的に、データを読み書き可能に記憶する装置であり、例えば、Hard Disk Drive（ＨＤＤ）やSolid State Drive（ＳＳＤ），Storage Class Memory（ＳＣＭ）が用いられてよい。各データ管理装置１−１〜１−４の記憶装置１４は、主ブロックチェーン２０１及び副ブロックチェーン２０２の少なくとも一部のデータをそれぞれ記憶する。各データ管理装置１−１〜１−４の記憶装置１４が記憶するデータが繋ぎ合わされることにより、主ブロックチェーン２０１及び副ブロックチェーン２０２の全体のデータが作成されてよい。
【００３２】
入力Ｉ／Ｆ１５は、マウス１５１やキーボード１５２等の入力装置と接続され、マウス１５１やキーボード１５２等の入力装置を制御する。マウス１５１やキーボード１５２は、入力装置の一例であり、これらの入力装置を介して、オペレータが各種の入力操作を行なう。
【００３３】
読み書き処理部１６は、記録媒体１６０が装着可能に構成される。読み書き処理部１６は、記録媒体１６０が装着された状態において、記録媒体１６０に記録されている情報を読み取り可能に構成される。本例では、記録媒体１６０は、可搬性を有する。例えば、記録媒体１６０は、フレキシブルディスク、光ディスク、磁気ディスク、光磁気ディスク、又は、半導体メモリ等である。
【００３４】
通信Ｉ／Ｆ１７は、外部装置との通信を可能にするためのインタフェースである。各データ管理装置１−１〜１−４は、通信Ｉ／Ｆ１７を介して、他のデータ管理装置１−１〜１−４と通信を行なう。
【００３５】
図４は、図２に示したデータ管理装置１の機能構成を模式的に示すブロック図である。
【００３６】
ＣＰＵ１１は、種々の制御や演算を行なう処理装置であり、メモリ１２に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。すなわち、データ管理装置１のＣＰＵ１１は、図４に示すように、読み出し処理部１１１，書き込み処理部１１２，書き換え処理部１１３，第１判定部１１４，第２判定部１１５及び第３判定部１１６として機能する。
【００３７】
なお、これらの読み出し処理部１１１，書き込み処理部１１２，書き換え処理部１１３，第１判定部１１４，第２判定部１１５及び第３判定部１１６としての機能を実現するためのプログラムは、例えば前述した記録媒体１６０に記録された形態で提供される。そして、コンピュータは読み書き処理部１６を介してその記録媒体１６０からプログラム（「データ管理プログラム」と称してもよい。）を読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供してもよい。
【００３８】
読み出し処理部１１１，書き込み処理部１１２，書き換え処理部１１３，第１判定部１１４，第２判定部１１５及び第３判定部１１６としての機能を実現する際には、内部記憶装置に格納されたプログラムがコンピュータのマイクロプロセッサによって実行される。このとき、記録媒体１６０に記録されたプログラムをコンピュータが読み取って実行してもよい。なお、本実施形態において、内部記憶装置はメモリ１２であり、マイクロプロセッサはＣＰＵ１１である。
【００３９】
ＣＰＵ１１は、例示的に、データ管理装置１全体の動作を制御する。データ管理装置１全体の動作を制御するための装置は、ＣＰＵ１１に限定されず、例えば、ＭＰＵやＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのいずれか１つであってもよい。また、データ管理装置１全体の動作を制御するための装置は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ及びＦＰＧＡのうちの２種類以上の組み合わせであってもよい。なお、ＭＰＵはMicro Processing Unitの略称であり、ＤＳＰはDigital Signal Processorの略称であり、ＡＳＩＣはApplication Specific Integrated Circuitの略称である。また、ＰＬＤはProgrammable Logic Deviceの略称であり、ＦＰＧＡはField Programmable Gate Arrayの略称である。
【００４０】
読み出し処理部１１１は、主ブロックチェーン２０１，副ブロックチェーン２０２又はライトキャッシュ１０３１（図６〜図８等を用いて後述；「キャッシュメモリ」と称してもよい。）からデータを読み出す。なお、読み出し処理部１１１における機能の詳細は、図７等を用いて後述する。
【００４１】
書き込み処理部１１２は、ライトキャッシュ１０３１を介して、主ブロックチェーン２０１に対して、データを書き込む。なお、書き込み処理部１１２における機能の詳細は、図６及び図８等を用いて後述する。
【００４２】
書き換え処理部１１３は、ライトキャッシュ１０３１を介して、主ブロックチェーン２０１又は副ブロックチェーン２０２において記録されているデータについての書き換え後のデータを副ブロックチェーン２０２に書き込む。なお、書き込み処理部１１２における機能の詳細は、図８等を用いて後述する。
【００４３】
第１判定部１１４は、読み出し対象のデータが副ブロックチェーン２０２に記録されているかを判定する。なお、第１判定部１１４における機能の詳細は、図７等を用いて後述する。
【００４４】
第２判定部１１５は、読み出し対象のデータが主ブロックチェーン２０１に記録されているかを判定する。なお、第２判定部１１５における機能の詳細は、図７等を用いて後述する。
【００４５】
第３判定部１１６は、読み出し対象のデータがライトキャッシュ１０３１に格納されているかを判定する。なお、第３判定部１１６における機能の詳細は、図７等を用いて後述する。
【００４６】
図５の（１）は、図３に示したデータ管理装置１における書き込み処理の概要を説明するブロック図である。
【００４７】
図５の（１）に示すように、ブロックチェーンにデータを書き込む際に、ライトＡＰＩ１０２１は、アプリケーションプログラム１０１（図５の（１）には不図示）から呼び出される。ライトＡＰＩ１０２１は、リード／ライト／リライト制御部１０３におけるライトキャッシュ１０３１（図６等を用いて後述）を経由して、ブロックチェーンサブシステム１０４に書き込み依頼をする。
【００４８】
ブロックチェーンサブシステム１０４は、コンセンサスアルゴリズムにより書き込みがコミットされファイナライズが確立することで、主ブロックチェーン２０１にデータを書き込む（符号Ａ１参照）。
【００４９】
図５の（２）は、図３に示したデータ管理装置１における読み込み処理の概要を説明するブロック図である。
【００５０】
データの読み込み（別言すれば、データの参照）の際は、アプリケーションプログラム１０１（図５の（２）には不図示）は、リードＡＰＩ１０２２を介して、リード／ライト／リライト制御部１０３に対して、データの検索を依頼する。
【００５１】
検索対象のデータが副ブロックチェーン２０２にある場合には、リード／ライト／リライト制御部１０３は、当該データを副ブロックチェーン２０２から読み込んでリードキャッシュ１０３４（図７等を用いて後述）に書き込む。そして、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４にコミット済みのフラグを立てる（符号Ａ２参照）。
【００５２】
また、検索対象のデータが主ブロックチェーン２０１にある場合には、リード／ライト／リライト制御部１０３は、当該データを主ブロックチェーン２０１から読み込んでリードキャッシュ１０３４に書き込む。そして、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４にコミット済みのフラグを立てる（符号Ａ３参照）。
【００５３】
更に、検索対象のデータが書き込み直後で未コミットある場合には、リード／ライト／リライト制御部１０３は、当該データをライトキャッシュ１０３１（図７等を用いて後述）から読み込んでリードキャッシュ１０３４に書き込む。そして、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４に未コミットのフラグを立てる（符号Ａ４参照）。
【００５４】
そして、リード／ライト／リライト制御部１０３は、コミットフラグ１０３２（図６〜８等を用いて後述）と共に、リードＡＰＩ１０２２に対してリードの応答を返す。
【００５５】
図５の（３）は、図３に示したデータ管理装置１における書き換え処理の概要を説明するブロック図である。
【００５６】
データ書き換え（別言すれば、データ更新）の際は、アプリケーションプログラム１０１（図５の（３）には不図示）は、リライトＡＰＩ１０２３を介して、リード／ライト／リライト制御部１０３にデータの検索を依頼する。検索されたデータが副ブロックチェーン２０２に書き込み済みの場合には、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２にデータを書き込む。具体的には、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２のブロックとして簡易コンセンサスロジック１０４３（図８を用いて後述）を経由してブロックを作成して、データを書き込む（符号Ａ５参照）。この際、元の副ブロックチェーン２０２のブロックの参照情報が併せて記録される。
【００５７】
検索されたデータが主ブロックチェーン２０１に書き込み済みの場合には、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２にデータを書き込む。具体的には、リード／ライト／リライト制御部１０３は、更新データのブロックを主ブロックチェーン２０１とは別の副ブロックチェーン２０２のブロックとして、簡易コンセンサスロジック１０４３を経由して書き込む（符号Ａ６参照）。この際、元の主ブロックチェーン２０１のブロックの参照情報が併せて記録される。
【００５８】
更に、検索されたブロックがコミット待ちでキュー１０４１に或る場合には、リード／ライト／リライト制御部１０３は、コミット待ちのキュー１０４１の内容を書き換えて、再度キュー１０４１に入れる。そして、リード／ライト／リライト制御部１０３は、ブロックチェーンサブシステム１０４に対して、主ブロックチェーン２０１への書き込みを依頼する（符号Ａ７参照）。
【００５９】
図６は、図３に示したデータ管理装置１における書き込み処理を説明するブロック図である。
【００６０】
データ書き込みの際に、アプリケーションプログラム１０１は、ライトデータを、検索のためのＫｅｙとデータ内容を示すＶａｌｕｅとして（別言すれば、パラメタとして）、ライトＡＰＩ１０２１に与えてライトＡＰＩ１０２１を呼び出す。
【００６１】
リード／ライト／リライト制御部１０３は、ライトＡＰＩ１０２１から渡されたパラメタをライトキャッシュ１０３１に記録し、未コミットであることを示す値“０”をコミットフラグ１０３２としてライトキャッシュ１０３１に書き込む。また、リード／ライト／リライト制御部１０３は、書き込みデータをブロックチェーンサブシステム１０４に引き渡す。
【００６２】
ブロックチェーンサブシステム１０４は、渡されたデータをコミット待ちキュー１０４１に繋げて、コンセンサスロジック１０４２を呼び出して、主ブロックチェーン２０１への書き込みのコミット待ち状態にする。
【００６３】
コンセンサスロジック１０４２は、Proof-of-Work（ＰｏＷ）のロジックを使用してコミットが取れたら、主ブロックチェーン２０１にデータとブロック番号を書き込むことで、ファイナリティを確立する（符号Ｂ１参照）。
【００６４】
すなわち、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、主ブロックチェーン２０１にデータを書き込む書き込み処理部１１２の一例として機能する。
【００６５】
図７は、図３に示したデータ管理装置１における読み込み処理を説明するブロック図である。
【００６６】
データの読み込みの際に、アプリケーションプログラム１０１は、データのＫｅｙとデータを格納するバッファ（別言すれば、Ｖａｌｕｅ）をパラメタとしてリードＡＰＩ１０２２に渡して、リードＡＰＩ１０２２を呼び出す。
【００６７】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、与えられたＫｅｙから、検索対象ブロックを検索する。
【００６８】
リード／ライト／リライト制御部１０３は、検索対象のブロックが副ブロックチェーン２０２にある場合には、副ブロックチェーン２０２の最新のブロックから順に検索してデータを読み出し、リードキャッシュ１０３４に書き込む（符号Ｃ１参照）。併せて、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４におけるコミットフラグ１０３２を“１”に設定する。
【００６９】
また、リード／ライト／リライト制御部１０３は、検索対象のブロックが副ブロックチェーン２０２に無い場合には、主ブロックチェーン２０１を検索する。検索対象のブロックが主ブロックチェーン２０１において見つかった場合には、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１からデータを読み出し、リードキャッシュ１０３４に書き込む（符号Ｃ２参照）。併せて、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４におけるコミットフラグ１０３２を“１”に設定する。
【００７０】
更に、コンセンサスロジック１０４２でコミットが取れておらずにデータがコミット待ちキュー１０４１にあり、ブロックチェーンに書き込みが済んでない場合には、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１のデータをリードキャッシュ１０３４にコピーする（符号Ｃ３参照）。併せて、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、未コミットであることを示す。
【００７１】
そして、リード／ライト／リライト制御部１０３は、リードデータをコミットフラグ１０３２と共にリードＡＰＩ１０２２に渡して、リードＡＰＩ１０２２を復帰させる。リードＡＰＩ１０２２は、受け取ったリードデータ及びコミットフラグ１０３２をアプリケーションプログラム１０１に渡す。また、リード／ライト／リライト制御部１０３は、検索の結果、対象データがどこにも存在しない場合には、ＡＰＩを異常復帰させる。
【００７２】
すなわち、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２における最新のブロックから順に、検索対象のブロックを検索する第１判定部１１４の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３は、第１のデータが副ブロックチェーン２０２に存在するかを判定する第１判定部１１４の一例として機能する。
【００７３】
また、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２において検索対象のブロックが記録されていない場合に、主ブロックチェーン２０１において検索対象のブロックを検索する第２判定部１１５の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３は、第１のデータが副ブロックチェーン２０２に存在しないと判定された場合に、第１のデータが主ブロックチェーン２０１に存在するかを判定する第２判定部１１５の一例として機能する。
【００７４】
更に、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１及び副ブロックチェーン２０２において検索対象のブロックが記録されていない場合に、ライトキャッシュ１０３１に格納されているブロックを検索する第３判定部１１６の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３は、第１のデータが主ブロックチェーン２０１に存在しないと判定された場合に、第１のデータがライトキャッシュ１０３１に存在するかを判定する第３判定部１１６の一例として機能する。
【００７５】
また、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、副ブロックチェーン２０２に検索対象のブロックが記録されている場合に、当該ブロックを副ブロックチェーン２０２から読み出す読み出し処理部１１１の一例として機能する。リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、主ブロックチェーン２０１に検索対象のブロックが記録されている場合に、当該ブロックを主ブロックチェーン２０１から読み出す読み出し処理部１１１の一例として機能する。リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、ライトキャッシュ１０３１に検索対象のブロックが記録されている場合に、当該ブロックをライトキャッシュ１０３１から読み出す読み出し処理部１１１の一例として機能する。
【００７６】
図８は、図３に示したデータ管理装置１における書き換え処理を説明するブロック図である。
【００７７】
データ書き換えの際に、アプリケーションプログラム１０１は、リライトＡＰＩ１０２３に書き換え用とする書き換え対象のデータのＫｅｙ１とリライトデータのＶａｌｕｅ１とを渡して、リライトＡＰＩ１０２３を呼び出す。
【００７８】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、受け取ったパラメタ（別言すれば、Ｋｅｙ１）に基づき、書き換え対象のデータがどこにあるかを特定する。
【００７９】
検索対象のブロックが副ブロックチェーン２０２にある場合は、リライトデータを副ブロックチェーン２０２の最後に追加するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３が使用される（符号Ｄ１参照）。リライトデータは、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。そして、簡易コンセンサスロジック１０４３によって処理が行なわれ、副ブロックチェーン２０２への記録が行なわれる（符号Ｄ２参照）。この際、追加されるブロックには、副ブロックチェーン２０２の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、リライトデータをリードキャッシュ１０３４に書き込む（符号Ｄ３参照）。
【００８０】
なお、簡易コンセンサスロジック１０４３は、コンセンサスロジック１０４２よりも短時間で書き込みデータをコンセンサスすることができる。
【００８１】
また、検索対象のブロックが主ブロックチェーン２０１にある場合には、リライトデータを副ブロックチェーン２０２の最後に追記するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３が使用される（符号Ｄ１参照）。リライトデータは、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。そして、簡易コンセンサスロジック１０４３によって処理が行なわれ、副ブロックチェーン２０２への記録が行なわれる（符号Ｄ２参照）。この際、追加されるブロックには、主ブロックチェーン２０１の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、リライトデータをリードキャッシュ１０３４に書き込む（符号Ｄ３参照）。
【００８２】
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ１０３４には未コミットを示す“０”が立っている。そこで、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１及び対応するコミット待ちキュー１０４１（「コミット待ちキュー＃１」と称してもよい。）にデータを再登録する（符号Ｄ４参照）。これにより、コンセンサスロジック１０４２によって処理が行なわれ、主ブロックチェーン２０１への記録が行なわれる（符号Ｄ５参照）。
【００８３】
また、検索対象のブロックが発見できない場合には、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３をエラーで復帰させる。
【００８４】
なお、既にブロックチェーンに書き込まれているデータは、書き込みの際のＫｅｙでのチェックが済んでおり、一旦コンセンサスロジック１０４２を通過している。そこで、データ更新の際には、新規データ書き込みの際に使用されるコンセンサスロジック１０４２よりも簡易なロジックを有する簡易コンセンサスロジック１０４３が使用される。例えば、書き込みの際にＰｏＷのロジックが使用された場合には、書き換えの際には、Proof of Byzantine Fault Tolerance（ＰＢＦＴ）やSieve等のコミットに時間がかからないロジックが使用されてよい。
【００８５】
すなわち、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、書き換え対象のブロックが副ブロックチェーン２０２に記録されている場合に、新たなブロックを副ブロックチェーン２０２の末尾に書き込む書き換え処理部１１３の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、主ブロックチェーン２０１における第１のデータの存在位置をポイントして、第１のデータの更新後のデータを、副ブロックチェーン２０２に書き込む書き換え処理部１１３の一例として機能する。更に別言すれば、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、第１のデータが副ブロックチェーン２０２に存在すると判定された場合に、更新後のデータを副ブロックチェーン２０２に書き込む書き換え処理部１１３の一例として機能する。
【００８６】
また、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、書き換え対象のブロックが主ブロックチェーン２０１に記録されている場合に、新たなブロックを副ブロックチェーン２０２の末尾に書き込む書き換え処理部１１３の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、第１のデータが主ブロックチェーン２０１に存在すると判定された場合に、更新後のデータを副ブロックチェーンに書き込む書き換え処理部１１３の一例として機能する。
【００８７】
更に、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、書き換え対象のブロックがライトキャッシュ１０３１に格納されている場合に、ライトキャッシュ１０３１に新たなブロックを書き込む書き込み処理部１１２の一例として機能する。別言すれば、リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４は、第１のデータがライトキャッシュ１０３１に存在すると判定された場合に、ライトキャッシュ１０３１を介して更新後のデータを主ブロックチェーン２０１に書き込む書き込み処理部１１２の一例として機能する。
【００８８】
図９は、図８に示した書き換え処理におけるデータ記録場所毎の処理を説明する樹形図である。図１０の（１）は、図９に示した副ブロックチェーン２０２への書き込み済みの場合の処理の詳細を説明するブロック図である。また、図１０の（２）は、図９に示した主ブロックチェーン２０１への書き込み済みの場合の処理の詳細を説明するブロック図である。
【００８９】
図９に示す例では、データの書き換え処理として、Bc_rewrite (“Key1”, “data”)が実行される（図９の符号Ｅ１参照）。
【００９０】
始めに、副ブロックチェーン２０２が検索される。既に副ブロックチェーン２０２に書き込み済みである場合には（図９の符号Ｅ２参照）、副ブロックチェーン２０２の末尾に検索対象のブロックと同じキー“Key1”を持つブロック(“Key1”, “data”)を作成して前のブロックがポイントされる（図９の符号Ｅ３及び図１０の符号Ｆ１参照）。
【００９１】
次に、主ブロックチェーン２０１が検索される。既に主ブロックチェーン２０１に書き込み済みの場合には（図９の符号Ｅ４参照）、主ブロックチェーン２０１の更新対象のブロック番号をポイントして、副ブロックチェーン２０２の末尾に新たなブロック(“Key1”, “data”)が書き込まれる（図９の符号Ｅ５及び図１０の符号Ｆ２参照）。
【００９２】
また、ブロックチェーンに書き込まれるコミット前の場合には（図９の符号Ｅ６参照）、コミット待ちキュー１０４１及びライトキャッシュ１０３１のデータが更新されて、ブロックチェーンサブシステム１０４に再コミットが依頼される（図９の符号Ｅ７参照）。
【００９３】
〔Ａ−２〕動作例
図６に示した書き込み処理を、図１１に示すフローチャート（ステップＳ１〜Ｓ４）に従って説明する。
【００９４】
アプリケーションプログラム１０１は、ライトキャッシュ１０３１に書き込みのためのＫｅｙ及びＶａｌｕｅを渡す（ステップＳ１）。
【００９５】
リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１にＫｅｙ及びＶａｌｕｅを書き込み、コミットフラグ１０３２を“０”に設定する（ステップＳ２）。
【００９６】
リード／ライト／リライト制御部１０３は、書き込みデータをブロックチェーンサブシステム１０４に書き込み、コミット待ちキュー１０４１でコミット待ちにさせる（ステップＳ３）。
【００９７】
ブロックチェーンサブシステム１０４は、コンセンサスロジック１０４２においておコンセンサスが取れたら主ブロックチェーン２０１にデータを書き込み、ライトキャッシュ１０３１をクリアする（ステップＳ４）。そして、処理は終了する。
【００９８】
次に、図７に示した読み込み処理を、図１２に示すフローチャート（ステップＳ１１〜Ｓ１９）に従って説明する。
【００９９】
アプリケーションプログラム１０１は、リードＡＰＩ１０２２に読み込みのためのＫｅｙを渡す（ステップＳ１１）。
【０１００】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、リードＡＰＩ１０２２が取得したＫｅｙに基づき、副ブロックチェーン２０２を最新のブロックから順に検索する（ステップＳ１２）。
【０１０１】
検索モジュール１０３３は、副ブロックチェーン２０２に該当データが存在するかを判定する（ステップＳ１３）。
【０１０２】
副ブロックチェーン２０２に該当データが存在する場合には（ステップＳ１３のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“１”に設定する。また、リード／ライト／リライト制御部１０３は、リードＡＰＩ１０２２にＶａｌｕｅを返してリードＡＰＩ１０２２を復帰させる（ステップＳ１４）。そして、処理は終了する。
【０１０３】
一方、副ブロックチェーン２０２に該当データが存在しない場合には（ステップＳ１３のＮｏルート参照）、処理はステップＳ１５へ進む。そして、検索モジュール１０３３は、リードＡＰＩ１０２２が取得したＫｅｙに基づき、主ブロックチェーン２０１を最新のブロックから順に検索する（ステップＳ１５）。
【０１０４】
検索モジュール１０３３は、主ブロックチェーン２０１に該当データが存在するかを判定する（ステップＳ１６）。
【０１０５】
主ブロックチェーン２０１に該当データが存在する場合には（ステップＳ１６のＹｅｓルート参照）、処理はステップＳ１４へ進む。
【０１０６】
一方、主ブロックチェーン２０１に該当データが存在しない場合には（ステップＳ１６のＮｏルート参照）、検索モジュール１０３３は、ライトキャッシュ１０３１に該当データが存在するかを判定する（ステップＳ１７）。
【０１０７】
ライトキャッシュ１０３１に該当データが存在する場合には（ステップＳ１７のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定する。また、リード／ライト／リライト制御部１０３は、リードＡＰＩ１０２２にＶａｌｕｅを返してリードＡＰＩ１０２２を復帰させる（ステップＳ１８）。そして、処理は終了する。
【０１０８】
一方、ライトキャッシュ１０３１に該当データが存在しない場合には（ステップＳ１７のＮｏルート参照）、リード／ライト／リライト制御部１０３は、検索失敗として、リードＡＰＩ１０２２を異常復帰させる（ステップＳ１９）。そして、処理は終了する。
【０１０９】
次に、図８に示した書き換え処理を、図１３及び図１４に示すフローチャート（ステップＳ２１〜Ｓ３３）に従って説明する。なお、図１３にはステップＳ２１〜Ｓ２８の処理を示し、図１４にはステップＳ２９〜Ｓ３３の処理を示す。
【０１１０】
アプリケーションプログラム１０１は、リライトＡＰＩ１０２３に書き換えのためのＫｅｙ１及びＶａｌｕｅ１を渡す（図１３のステップＳ２１）。
【０１１１】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、リライトＡＰＩ１０２３が受けったＫｅｙ１に基づき、副ブロックチェーン２０２，主ブロックチェーン２０１の順でデータを検索する（図１３のステップＳ２２）。
【０１１２】
検索モジュール１０３３は、副ブロックチェーン２０２に該当データが存在するかを判定する（図１３のステップＳ２３）。
【０１１３】
副ブロックチェーン２０２に該当データが存在する場合には（図１３のステップＳ２３のＹｅｓルート参照）、処理は図１４にステップＳ２９へ進む。
【０１１４】
一方、副ブロックチェーン２０２に該当データが存在しない場合には（図１３のステップＳ２３のＮｏルート参照）、検索モジュール１０３３は、主ブロックチェーン２０１に該当データが存在するかを判定する（図１３のステップＳ２４）。
【０１１５】
主ブロックチェーン２０１に該当データが存在する場合には（図１３のステップＳ２４のＹｅｓルート参照）、処理は図１４のステップＳ３２へ進む。
【０１１６】
一方、主ブロックチェーン２０１に該当データが存在しない場合には（図１３のステップＳ２４のＮｏルート参照）、検索モジュール１０３３は、ライトキャッシュ１０３１に該当データが存在するかを判定する（図１３のステップＳ２５）。
【０１１７】
ライトキャッシュ１０３１に該当データが存在しない場合には（図１３のステップＳ２５のＮｏルート参照）、処理は図１３のステップＳ２６へ進む。そして、リード／ライト／リライト制御部１０３は、書き換え対象のデータがないため、リライト失敗としてリライトＡＰＩ１０２３をエラー復帰させ（図１３のステップＳ２６）、処理は終了する。
【０１１８】
一方、ライトキャッシュ１０３１に該当データが存在する場合には（図１３のステップＳ２５のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定する。また、リード／ライト／リライト制御部１０３は、Ｋｅｙ及びＶａｌｕｅをリードキャッシュ１０３４に書き込み、リライトＡＰＩ１０２３を正常復帰させる（図１３のステップＳ２７）。
【０１１９】
リード／ライト／リライト制御部１０３は、コミット待ちキュー＃１を書き換え、コンセンサスロジック１０４２に主ブロックチェーン２０１への書き込みを依頼する（図１３のステップＳ２８）。そして、処理は終了する。
【０１２０】
図１３のステップＳ２３において、副ブロックチェーン２０２に該当データが存在する場合には（図１３のステップＳ２３のＹｅｓルート参照）、処理は図１４のステップＳ２９へ進む。すなわち、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡されたＫｅｙ１及びＶａｌｕｅ１をリライトキャッシュ１０３５に書き込み、リライトＡＰＩ１０２３を復帰させる（図１４のステップＳ２９）。
【０１２１】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３にＫｅｙ１及びＶａｌｕｅ１を渡す。また、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー＃２を経由して新たなブロックを副ブロックチェーン２０２に書き込む（図１４のステップＳ３０）。
【０１２２】
リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定し、Ｋｅｙ１及びＶａｌｕｅ１をリードキャッシュ１０３４に書き込み、リライトＡＰＩ１０２３を正常復帰させる（図１４のステップＳ３１）。そして、処理は終了する。
【０１２３】
図１３のステップＳ２４において、主ブロックチェーン２０１に該当データが存在する場合には（図１３のステップＳ２４のＹｅｓルート参照）、処理は図１４のステップＳ３２へ進む。すなわち、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡されたＫｅｙ１及びＶａｌｕｅ１をリライトキャッシュ１０３５に書き込み、リライトＡＰＩ１０２３を復帰させる（図１４のステップＳ３２）。
【０１２４】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３にＫｅｙ１及びＶａｌｕｅ１を渡す。また、リード／ライト／リライト制御部１０３は、コミット待ちキュー＃２を経由して副ブロックチェーン２０２に新たなブロックを書き込む。さらに、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする（図１４のステップＳ３３）。そして、処理は図１４のステップＳ３１へ進む。
【０１２５】
〔Ａ−３〕効果
上述した第１実施形態の一例におけるデータ管理装置１によれば、例えば以下の効果を奏することができる。
【０１２６】
書き込み処理部１１２は、第１のデータを主ブロックチェーン２０１に書き込む。書き換え処理部１１３は、主ブロックチェーン２０１における第１のデータの存在位置をポイントして、第１のデータの更新後のデータを、副ブロックチェーン２０２に書き込む。
【０１２７】
これにより、ブロックチェーンのデータを書き換えることができる。
【０１２８】
第１判定部１１４は、第１のデータが副ブロックチェーン２０２に存在するかを判定する。書き換え処理部１１３は、第１判定部１１４によって第１のデータが副ブロックチェーン２０２に存在すると判定された場合に、更新後のデータを副ブロックチェーン２０２に書き込む。
【０１２９】
これにより、更新後のデータと同じキーを持つデータがどこに存在するかに応じて、更新後のデータの書き込み先を制御できる。
【０１３０】
第２判定部１１５は、第１判定部１１４によって第１のデータが副ブロックチェーン２０２に存在しないと判定された場合に、第１のデータが主ブロックチェーン２０１に存在するかを判定する。書き換え処理部１１３は、第２判定部１１５によって第１のデータが主ブロックチェーン２０１に存在すると判定された場合に、更新後のデータを副ブロックチェーン２０２に書き込む。
【０１３１】
これにより、副ブロックチェーン２０２に更新対象のデータが存在しない場合に限って、主ブロックチェーン２０１における更新対象のデータの存在位置をポイントした更新後のデータが副ブロックチェーン２０２に書き込まれる。従って、更新対象のデータを２回以上書き換える場合においても、主ブロックチェーン２０１又は副ブロックチェーン２０２に存在する最新のデータの存在位置をポイントして、更新後のデータを副ブロックチェーン２０２に書き込むことができる。
【０１３２】
第３判定部１１６は、第２判定部１１５によって第１のデータが主ブロックチェーン２０１に存在しないと判定された場合に、第１のデータがライトキャッシュメモリ１０３１に存在するかを判定する。書き込み処理部１１２は、第３判定部１１６によって第１のデータがライトキャッシュ１０３１に存在すると判定された場合に、ライトキャッシュ１０３１を介して更新後のデータを主ブロックチェーン２０１に書き込む。
【０１３３】
ファイナライズが完了していないため主ブロックチェーン２０１に書き込まれておらず、ライトキャッシュ１０３１に存在するデータについても、書き換えを行なうことができる。
【０１３４】
第１判定部１１４は、第１のデータが副ブロックチェーン２０２に存在するかを判定する。読み出し処理部１１１は、第１判定部１１４によって第１のデータが副ブロックチェーン２０２に存在すると判定された場合に、第１のデータを副ブロックチェーン２０２から読み出す。
【０１３５】
これにより、読み出し対象のデータが主ブロックチェーン２０１及び副ブロックチェーン２０２に存在する場合においても、最新のデータである副ブロックチェーン２０２に存在するデータを読み出すことができる。
【０１３６】
第２判定部１１５は、第１判定部１１４によって第１のデータが副ブロックチェーン２０２に存在しないと判定された場合に、第１のデータが主ブロックチェーン２０１に存在するかを判定する。読み出し処理部１１１は、第２判定部１１５によって第１のデータが主ブロックチェーン２０１に存在すると判定された場合に、第１のデータを主ブロックチェーン２０１から読み出す。
【０１３７】
これにより、読み出し対象のデータについて一度も書き換えが行なわれていない場合に限って、新規書き込みに係るデータが記録される主ブロックチェーン２０１からデータを読み出すことができる。
【０１３８】
第３判定部１１６は、第２判定部１１５によって第１のデータが主ブロックチェーン２０１に存在しないと判定された場合に、第１のデータがライトキャッシュ１０３１に存在するかを判定する。読み出し処理部１１１は、第３判定部１１６によって第１のデータがライトキャッシュ１０３１に存在すると判定された場合に、第１のデータをライトキャッシュ１０３１から読み出す。
【０１３９】
これにより、ファイナライズが完了していないため主ブロックチェーン２０１に書き込まれておらず、ライトキャッシュ１０３１に存在するデータについても、読み出しを行なうことができる。別言すれば、ブロックチェーンへのデータの書き込み指示が発生した直後から、書き込み対象のデータを参照できる。
【０１４０】
〔Ｂ〕第２実施形態の一例
〔Ｂ−１〕システム構成例
図１５は、第２実施形態の一例としてのデータ管理システム３００の構成を模式的に示すブロック図である。
【０１４１】
データ管理システム３００は、データ管理装置３，Domain Name System（ＤＮＳ）クライアント３０１１及び管理端末４を備える。
【０１４２】
データ管理システム３００において、ホストＩＰの対応表は、一度作成すると頻繁には書き換わらないものとする。また、データ管理システム３００において、ホストの追加及び削除はある程度の頻度で発生するが、主ブロックチェーン２０１への書き込みの頻度よりは少ないものとする。
【０１４３】
データ管理装置３は、ＤＮＳサーバとして機能し、１台のサーバ上で動作するプログラムを展開する。データ管理装置３は、ＤＮＳプロトコルハンドリング部３０１２，ＤＮＳデータ参照部３０１３及びＤＮＳデータ作成更新部３０１４としての機能を備える。また、データ管理装置３は、上述した実施形態の一例におけるデータ管理装置１と同様に、リード／ライト／リライトＡＰＩ１０２，リードＡＰＩ１０２２，リード／ライト／リライト制御部１０３及びブロックチェーンサブシステム１０４としての機能を備える。
【０１４４】
ＤＮＳクライアント３０１１は、データ管理装置３にＤＮＳのクエリを送る。
【０１４５】
ＤＮＳプロトコルハンドリング部３０１２は、ＤＮＳのデータをＤＮＳのプロトコルに変換する。
【０１４６】
ＤＮＳデータ参照部３０１３は、ホスト及びＩＰのテーブルデータを、リードＡＰＩ１０２２を用いて読み出して、ＤＮＳプロトコルハンドリング部３０１２に返す。
【０１４７】
ＤＮＳデータ作成更新部３０１４は、ホスト及びＩＰのテーブルを管理端末４の指示に従って、書き込み，更新及び削除するために、リード／ライト／リライトＡＰＩ１０２を呼び出す。
【０１４８】
データ管理装置３は、図３に示した実施形態の一例におけるデータ管理装置１と同様のハードウェア構成を備えると共に、図４に示した実施形態の一例におけるデータ管理装置１と同様の機能構成を備える。
【０１４９】
図１６は、図１５に示したデータ管理装置３におけるホスト−ＩＰテーブルの新規作成処理を説明するブロック図である。
【０１５０】
管理端末４は、ＤＮＳデータ作成更新部３０１４を介して、新規のライトデータ３０１を書き込む処理を行なう。
【０１５１】
ライトデータ３０１は、ライトＡＰＩ１０２１を介して、Ｋｅｙにホスト名を入れられると共に、ＶａｌｕｅにＩＰアドレスを入れられて、リード／ライト／リライト制御部１０３に渡される。
【０１５２】
リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１にＫｅｙ及びＶａｌｕｅを書き込むと共に、コミットフラグ１０３２に未コミットを示す値“０”を書き込む。また、リード／ライト／リライト制御部１０３は、データをブロックチェーンサブシステム１０４のコミット待ちキュー１０４１に渡す。
【０１５３】
ブロックチェーンサブシステム１０４は、コンセンサスロジック１０４２でコンセンサスが取れたら、主ブロックチェーン２０１のブロックにデータを記録する（符号Ｇ１参照）。以降、追加の記録は、主ブロックチェーン２０１に書き込まれる。
【０１５４】
図１７は、図１５に示したデータ管理装置３におけるホスト−ＩＰテーブルの更新処理を説明するブロック図である。
【０１５５】
ホスト−ＩＰデータの書き換えの際は、管理端末４は、ＤＮＳデータ作成更新部３０１４を経由して、リライトデータ３０１を渡す。リライトデータ３０１は、書き換えようとするデータを示すKey1とデータ内容のValue1とを含み、リライトＡＰＩ１０２３に渡される。
【０１５６】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、受け取ったパラメタ（別言すれば、Key1）に基づき、検索対象のデータがどこにあるのかを特定する。
【０１５７】
該当ブロックが副ブロックチェーン２０２にある場合には、副ブロックチェーン２０２の最後に記録するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３にリライトデータ３０１が渡される（符号Ｈ１参照）。リライトデータ３０１は、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。簡易コンセンサスロジック１０４３は、リライトデータ３０１を副ブロックチェーン２０２の末尾に記録する（符号Ｈ２参照）。この際、副ブロックチェーン２０２のブロックの書き換えであることを示すため、追加したブロックには、旧ブロックポインタで書き換え対象のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２が“０”に設定し、リードキャッシュ１０３４にリライトデータ３０１を書き込む（符号Ｈ３参照）。
【０１５８】
また、検索対象のブロックが主ブロックチェーン２０１にある場合には、リライトデータを副ブロックチェーン２０２の最後に追記するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３が使用される（符号Ｈ１参照）。リライトデータ３０１は、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。そして、簡易コンセンサスロジック１０４３によって処理が行なわれ、副ブロックチェーン２０２への記録が行なわれる（符号Ｈ２参照）。この際、追加されるブロックには、主ブロックチェーン２０１の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、リライトデータ３０１をリードキャッシュ１０３４に書き込む（符号Ｈ３参照）。
【０１５９】
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ１０３４には未コミットを示す“０”が立っている。そこで、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１及び対応するコミット待ちキュー１０４１（「コミット待ちキュー＃１」と称してもよい。）にデータを再登録する（符号Ｈ４参照）。これにより、コンセンサスロジック１０４２によって処理が行なわれ、主ブロックチェーン２０１への記録が行なわれる（符号Ｈ５参照）。
【０１６０】
また、検索対象のブロックが発見できない場合には、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３をエラーで復帰させる。
【０１６１】
図１８は、図１５に示したデータ管理装置３におけるホスト−ＩＰテーブルの削除処理を説明するブロック図である。
【０１６２】
ホスト−ＩＰデータの削除の際は、管理端末４は、ＤＮＳデータ作成更新部３０１４を経由して、デリートデータ３０１を渡す。デリートデータ３０１は、書き換えようとするデータを示すKey1とデータ内容のValue1における“Delete”とを含み、リライトＡＰＩ１０２３に渡される。
【０１６３】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、受け取ったパラメタ（別言すれば、Key1）に基づき、検索対象のデータがどこにあるのかを特定する。
【０１６４】
該当ブロックが副ブロックチェーン２０２にある場合には、副ブロックチェーン２０２の最後に記録するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３にデリートデータ３０１が渡される（符号Ｉ１参照）。デリートデータ３０１は、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。簡易コンセンサスロジック１０４３は、デリートデータ３０１を副ブロックチェーン２０２の末尾に記録する（符号Ｉ２参照）。この際、副ブロックチェーン２０２のブロックの書き換えであることを示すため、追加したブロックには、旧ブロックポインタで書き換え対象のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２が“０”に設定し、リードキャッシュ１０３４にデリートデータ３０１を書き込む（符号Ｉ３参照）。
【０１６５】
また、検索対象のブロックが主ブロックチェーン２０１にある場合には、リライトデータを副ブロックチェーン２０２の最後に追記するために、リライトキャッシュ１０３５を経由してブロックチェーンサブシステム１０４の簡易コンセンサスロジック１０４３が使用される（符号Ｉ１参照）。デリートデータ３０１は、簡易コンセンサスロジック１０４３の使用のために、対応するコミット待ちキュー１０４１（「コミット待ちキュー＃２」と称してもよい。）に書き込まれる。そして、簡易コンセンサスロジック１０４３によって処理が行なわれ、副ブロックチェーン２０２への記録が行なわれる（符号Ｉ２参照）。この際、追加されるブロックには、主ブロックチェーン２０１の既存のブロックの書き換えであることを示す旧ブロックポインタによって、当該既存のブロックを指し示す情報が付加される。また、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、デリートデータ３０１をリードキャッシュ１０３４に書き込む（符号Ｉ３参照）。
【０１６６】
更に、検索対象のブロックが未コミットの場合には、リードキャッシュ１０３４には未コミットを示す“０”が立っている。そこで、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１及び対応するコミット待ちキュー１０４１（「コミット待ちキュー＃１」と称してもよい。）にデータを再登録する（符号Ｉ４参照）。これにより、コンセンサスロジック１０４２によって処理が行なわれ、主ブロックチェーン２０１への記録が行なわれる（符号Ｉ５参照）。
【０１６７】
図１９は、図１５に示したデータ管理装置３におけるホスト−ＩＰテーブルの参照処理を説明するブロック図である。
【０１６８】
ＤＮＳプロトコルハンドリング部３０１２は、ＤＮＳクライアント３０１１からの問い合わせに従って、ＤＮＳデータ参照部３０１３にクエリによる問い合わせを行なう（符号Ｊ１参照）。
【０１６９】
データの読み込みの際に、ＤＮＳデータ参照部３０１３は、リードＡＰＩ１０２２に必要とするデータのＫｅｙとデータを格納するバッファ（別言すれば、Ｖａｌｕｅ）をパラメタとして渡して、リードＡＰＩ１０２２を呼び出す。
【０１７０】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、与えられたＫｅｙから、検索対象ブロックを検索する。
【０１７１】
リード／ライト／リライト制御部１０３は、検索対象のブロックが副ブロックチェーン２０２にある場合には、副ブロックチェーン２０２の最新のブロックから順に検索してデータを読み出し、リードキャッシュ１０３４に書き込む（符号Ｊ２参照）。
【０１７２】
また、リード／ライト／リライト制御部１０３は、検索対象のブロックが副ブロックチェーン２０２に無い場合には、主ブロックチェーン２０１を検索する。検索対象のブロックが主ブロックチェーン２０１において見つかった場合には、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１からデータを読み出し、リードキャッシュ１０３４に書き込む（符号Ｊ３参照）。
【０１７３】
更に、コンセンサスロジック１０４２でコミットが取れておらずにデータがコミット待ちキュー１０４１にあり、ブロックチェーンに書き込みが済んでない場合には、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１のデータをリードキャッシュ１０３４にコピーする（符号Ｊ４参照）。併せて、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定して、未コミットであることを示す。
【０１７４】
そして、リード／ライト／リライト制御部１０３は、リードデータをコミットフラグ１０３２と共にリードＡＰＩ１０２２に渡して、リードＡＰＩ１０２２を復帰させる。また、リード／ライト／リライト制御部１０３は、検索の結果、対象データがどこにも存在しない場合には、ＡＰＩを異常復帰させる。
【０１７５】
アドレスが存在した場合には、ＤＮＳデータ参照部３０１３は、リードＡＰＩ１０２２の結果をＤＮＳプロトコルハンドリング部３０１２に返す（符号Ｊ５参照）。
【０１７６】
ＤＮＳプロトコルハンドリング部３０１２は、ＤＮＳクライアント３０１１に応答を返す。
【０１７７】
〔Ｂ−２〕動作例
図１６に示した書き込み処理を、図２０に示すフローチャート（ステップＳ４１〜Ｓ４４）に従って説明する。
【０１７８】
ＤＮＳデータ作成更新部３０１４は、ライトＡＰＩ１０２１に書き込みのためのＫｅｙ“Host-name”及びＶａｌｕｅ“IP-addr”を渡す（ステップＳ４１）。
【０１７９】
リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１にＫｅｙ及びＶａｌｕｅを書き込み、コミットフラグ１０３２を“０”に設定する（ステップＳ４２）。
【０１８０】
リード／ライト／リライト制御部１０３は、書き込みデータをブロックチェーンサブシステム１０４に書き込み、コミット待ちキュー１０４１でコミット待ちにさせる（ステップＳ４３）。
【０１８１】
ブロックチェーンサブシステム１０４は、コンセンサスロジック１０４２においておコンセンサスが取れたら主ブロックチェーン２０１にデータを書き込み、ライトキャッシュ１０３１をクリアする（ステップＳ４４）。そして、処理は終了する。
【０１８２】
次に、図１７に示したホスト−ＩＰテーブルの更新処理を、図２１及び図２２に示すフローチャート（ステップＳ５１〜Ｓ６３）に従って説明する。なお、図２１にはステップＳ５１〜Ｓ５８の処理を示し、図２２にはステップＳ５９〜Ｓ６３の処理を示す。
【０１８３】
ＤＮＳデータ作成更新部３０１４は、リライトＡＰＩ１０２３に書き換えのためのＫｅｙ“Host-name”及びＶａｌｕｅ“IP-addr”を渡す（図２１のステップＳ５１）。
【０１８４】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、リライトＡＰＩ１０２３が受けったＫｅｙに基づき、副ブロックチェーン２０２，主ブロックチェーン２０１の順でデータを検索する（図２１のステップＳ５２）。
【０１８５】
検索モジュール１０３３は、副ブロックチェーン２０２に該当データが存在するかを判定する（図２１のステップＳ５３）。
【０１８６】
副ブロックチェーン２０２に該当データが存在する場合には（図２１のステップＳ５３のＹｅｓルート参照）、処理は図２２のステップＳ５９へ進む。
【０１８７】
一方、副ブロックチェーン２０２に該当データが存在しない場合には（図２１のステップＳ５３のＮｏルート参照）、検索モジュール１０３３は、主ブロックチェーン２０１に該当データが存在するかを判定する（図２１のステップＳ５４）。
【０１８８】
主ブロックチェーン２０１に該当データが存在する場合には（図２１のステップＳ５４のＹｅｓルート参照）、処理は図２２のステップＳ６２へ進む。
【０１８９】
一方、主ブロックチェーン２０１に該当データが存在しない場合には（図２１のステップＳ５４のＮｏルート参照）、検索モジュール１０３３は、ライトキャッシュ１０３１に該当データが存在するかを判定する（図２１のステップＳ５５）。
【０１９０】
ライトキャッシュ１０３１に該当データが存在しない場合には（図２１のステップＳ５５のＮｏルート参照）、処理は図２１のステップＳ５６へ進む。そして、リード／ライト／リライト制御部１０３は、書き換え対象のデータがないため、リライト失敗としてリライトＡＰＩ１０２３をエラー復帰させ（図２１のステップＳ５６）、処理は終了する。
【０１９１】
一方、ライトキャッシュ１０３１に該当データが存在する場合には（図２１のステップＳ５５のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定する。また、リード／ライト／リライト制御部１０３は、Ｋｅｙ及びＶａｌｕｅをリードキャッシュ１０３４に書き込み、リライトＡＰＩ１０２３を正常復帰させる（図２１のステップＳ５７）。
【０１９２】
リード／ライト／リライト制御部１０３は、コミット待ちキュー＃１を書き換え、コンセンサスロジック１０４２に主ブロックチェーン２０１への書き込みを依頼する（図２１のステップＳ５８）。そして、処理は終了する。
【０１９３】
図２１のステップＳ５３において、副ブロックチェーン２０２に該当データが存在する場合には（図２１のステップＳ５３のＹｅｓルート参照）、処理は図２２のステップＳ５９へ進む。すなわち、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡されたＫｅｙ及びＶａｌｕｅをリライトキャッシュ１０３５に書き込み、リライトＡＰＩ１０２３を復帰させる（図２２のステップＳ５９）。
【０１９４】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３にＫｅｙ及びＶａｌｕｅを渡す。また、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー＃２を経由して新たなブロックを副ブロックチェーン２０２に書き込む（図２２のステップＳ６０）。
【０１９５】
リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定し、Ｋｅｙ及びＶａｌｕｅをリードキャッシュ１０３４に書き込み、リライトＡＰＩ１０２３を正常復帰させる（図２２のステップＳ６１）。そして、処理は終了する。
【０１９６】
図２１のステップＳ５４において、主ブロックチェーン２０１に該当データが存在する場合には（図２１のステップＳ５４のＹｅｓルート参照）、処理は図２２のステップＳ６２へ進む。すなわち、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡されたＫｅｙ及びＶａｌｕｅをリライトキャッシュ１０３５に書き込み、リライトＡＰＩ１０２３を復帰させる（図２２のステップＳ６２）。
【０１９７】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３にＫｅｙ及びＶａｌｕｅを渡す。また、リード／ライト／リライト制御部１０３は、コミット待ちキュー＃２を経由して副ブロックチェーン２０２に新たなブロックを書き込む。更に、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする（図２２のステップＳ６３）。そして、処理は図２２のステップＳ６１へ進む。
【０１９８】
次に、図１８に示したホスト−ＩＰテーブルの削除処理を、図２３及び図２４に示すフローチャート（ステップＳ７１〜Ｓ８６）に従って説明する。なお、図２３にはステップＳ７１〜Ｓ７８の処理を示し、図２４にはステップＳ７９〜Ｓ８６の処理を示す。
【０１９９】
ＤＮＳデータ作成更新部３０１４は、リライトＡＰＩ１０２３に書き換えのためのＫｅｙ“Host-name”及びＶａｌｕｅ“Delete”を渡す（図２３のステップＳ７１）。
【０２００】
リード／ライト／リライト制御部１０３の検索モジュール１０３３は、リライトＡＰＩ１０２３が受けったＫｅｙに基づき、副ブロックチェーン２０２，主ブロックチェーン２０１の順でデータを検索する（図２３のステップＳ７２）。
【０２０１】
検索モジュール１０３３は、副ブロックチェーン２０２に該当データが存在するかを判定する（図２３のステップＳ７３）。
【０２０２】
副ブロックチェーン２０２に該当データが存在する場合には（図２３のステップＳ７３のＹｅｓルート参照）、処理は図２４のステップＳ７９へ進む。
【０２０３】
一方、副ブロックチェーン２０２に該当データが存在しない場合には（図２３のステップＳ７３のＮｏルート参照）、検索モジュール１０３３は、主ブロックチェーン２０１に該当データが存在するかを判定する（図２３のステップＳ７４）。
【０２０４】
主ブロックチェーン２０１に該当データが存在する場合には（図２３のステップＳ７４のＹｅｓルート参照）、処理は図２４のステップＳ８３へ進む。
【０２０５】
一方、主ブロックチェーン２０１に該当データが存在しない場合には（図２３のステップＳ７４のＮｏルート参照）、検索モジュール１０３３は、ライトキャッシュ１０３１に該当データが存在するかを判定する（図２３のステップＳ７５）。
【０２０６】
ライトキャッシュ１０３１に該当データが存在しない場合には（図２３のステップＳ７５のＮｏルート参照）、処理は図２４のステップＳ８６へ進む。
【０２０７】
一方、ライトキャッシュ１０３１に該当データが存在する場合には（図２３のステップＳ７５のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、コミット待ちキュー＃１のＶａｌｕｅが“Delete”であるかを判定する（図２３のステップＳ７６）。
【０２０８】
コミット待ちキュー＃１のＶａｌｕｅが“Delete”である場合には（図２３のステップＳ７６のＹｅｓルート参照）、処理は図２４のステップＳ８６へ進む。
【０２０９】
一方、コミット待ちキュー＃１のＶａｌｕｅが“Delete”でない場合には（図２３のステップＳ７６のＮｏルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定する。また、リード／ライト／リライト制御部１０３は、Ｋｅｙ及びＶａｌｕｅをリードキャッシュ１０３４に書き込み、リライトＡＰＩ１０２３を正常復帰させる（図２３のステップＳ７７）。
【０２１０】
リード／ライト／リライト制御部１０３は、コミット待ちキュー＃１を書き換え、コンセンサスロジック１０４２に主ブロックチェーン２０１への書き込みを依頼する（図２３のステップＳ７８）。そして、処理は終了する。
【０２１１】
図２３のステップＳ７３において、副ブロックチェーン２０２に該当データが存在する場合には（図２３のステップＳ７３のＹｅｓルート参照）、処理は図２４にステップＳ７９へ進む。すなわち、リード／ライト／リライト制御部１０３は、読み出したデータのＶａｌｕｅが“Delete”であるかを判定する（図２４のステップＳ７９）。
【０２１２】
読み出したデータのＶａｌｕｅが“Delete”である場合には（図２４のステップＳ７９のＹｅｓルート参照）、処理は図２４のステップＳ８６へ進む。
【０２１３】
一方、読み出したデータのＶａｌｕｅが“Delete”でない場合には（図２４のステップＳ７９のＮｏルート参照）、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡された“Host-name”及び“Delete”をリライトキャッシュ１０３５に書き込む。また、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３を復帰させる（図２４のステップＳ８０）。
【０２１４】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３に“Host-name”及び“Delete”を渡す。また、リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２の書き換え対象のブロックをポイントする参照情報と共に、コミット待ちキュー＃２を経由して新たなブロックを副ブロックチェーン２０２に書き込む（図２４のステップＳ８１）。
【０２１５】
リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定し、Ｋｅｙ及び“Delete”をリードキャッシュ１０３４に書き込む（図２４のステップＳ８２）。そして、処理は終了する。
【０２１６】
図２３のステップＳ７４において、主ブロックチェーン２０１に該当データが存在する場合には（図２３のステップＳ７４のＹｅｓルート参照）、処理は図２４のステップＳ８３へ進む。すなわち、リード／ライト／リライト制御部１０３は、読み出したデータのＶａｌｕｅが“Delete”であるかを判定する（図２４のステップＳ８３）。
【０２１７】
読み出したデータのＶａｌｕｅが“Delete”である場合には（図２４のステップＳ８３のＹｅｓルート参照）、処理は図２４のステップＳ８６へ進む。
【０２１８】
一方、読み出したデータのＶａｌｕｅが“Delete”でない場合には（図２４のステップＳ８３のＮｏルート参照）、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３に渡された“Host-name”及び“Delete”をリライトキャッシュ１０３５に書き込む。また、リード／ライト／リライト制御部１０３は、リライトＡＰＩ１０２３を復帰させる（図２４のステップＳ８４）。
【０２１９】
リード／ライト／リライト制御部１０３は、簡易コンセンサスロジック１０４３に“Host-name”及び“Delete”を渡す。また、リード／ライト／リライト制御部１０３は、コミット待ちキュー＃２を経由して副ブロックチェーン２０２に新たなブロックを書き込む。更に、リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１に存在する書き換え対象のブロックを新たなブロックの旧ブロックポインタでポイントする（図２４のステップＳ８５）。そして、処理は図２４のステップＳ８２へ進む。
【０２２０】
図２３のステップＳ７５において、ライトキャッシュ１０３１に該当データが存在しない場合には（図２３のステップＳ７５のＮｏルート参照）、処理は図２４のステップＳ８６へ進む。また、図２３のステップＳ７６において、コミット待ちキュー＃１のＶａｌｕｅが“Delete”である場合にも（図２３のステップＳ７６のＹｅｓルート参照）、処理は図２４のステップＳ８６へ進む。リード／ライト／リライト制御部１０３は、削除するデータが無いため、Delete失敗としてリライトＡＰＩ１０２３をエラー復帰させる（図２４のステップＳ８６）。そして、処理は終了する。
【０２２１】
次に、図１９に示したホスト−ＩＰテーブルの参照処理を、図２５に示すフローチャート（ステップＳ９１〜Ｓ１０１）に従って説明する。
【０２２２】
ＤＮＳデータ参照部３０１３は、リードＡＰＩ１０２２に読み込みのためのＫｅｙ“host-name1”を渡す（ステップＳ９１）。
【０２２３】
リード／ライト／リライト制御部１０３は、Ｋｅｙに基づき、副ブロックチェーン２０２を最新のブロックから順に検索する（ステップＳ９２）。
【０２２４】
リード／ライト／リライト制御部１０３は、副ブロックチェーン２０２に該当データが存在するかを判定する（ステップＳ９３）。
【０２２５】
副ブロックチェーン２０２に該当データが存在しない場合には（ステップＳ９３のＮｏルート参照）、処理はステップＳ９８へ進む。
【０２２６】
一方、副ブロックチェーン２０２に該当データが存在する場合には（ステップＳ９３のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“１”に設定する。また、リード／ライト／リライト制御部１０３は、リードＡＰＩ１０２２にＶａｌｕｅ“IP-addr”を設定する（ステップＳ９４）。
【０２２７】
リード／ライト／リライト制御部１０３は、Ｖａｌｕｅの値が“Delete”であるかを判定する（ステップＳ９５）。
【０２２８】
Ｖａｌｕｅの値が“Delete”でない場合には（ステップＳ９５のＮｏルート参照）、リード／ライト／リライト制御部１０３は、検索成功としてリードＡＰＩ１０２２にＶａｌｕｅを返す（ステップＳ９６）。そして、処理は終了する。
【０２２９】
一方、Ｖａｌｕｅの値が“Delete”である場合には（ステップＳ９５のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、検索失敗としてリードＡＰＩ１０２２を異常復帰させる（ステップＳ９７）。そして、処理は終了する。
【０２３０】
ステップＳ９３において、副ブロックチェーン２０２に該当データが存在しない場合には（ステップＳ９３のＮｏルート参照）、リード／ライト／リライト制御部１０３は、Ｋｅｙに基づき、主ブロックチェーン２０１を検索する（ステップＳ９８）。
【０２３１】
リード／ライト／リライト制御部１０３は、主ブロックチェーン２０１に該当データが存在するかを判定する（ステップＳ９９）。
【０２３２】
主ブロックチェーン２０１に該当データが存在する場合には（ステップＳ９９のＹｅｓルート参照）、処理はステップＳ９４へ移行する。
【０２３３】
一方、主ブロックチェーン２０１に該当データが存在しない場合には（ステップＳ９９のＮｏルート参照）、リード／ライト／リライト制御部１０３は、ライトキャッシュ１０３１に該当データが存在するかを判定する（ステップＳ１００）。
【０２３４】
ライトキャッシュ１０３１に該当データが存在しない場合には（ステップＳ１００のＮｏルート参照）、処理はステップＳ９７へ移行する。
【０２３５】
一方、ライトキャッシュ１０３１に該当データが存在する場合には（ステップＳ１００のＹｅｓルート参照）、リード／ライト／リライト制御部１０３は、リードキャッシュ１０３４のコミットフラグ１０３２を“０”に設定する。また、リード／ライト／リライト制御部１０３は、リードＡＰＩ１０２２にＶａｌｕｅ“IP-addr”を設定する（ステップＳ１０１）。そして、処理はステップＳ９５へ移行する。
【０２３６】
〔Ｂ−３〕効果
上述した第２実施形態の一例におけるデータ管理装置３によれば、第１実施形態の一例と同様の効果を奏することができると共に、例えば以下の効果を奏することができる。
【０２３７】
ホストの追加及び削除の頻度が主ブロックチェーン２０１への書き込みの頻度よりも低いＤＮＳサーバにおいても、主ブロックチェーン２０１及び副ブロックチェーン２０２を使用したデータの新規作成処理，更新処理，削除処理及び参照処理を実施できる。
【０２３８】
〔Ｃ〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０２３９】
〔Ｄ〕付記
以上の第１及び第２実施形態に関し、さらに以下の付記を開示する。
【０２４０】
（付記１）
第１のデータを第１のブロックチェーンに書き込む書き込み処理部と、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む書き換え処理部と、
を備える、データ管理装置。
【０２４１】
（付記２）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定する第１判定部を更に備え、
前記書き換え処理部は、前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
付記１に記載のデータ管理装置。
【０２４２】
（付記３）
前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定する第２判定部を更に備え、
前記書き換え処理部は、前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
付記２に記載のデータ管理装置。
【０２４３】
（付記４）
前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定する第３判定部を更に備え、
前記書き込み処理部は、前記第３判定部によって前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第１のブロックチェーンに書き込む、
付記３に記載のデータ管理装置。
【０２４４】
（付記５）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定する第１判定部と、
前記第１のブロックチェーン又は前記第２のブロックチェーンからデータを読み出す読み出し処理部と、
を更に備え、
前記読み出し処理部は、前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第２のブロックチェーンから読み出す、
付記１〜４のいずれか１項に記載のデータ管理装置。
【０２４５】
（付記６）
前記第１判定部によって前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定する第２判定部を更に備え、
前記読み出し処理部は、前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第１のブロックチェーンから読み出す、
付記５に記載のデータ管理装置。
【０２４６】
（付記７）
前記第２判定部によって前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定する第３判定部を更に備え、
前記読み出し処理部は、前記第３判定部によって前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記第１のデータを前記キャッシュメモリから読み出す、
付記６に記載のデータ管理装置。
【０２４７】
（付記８）
コンピュータに、
第１のデータを第１のブロックチェーンに書き込み、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む、
処理を実行させる、データ管理プログラム。
【０２４８】
（付記９）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記８に記載のデータ管理プログラム。
【０２４９】
（付記１０）
前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記９に記載のデータ管理プログラム。
【０２５０】
（付記１１）
前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定し、
前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第１のブロックチェーンに書き込む、
処理を前記コンピュータに実行させる、付記１０に記載のデータ管理プログラム。
【０２５１】
（付記１２）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第２のブロックチェーンから読み出す、
処理を前記コンピュータに実行させる、付記８〜１１のいずれか１項に記載のデータ管理プログラム。
【０２５２】
（付記１３）
前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第１のブロックチェーンから読み出す、
処理を前記コンピュータに実行させる、付記１２に記載のデータ管理プログラム。
【０２５３】
（付記１４）
前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定し、
前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記第１のデータを前記キャッシュメモリから読み出す、
処理を前記コンピュータに実行させる、付記１３に記載のデータ管理プログラム。
【０２５４】
（付記１５）
第１のデータを第１のブロックチェーンに書き込み、
前記第１のブロックチェーンにおける前記第１のデータの存在位置をポイントして、前記第１のデータの更新後のデータを、第２のブロックチェーンに書き込む、
データ管理方法。
【０２５５】
（付記１６）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
付記１５に記載のデータ管理方法。
【０２５６】
（付記１７）
前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記更新後のデータを前記第２のブロックチェーンに書き込む、
付記１６に記載のデータ管理方法。
【０２５７】
（付記１８）
前記第１のデータが前記第１のブロックチェーンに存在しないと判定された場合に、前記第１のデータがキャッシュメモリに存在するかを判定し、
前記第１のデータが前記キャッシュメモリに存在すると判定された場合に、前記キャッシュメモリを介して前記更新後のデータを前記第１のブロックチェーンに書き込む、
付記１７に記載のデータ管理方法。
【０２５８】
（付記１９）
前記第１のデータが前記第２のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第２のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第２のブロックチェーンから読み出す、
付記１５〜１８のいずれか１項に記載のデータ管理方法。
【０２５９】
（付記２０）
前記第１のデータが前記第２のブロックチェーンに存在しないと判定された場合に、前記第１のデータが前記第１のブロックチェーンに存在するかを判定し、
前記第１のデータが前記第１のブロックチェーンに存在すると判定された場合に、前記第１のデータを前記第１のブロックチェーンから読み出す、
付記１９に記載のデータ管理方法。
【符号の説明】
【０２６０】
１００              ：データ管理システム
１，３              ：データ管理装置
１０１              ：アプリケーション
１０１              ：アプリケーションプログラム
１０２              ：リード／ライト／リライトＡＰＩ
１０２１            ：ライトＡＰＩ
１０２２            ：リードＡＰＩ
１０２３            ：リライトＡＰＩ
１０３              ：リード／ライト／リライト制御部
１０３１            ：ライトキャッシュ
１０３２            ：コミットフラグ
１０３３            ：検索モジュール
１０３４            ：リードキャッシュ
１０３５            ：リライトキャッシュ
１０４              ：ブロックチェーンサブシステム
１０４１            ：キュー
１０４２            ：コンセンサスロジック
１０４３            ：簡易コンセンサスロジック
１１                ：ＣＰＵ
１１１              ：読み出し処理部
１１２              ：書き込み処理部
１１３              ：書き換え処理部
１１４              ：第１判定部
１１５              ：第２判定部
１１６              ：第３判定部
１２                ：メモリ
１３                ：表示制御部
１３０              ：表示装置
１４                ：記憶装置
１５                ：入力Ｉ／Ｆ
１５１              ：マウス
１５２              ：キーボード
１６                ：読み書き処理部
１６０              ：記録媒体
１７                ：通信Ｉ／Ｆ
２０１              ：主ブロックチェーン
２０２              ：副ブロックチェーン
３００              ：データ管理システム
３０１              ：リライトデータ，デリートデータ，ライトデータ
３０１１            ：クライアント
３０１１            ：ＤＮＳクライアント
３０１２            ：ＤＮＳプロトコルハンドリング部
３０１３            ：ＤＮＳデータ参照部
３０１４            ：ＤＮＳデータ作成更新部
４                  ：管理端末
【図１】
2019185296.tif 000003
【図２】
2019185296.tif 000004
【図３】
2019185296.tif 000005
【図４】
2019185296.tif 000006
【図５】
2019185296.tif 000007
【図６】
2019185296.tif 000008
【図７】
2019185296.tif 000009
【図８】
2019185296.tif 000010
【図９】
2019185296.tif 000011
【図１０】
2019185296.tif 000012
【図１１】
2019185296.tif 000013
【図１２】
2019185296.tif 000014
【図１３】
2019185296.tif 000015
【図１４】
2019185296.tif 000016
【図１５】
2019185296.tif 000017
【図１６】
2019185296.tif 000018
【図１７】
2019185296.tif 000019
【図１８】
2019185296.tif 000020
【図１９】
2019185296.tif 000021
【図２０】
2019185296.tif 000022
【図２１】
2019185296.tif 000023
【図２２】
2019185296.tif 000024
【図２３】
2019185296.tif 000025
【図２４】
2019185296.tif 000026
【図２５】
2019185296.tif 000027