IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ バイドゥ オンライン ネットワーク テクノロジー(ペキン) カンパニー リミテッドの特許一覧

特許7050133ブロックチェーンのデータ記憶方法、装置、電子機器及び媒体
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-30
(45)【発行日】2022-04-07
(54)【発明の名称】ブロックチェーンのデータ記憶方法、装置、電子機器及び媒体
(51)【国際特許分類】
   G06F 16/22 20190101AFI20220331BHJP
   G06F 16/182 20190101ALI20220331BHJP
【FI】
G06F16/22
G06F16/182
【請求項の数】 16
【外国語出願】
(21)【出願番号】P 2020153786
(22)【出願日】2020-09-14
(65)【公開番号】P2021131842
(43)【公開日】2021-09-09
【審査請求日】2020-09-25
(31)【優先権主張番号】202010106770.X
(32)【優先日】2020-02-20
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】512015127
【氏名又は名称】バイドゥ オンライン ネットワーク テクノロジー(ペキン) カンパニー リミテッド
(74)【代理人】
【識別番号】100114557
【弁理士】
【氏名又は名称】河野 英仁
(74)【代理人】
【識別番号】100078868
【弁理士】
【氏名又は名称】河野 登夫
(72)【発明者】
【氏名】シャオ,ウェイ
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】米国特許出願公開第2017/0364552(US,A1)
【文献】米国特許出願公開第2019/0354944(US,A1)
【文献】中国特許出願公開第110390524(CN,A)
【文献】中国特許出願公開第109255056(CN,A)
【文献】米国特許出願公開第2018/0189312(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/22-16/958
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンノードに配置されたデータ記憶装置によって実行されるブロックチェーンのデータ記憶方法であって、
現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するステップであって、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点であるステップと、
前記新たなワールドツリールートを現在のブロックに対応して記憶するステップと、
既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するステップであって、前記スナップショットワールドツリーのデータ点はエンティティデータ点であるステップと、を含むことを特徴とするブロックチェーンのデータ記憶方法。
【請求項2】
トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するステップは、
前記トランザクション要求の実行結果における書き込みデータがデータオブジェクトを新たに追加することに関わる場合、前のブロックのワールドツリーを基にエンティティデ
ータ点を新たに追加し、且つ新たに追加されたデータオブジェクトのデータ値を対応して記憶するステップと、
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を更新することに関わる場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つ更新されたデータ値を記録するステップと、
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を削除することに関わる場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つデータ値の削除を記録するステップと、
新たに追加されたエンティティデータ点またはパッチデータ点に基づいて、対応する上位レベルのデータ点およびワールドツリールートを更新して生成するステップと、を含むことを特徴とする請求項1に記載の方法。
【請求項3】
前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するステップは、
前のスナップショットブロックから現在のスナップショットブロックまでのトランザクション要求を一つずつ順次実行するステップと、
トランザクション要求を一つずつ実行するプロセスにおいて、現在のスナップショットブロックのスナップショットワールドツリーが生成されるまで、トランザクション要求の実行結果における書き込みデータに応じて、前記前のスナップショットブロックに対応するスナップショットワールドツリーを基に、エンティティデータ点に対応するデータ値を更新し、且つ対応するパッチデータ点を削除するステップと、を含むことを特徴とする請求項1に記載の方法。
【請求項4】
現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、
現在のスナップショットブロックの後のブロックのワールドツリーのパッチデータ点を、現在のスナップショットワールドツリーのエンティティデータ点を指さすように更新するステップをさらに含むことを特徴とする請求項3に記載の方法。
【請求項5】
既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定するステップは、
設定されたスナップショットブロック間隔に従って、前のスナップショットブロックとの間のブロック間隔が前記スナップショットブロック間隔に達したブロックを、現在のスナップショットブロックとして確定するステップを含むことを特徴とする請求項1に記載の方法。
【請求項6】
前記方法は、
他のノードから少なくとも1つの同期ブロックを取得するステップをさらに含み、前記同期ブロックはローカルに記憶されたブロックチェーンにおける既存のブロックに接続され、前記既存のブロックは前記同期ブロックの前のブロックであることを特徴とする請求項1に記載の方法。
【請求項7】
前記方法は、前記同期ブロックに対するデータアクセス操作が発生すると、前記同期ブロックに応じてローカルデータのワールドツリーを更新し、新たなデータ点および新たなワールドツリールートを生成するステップをさらに含むことを特徴とする請求項6に記載の方法。
【請求項8】
前記同期ブロックに応じてローカルデータのワールドツリーを更新するステップは、
前記前のブロックが最新スナップショットブロックの後の位置にある場合、前記同期ブロックに記載されたワールドツリーのデータ点に応じて、ローカルデータの既存のワールドツリーを基に、前記同期ブロックのワールドツリーを構築するステップと、
前記前のブロックが前記最新スナップショットブロックより前の位置にある場合、前記最新スナップショットブロックから前記前のブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーに対して更新取り消しを行うステップと、
前記同期ブロックに記載されたワールドツリーのデータ点に応じて、更新取り消しが行われた後のスナップショットワールドツリーを基に、前記同期ブロックのワールドツリーを構築するステップと、を含むことを特徴とする請求項7に記載の方法。
【請求項9】
前記方法は、
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さ以上である場合、ローカルデータのワールドツリールートを正しいブロック分岐のワールドツリールートに切り替えるステップと、
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さより小さい場合、前記最新スナップショットブロックから前記分岐点の間のエラー分岐ブロックまで、後から前へと、トランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーに対して更新取り消しを行うステップと、
前記分岐点から、正しい分岐ブロックのトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新するステップと、をさらに含むことを特徴とする請求項8に記載の方法。
【請求項10】
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新するステップは、
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われたスナップショットワールドツリーを最新スナップショットブロック又は最新ブロックの位置まで更新し、スナップショットワールドツリーを保持するステップ、を含むことを特徴とする請求項9に記載の方法。
【請求項11】
前記方法は、現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求のデータをブロック単位で、ローカルデータに順次記憶するステップ、をさらに含むことを特徴とする請求項1に記載の方法。
【請求項12】
現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、
現在のスナップショットブロックの前のブロックに対応するワールドツリーを削除するステップ、をさらに含むことを特徴とする請求項1に記載の方法。
【請求項13】
ブロックチェーンノードに配置されるブロックチェーンのデータ記憶装置であって、
現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するためのワールドツリー更新モジュールであって、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点であるワールドツリー更新モジュールと、
前記新たなワールドツリールートを現在のブロックに対応して記憶するためのルート記憶モジュールと、
既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するためのスナップショット更新モジュールであって、前記スナップショットワールドツリーのデータ点はエンティティデータ点であるスナップショット更新モジュールとを含むことを特徴とするブロックチェーンのデータ記憶装置。
【請求項14】
電子機器であって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサと通信可能に接続されたメモリとを備える電子機器であって、
前記メモリには、前記少なくとも1つのプロセッサによって実行可能な命令が格納されており、前記命令が前記少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサが請求項1~12のいずれか1項に記載のブロックチェーンのデータ記憶方法を実行することを可能にする、ことを特徴とする電子機器。
【請求項15】
コンピュータ命令が格納されている非一時的コンピュータ可読記憶媒体であって、
前記コンピュータ命令はコンピュータに請求項1~12のいずれか1項に記載のブロックチェーンのデータ記憶方法を実行させるためのものであることを特徴とする非一時的コンピュータ可読記憶媒体。
【請求項16】
コンピュータプログラムであって、
前記コンピュータプログラムがプロセッサにより実行されると、請求項1~12のいずれか1項に記載の方法を実現する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願の実施例は、コンピュータ技術分野に関し、特にブロックチェーン技術に関する。
【背景技術】
【0002】
ブロックチェーンシステムは、脱中心化の記憶システムである。各分散型ノードは、トランザクション要求を処理し、データを格納する必要がある。データの問合せをより容易にするために、ノードは、ブロックチェーン上で処理されるトランザクション要求によって影響を受けるデータをローカライズして記憶する。ブロックチェーン内に新たなトランザクション要求が発生すると、ローカルデータも絶えず更新される。
【0003】
ブロックチェーンにおいて、さらに分岐現象が発生することがあり、すなわち異なるノードは、あるブロックから、後続に発生したブロックが一致せず、分岐を形成し、分岐は複数のブロックを継続する可能性がある。ブロックチェーンシステムは分岐問題を解決するために対応するメカニズムを有し、すなわち定期的に分岐があるか否かを検査し、分岐があれば、ルールに従って一つの分岐が正しいものと確定し、他の分岐が誤ったものと確定する。ノードは誤った分岐を削除し、且つ他のノードから正しい分岐のブロックを同期に取得し、それにより分岐問題を解決する。
【0004】
しかしながら、ノードのローカルデータに対して、誤った分岐のトランザクション要求のロールバックは、ローカルデータに大きな影響を及ぼす。従来のローカルデータ記憶技術は分岐処理に対応する場合、性能がよくない。
【発明の概要】
【0005】
本出願の実施例は、分岐処理メカニズムに対応するローカルデータ記憶性能を向上させるためのブロックチェーンのデータ記憶方法、装置、電子機器及び媒体を開示する。
【0006】
第1態様において、本出願の実施例はブロックチェーンノードによって実行されるブロックチェーンのデータ記憶方法を開示しており、前記方法は、
現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するステップであって、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点であるステップと、
前記新たなワールドツリールートを現在のブロックに対応して記憶するステップと、
既存のブロックがスナップショット条件を満たす現在のスナップショットブロックになったと判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するステップであって、前記スナップショットワールドツリーのデータ点はエンティティデータ点であるステップとを含む。
【0007】
本出願の実施例の技術的解決手段は、スナップショット記憶とワールドツリー記憶の方式を組み合わせている。ブロックチェーンの設計では、分岐は迅速に修復可能である。長時間確定できないブロックはあり得ないのである。すなわち、業務上はずっと前のブロックを分岐することは許されない。これは、業務が不定状態になってしまうからである。そのため、本出願の実施例の技術的解決手段は2種の利点を有する記憶アーキテクチャを組み合わせるものを設計し、履歴データに対してスナップショット記憶方式を採用し、最新データに対してワールドツリーの記憶方式を採用することで、両者の利点を結合することができる。記憶スペースを節約するだけでなく、不安定ブロックがロールバックを必要とする時にも迅速にデータ調整を行うことができる。
【0008】
任意選択で、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するステップは、
前記トランザクション要求の実行結果における書き込みデータがデータオブジェクトを新たに追加することに関わる場合、前のブロックのワールドツリーを基にエンティティデータ点を新たに追加し、且つ新たに追加されたデータオブジェクトのデータ値を対応して記憶するステップと、
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を更新することに関わる場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つ更新されたデータ値を記録するステップと、
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を削除することに関わる場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つデータ値の削除を記録するステップと、
新たに追加されたエンティティデータ点またはパッチデータ点に基づいて、対応する上位レベルのデータ点およびワールドツリールートを更新して生成するステップと、を含む。
【0009】
任意選択で、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するステップは、
前のスナップショットブロックから現在のスナップショットブロックまでのトランザクション要求を一つずつ順次実行するステップと、
トランザクション要求を一つずつ実行するプロセスにおいて、現在のスナップショットブロックのスナップショットワールドツリーが生成されるまで、トランザクション要求の実行結果における書き込みデータに応じて、前記前のスナップショットブロックに対応するスナップショットワールドツリーを基に、エンティティデータ点に対応するデータ値を更新し、且つ対応するパッチデータ点を削除するステップと、を含む。
【0010】
任意選択で、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、
現在のスナップショットブロックの後のブロックのワールドツリーのパッチデータ点を、現在のスナップショットワールドツリーのエンティティデータ点を指さすように更新するステップをさらに含む。
【0011】
任意選択で、既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定するステップは、
設定されたスナップショットブロック間隔に従って、前のスナップショットブロックとの間のブロック間隔が前記スナップショットブロック間隔に達するブロックを、現在のスナップショットブロックと決定するステップを含む。
【0012】
任意選択で、前記方法は、
他のノードから少なくとも1つの同期ブロックを取得するステップをさらに含み、前記同期ブロックはローカルに記憶されたブロックチェーンにおける既存のブロックに接続され、前記既存のブロックは前記同期ブロックの前のブロックである。
【0013】
任意選択で、前記方法は、
前記同期ブロックに対するデータアクセス操作が発生すると、前記同期ブロックに応じてローカルデータのワールドツリーを更新し、新たなデータ点および新たなワールドツリールートを生成するステップをさらに含む。
【0014】
任意選択で、前記同期ブロックに応じてローカルデータのワールドツリーを更新するステップは、
前記前のブロックが最新スナップショットブロックの後の位置にある場合、前記同期ブロックに記載されたワールドツリーのデータ点に応じて、ローカルデータの既存のワールドツリーを基に前記同期ブロックのワールドツリーを構築するステップと、
前記前のブロックが前記最新スナップショットブロックより前の位置にある場合、前記最新スナップショットブロックから前記前のブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーの更新を取り消すステップと、前記同期ブロックに記載されたワールドツリーのデータ点に応じて、更新取り消しが行われた後のスナップショットワールドツリーを基に、前記同期ブロックのワールドツリーを構築するステップと、を含む。
【0015】
上記出願における一つの実施例は、同期ブロックを取得する時、同期ブロックのアクセスに応じて、ローカルデータを更新することができ、同期速度とローカルデータのアクセス応答を両立するという利点又は有益な効果を有する。
【0016】
任意選択で、前記方法は、
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さ以上である場合、ローカルデータのワールドツリールートを正しいブロック分岐のワールドツリールートに切り替えるステップと、
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さより小さい場合、前記最新スナップショットブロックから前記分岐点の間のエラー分岐ブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーの更新を取り消すステップと、前記分岐点から、正しい分岐ブロックのトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新するステップと、をさらに含む。
【0017】
任意選択で、トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新するステップは、
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われたスナップショットワールドツリーを最新スナップショットブロック又は最新ブロックの位置まで更新し、スナップショットワールドツリーを保持するステップ、を含む。
【0018】
本出願における一つの実施例は以下の利点又は有益な効果を有する。本出願の実施例の技術はスナップショットワールドツリーを基に一部のワールドツリーを保持し、この一部のワールドツリーは分岐ロールバックが発生する確率が高いワールドツリーであり、この一部のワールドツリーに分岐が発生する場合、ワールドツリーのルートを迅速に切り替えてローカルデータの処理を完了することができる。分岐点がスナップショットワールドツリーの前にある場合、少量のロールバックのみを行うことでローカルデータの更新を完了できる。
【0019】
任意選択で、前記方法は、
現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求のデータをブロック単位で、ローカルデータに順次記憶するステップ、をさらに含む。
【0020】
本出願における一つの実施例は以下の利点又は有益な効果を有する。ローカルデータにおいて記憶モードを組み合わせることで、プリアンブルが比較的安定し、分岐確率が低いブロックに対して、トランザクション要求の連続ブロック記憶方式を採用してデータを記録し、後続の分岐確率が高いブロックにおいて、ワールドツリーのローカル記憶方式を採用してデータを記録する。このような記憶方式の組み合わせによれば、ローカルデータの記憶空間の占有を低減することができ、ロールバックが発生する時にデータをより速く更新することもできる。
【0021】
任意選択で、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、
現在のスナップショットブロックの前のブロックに対応するワールドツリーを削除するステップ、をさらに含む。
【0022】
第2態様において、本出願の実施例はさらにブロックチェーンノードに配置されるブロックチェーンのデータ記憶装置をさらに提供し、前記装置は、
現在のブロックの各トランザクション要求を実行するプロセスにおいて、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成するためのワールドツリー更新モジュールであって、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点であるワールドツリー更新モジュールと、
前記新たなワールドツリールートを現在のブロックに対応して記憶するためのルート記憶モジュールと、
既存のブロックがスナップショット条件を満たす現在のスナップショットブロックになったと判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新するためのスナップショット更新モジュールであって、前記スナップショットワールドツリーのデータ点はエンティティデータ点であるスナップショット更新モジュールとを含む。
【0023】
第3態様において、本出願の実施例は電子機器であって、少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサと通信可能に接続されたメモリとを備える電子機器において、前記メモリには、前記少なくとも1つのプロセッサによって実行可能な命令が格納されており、前記命令が前記少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサが本出願の第1態様の実施例により提供されたブロックチェーンのデータ記憶方法を実行することを可能にする電子機器を提供する。
【0024】
第4態様において、本出願の実施例はコンピュータ命令が格納されている非一時的コンピュータ可読記憶媒体であって、前記コンピュータ命令は前記コンピュータに本出願の第1態様の実施例により提供されたブロックチェーンのデータ記憶方法を実行させるためのものである非一時的コンピュータ可読記憶媒体を提供する。
【0025】
第5態様において、本出願の実施例はコンピュータプログラムであって、前記コンピュータプログラムがプロセッサにより実行されると、本出願の第1態様の実施例により提供されたブロックチェーンのデータ記憶方法を実現する、コンピュータプログラムを提供する。
上述した任意選択可能な実施形態の他の効果について、以下に具体的な実施例を踏まえて説明する。
【図面の簡単な説明】
【0026】
図面は本出願をよりよく理解するために用いられ、本出願に対する限定を構成しない。ここで:
図1A】本出願の実施例1が提供するブロックチェーンのデータ記憶方法のフローチャートである。
図1B】本出願の実施例に適用するブロックチェーンワールドツリーの概略図1である。
図1C】本出願の実施例に適用するブロックチェーンのトランザクション要求の記憶概略図である。
図2A】本出願の実施例2が提供するブロックチェーンのデータ記憶方法のフローチャートである。
図2B】本出願の実施例に適用する同期ブロックチェーンの概略図1である。
図2C】本出願の実施例に適用する同期ブロックチェーンの概略図2である。
図3A】本出願の実施例2が提供するブロックチェーンのデータ記憶方法のフローチャートである。
図3B】本出願の実施例に適用するブロックチェーンの分岐概略図1である。
図3C】本出願の実施例に適用するブロックチェーンの分岐概略図2である。
図4A】本出願の実施例3が提供するブロックチェーンのデータ記憶方法のフローチャートである。
図4B】本出願の実施例に適用するブロックチェーンワールドツリーの概略図2である。
図5】本出願の実施例4が提供するブロックチェーンのデータ記憶装置のブロック図である。
図6】本出願の実施例に係るブロックチェーンのデータ記憶方法を実現するための電子機器のブロック図である。
【発明を実施するための形態】
【0027】
以下は図面を参照して本出願の例示的な実施例を説明し、ここでは理解に役立つため、本出願の実施例の様々な詳細が記載されるが、これらは単なる例示的なものに過ぎない。従って、本出願の範囲および要旨を逸脱しない限り、当業者が本明細書の実施例に対して様々な変更や修正を行うことができることは自明である。なお、以下の説明では、明確化及び簡略化のため、公知の機能及び構成については説明を省略する。
【0028】
実施例1.
図1Aは、本出願の実施例1が提供するブロックチェーンのデータ記憶方法のフローチャートである。本実施例の方法はブロックチェーンノードがデータをローカルに記憶する場合に適用する。ブロックチェーンの実行過程において、様々な機能を実行する多くのトランザクション要求を開始することがあり、トランザクション要求がノードに実行された後にトランザクションデータを形成し、ブロックにパッケージ化され、ブロックが順次接続され、それによりブロックチェーンを形成する。ブロックは、ブロックチェーンネットワーク内の全てのノードによって記録されるので、改ざんを防止することができる。
【0029】
トランザクションデータはブロックチェーンに記憶される以外に、ノードは一般的にローカルに記憶され、例えばユーザに対していっそう豊富で、柔軟なデータクエリサービスを提供することができる。ローカルデータは、ブロック内のトランザクション要求およびその実行結果に基づいて生成されたデータである。
【0030】
実際の異なるデータアクセス要求に応じて、各ノードが採用するローカルデータ記憶方式は異なっていてもよい。ノードのローカルデータの記憶は、ローカライズされた使用を容易にするが、ブロックチェーン分岐がロールバックを必要とする場合、より大きな調整量が発生する可能性がある。本出願はこの技術的問題に対して解決手段を提供し、ワールドツリーとスナップショット記憶方式を組み合わせた組合せ記憶手段を提供した。
【0031】
本実施例の方法はブロックチェーンノードに配置されたデータ記憶装置によって実行することができ、該装置はハードウェア及び/又はソフトウェアの方式で実現することができる。
【0032】
具体的には、図1Aに示すように、本実施例の方法は、次のステップを含む。
【0033】
S110:現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成する。ここで、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点である。
【0034】
上記操作において、ノードは現在のブロックの複数のトランザクション要求を実行する過程において、各トランザクション要求の実行結果を確定することができ、実行結果には一般的に読み出しデータ及び/又は書き込みデータが含まれる。読み出しデータとは、トランザクション要求が既存のデータオブジェクトにおけるデータ値に対する読み出し操作を指す。書き込みデータとは、トランザクション要求が既存のデータオブジェクトにおけるデータ値に対する変更又は削除操作を指し、データオブジェクトを新たに追加する操作も含むことができる。
【0035】
実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新する必要がある。ワールドツリーとは、データオブジェクトをツリー構造で格納するものである。ツリー内のデータ点は、データオブジェクトに対応し、データオブジェクトを直接格納することができ、またはデータオブジェクトの格納場所を指さすことができる。ツリー内の上位レベルデータ点は下位レベルデータ点を指さすことは、上位レベルデータ点においてデータ点を指さすポインタが記憶されていることを示す。すべてのデータオブジェクトがツリー構造を構築する順序は、ツリーインデックスアルゴリズムを使用して実現することができ、本出願の実施例はこれに限定しない。
【0036】
図1Bに示すように、ここでブロックr[i]、r[i+1]及びr[i+2]のワールドツリーを例示的に示し、iは0以上の整数である。該ブロックチェーンの例において、ブロックr[i]は最新のスナップショットブロックであり、それはルートa[i]のスナップショットワールドツリーに対応し、ブロックr[i+2]は現在実行中のブロックであり、ブロックr[i+1]及びr[i+2]はそれぞれ前のブロックワールドツリーを基に更新して通常のルートa[i+1]ワールドツリー及びルートa[i+2]ワールドツリーを得る。
【0037】
ルートa[i]のスナップショットワールドツリー内のデータ点は、エンティティデータ点、すなわち、データオブジェクトを直接指さす実際の値である。通常のワールドツリー内のデータ点は、エンティティデータ点であってもよく、一般的にパッチデータ点も含む。パッチデータ点は、データオブジェクトの実際の値を指さすことなく、既存のエンティティデータ点を基に更新操作が記録されるものである。例えば、パッチデータ点には既存のデータオブジェクトが削除されること、またはそのうちの特定の値が置き換えられることが記録される。パッチデータ点には、更新された既存のエンティティデータ点のポインタが記録され、これにより、パッチデータ点は、エンティティデータ点を合わせてデータオブジェクトの実際の値を指さすことができる。
【0038】
図1Bの例でS110の更新操作を説明すると、具体的には以下の通りである。
【0039】
前記トランザクション要求の実行結果における書き込みデータがデータオブジェクトを新たに追加することである場合、前のブロックのワールドツリーを基にエンティティデータ点を新たに追加し、且つ新たに追加されたデータオブジェクトのデータ値を対応して記憶する。図1Bに示すように、ブロックr[i+1]の実行結果において、データ点cが指さすデータオブジェクトに対して数値変更を行い、それによりエンティティデータ点cを指さすパッチデータ点c’が生成される。同様に、ブロックr[i+2]のトランザクション要求が実行され、データ点cおよびc’が指さすデータオブジェクトが更新されると、パッチデータ点c”が生成される。
【0040】
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を更新することである場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つ更新されたデータ値を記録する。例えば、ブロックr[i+1]の実行結果にデータオブジェクトのエンティティデータ点fが新たに追加される。
【0041】
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を削除することである場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つデータ値の削除を記録する。例えば、ブロックr[i+2]においてデータ点cが指さすデータオブジェクトに対する操作が削除操作である場合、パッチデータ点c”において削除フラグとして記録されているか、または、記録されているデータ値が空である等である。
【0042】
新たに追加されたエンティティデータ点またはパッチデータ点に応じて、対応する上位レベルデータ点およびワールドツリールートを更新して生成する。例えば、パッチデータ点c’が追加されたので、ルートa[i]におけるデータ点cを指さすポインタを、データ点c’を指さすように変更する必要があり、これにより、ワールドツリールートa[i]がワールドツリールートa[i+1]に更新される。同様に、ブロックr[i+2]の実行後、ワールドツリールートはルートa[i+2]に更新される。更新されたデータ点とルートとの間に他の上位レベルデータ点がある場合、対応する更新ポインタも必要である。
【0043】
データオブジェクトに対する更新操作によるワールドツリーの更新は、上記方式に限定されず、ワールドツリーの構築方式に応じて更新方式を決定することができる。ワールドツリーの機能は、全てのデータオブジェクトの履歴変化状態を記録したことであり、且つ、異なるワールドツリールートにより、ある状態における全てのデータオブジェクトのデータ値にインデックスすることができる。
【0044】
S120:前記新たなワールドツリールートを現在のブロックに対応して記憶する。
【0045】
現在のブロックに対応するワールドツリールートは対応して記憶され、あるブロックのデータオブジェクトのデータ値を取得する必要があるとき、対応するワールドツリールートに応じてインデックスすればよい。ブロックでは、現在のワールドツリーのルートを格納するために、現在のブロックのワールドツリーに新たに追加されたデータ点(パッチデータ点および新たに追加されるエンティティデータ点を含む)を、前のブロックのワールドツリーに基づいて格納することができる。
【0046】
S130:既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新する。前記スナップショットワールドツリーのデータ点はエンティティデータ点である。
【0047】
本実施例において、あるブロックを形成してスナップショットワールドツリーが形成され、スナップショットワールドツリーはエンティティデータ点に対応し、すなわちスナップショットブロック及びその前の全てのブロックのデータオブジェクトを最終的に更新し、且つスナップショットワールドツリーに対応し、一つのワールドツリールートのみがある。スナップショットブロックの後のブロックは、一つずつ更新され、新たなパッチデータ点が生成され、複数のワールドツリールートを有する。全てのブロックがワールドツリーを更新する形式で記憶されると、全てのブロックのデータ状態を記録することができるが、大量の記憶スペースを占有し、且つ毎回記憶更新の計算量が大きい。ブロックが大量に増加するにつれて、記憶性能が不良である。本実施例の技術的解決手段は、さらに最新スナップショットワールドツリーを調整し続け、メモリをクリーンアップする。
【0048】
本実施例では、スナップショット条件を満たす現在のスナップショットブロックになる特定の既存のブロックを記憶するか否かを判定する。そうである場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新する。即ち、スナップショットワールドツリーを引き続き後方に進め、現在のスナップショットブロックの前のブロックに対応するワールドツリーは保持又は削除することができる。好ましくはワールドツリーを削除し、そうすると大量のメモリ空間を解放することができる。単に保持しておけば、スナップショットワールドツリーの最適化により、その後のワールドツリーの更新のための計算量も減少する。
【0049】
スナップショットワールドツリーの生成方式は複数の方式を採用して実現することができ、スナップショットブロックにある全てのデータオブジェクトのデータ値の記憶を反映できればよく、具体的には後続の実施例によって紹介する。
【0050】
スナップショットブロックの前のローカルデータは、スナップショットワールドツリーの方式で記憶される。好ましくは、さらに現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求をブロック単位で、ローカルデータに順次記憶する。図1Cに示すように、ブロックr[i]、r[i+1]およびr[i+2]に対応するトランザクション要求のデータ(TX)は、ブロック単位で記憶される。ブロックr[i]の前のブロックのトランザクション要求のデータは、いずれもローカルに記憶されてもよい。
【0051】
本実施例の技術的解決手段は、一部にワールドツリーの記憶手段を採用することで、組み合わせ記憶方式となる。一部のブロックの全てのワールドツリー状態を保持するだけでなく、各状態を随時検索しやすく、またそれまでのブロックをスナップショット状態に調整し、データ記憶量を減少する。上記の記憶方式は分岐が発生する時に特に有利であり、分岐が発生する時、あるブロックのワールドツリーに迅速にロールバックすることができる。また、分岐が生じない前記ブロックには、大量のワールドツリーを残す必要もない。
【0052】
実施例2.
図2Aは、本出願の実施例2が提供するブロックチェーンのデータ記憶方法のフローチャートである。本実施例では具体的に前記記憶方式に基づいて、ブロックチェーンに同期が発生する時の処理方式を紹介する。
【0053】
ブロックチェーンネットワークにおいて、様々な原因で他のノードが自機ノードに同期する同期ブロックを取得し、同期ブロックは自機ノードにない又は既存のブロックであり、1つのブロックであってもよく、1つの分岐の複数のブロックであってもよい。
【0054】
図2Aに示すように、本実施例の方法は、次のステップを含む。
【0055】
S210:現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成する。前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点である。
【0056】
S220:前記新たなワールドツリールートを現在のブロックに対応して記憶する。
【0057】
S230:既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでのトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新する。前記スナップショットワールドツリーのデータ点はエンティティデータ点である。
【0058】
S240:他のノードから少なくとも1つの同期ブロックを取得するステップであって、前記同期ブロックはローカルに記憶されたブロックチェーンにおける既存のブロックに接続され、前記既存のブロックは前記同期ブロックの前のブロックとする。
【0059】
当業者であれば理解できるように、同期ブロックを取得するタイミングは上記いずれかのステップのプロセス中又は前又は後に実現することができ、その取得タイミングは厳密に制限されない。
【0060】
同期ブロックとローカルノードの既存のブロックチェーンは一般的に関連があり、完全に無関係であれば、完全に異なるブロックチェーンに属する。同期ブロックは一般的に既存のブロックチェーンにおけるあるブロックから分岐して生成され、該分岐するブロックは同期ブロックの前のブロックである。
【0061】
S250:前記同期ブロックに対するデータアクセス操作が発生すると、前記同期ブロックに応じてローカルデータのワールドツリーを更新し、新たなデータ点および新たなワールドツリールートを生成する。
【0062】
同期ブロックを取得した後、同期ブロックにおけるデータがアクセスされる必要がある場合、通常メモリに読み出して処理される必要があり、すなわちアクセスされるブロックにローカルデータを構築した後、アクセス操作に応答する必要がある。
【0063】
同期ブロックが他のノードによって最初に生成されると、ワールドツリーが構築され、ブロック内にはトランザクション要求および実行結果が記録され、構築されたワールドツリーのデータ点が記録される。ブロックに記憶されるデータ点は、前のブロックのワールドツリーに基づいて更新されたパッチデータ点または新たに追加されたデータ点、および該同期ブロックが対応するワールドツリーのワールドツリールートである。したがって、該同期ブロックに記録されたデータ点およびワールドツリールートに基づいて、ローカルデータに更新することができる。
【0064】
具体的に、前記同期ブロックに応じてローカルデータのワールドツリーを更新することは、次のステップを含む。
【0065】
前記前のブロックが最新スナップショットブロックの後の位置にある場合、前記同期ブロックに記載されたワールドツリーのデータ点に応じて、ローカルデータの既存のワールドツリーを基に前記同期ブロックのワールドツリーを構築する。図2Bに示すように、前のブロックr[i+1]が最新のスナップショットブロックr[i]の後に位置し、同期ブロックr[i+3]’がアクセスされる必要があると仮定し、同期ブロックr[i+3]’に記録された、ブロックr[i+1]ワールドツリーとの間のパッチデータ点及び新たなデータ点に基づいて、同期ブロックr[i+3]’をローカルデータに更新してアクセスする。
【0066】
前記前のブロックが前記最新スナップショットブロックより前の位置にある場合、前記最新スナップショットブロックから前記前のブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーの更新を取り消す。前記同期ブロックに記載されたワールドツリーのデータ点に応じて、更新取り消しが行われた後のスナップショットワールドツリーを基に、前記同期ブロックのワールドツリーを構築する。図2Cに示すように、前のブロックr[i-1]は最新スナップショットブロックr[i]の前に位置し、同期ブロックr[i+3]’がアクセスされる必要があり、同期ブロックr[i+3]’をローカルデータメモリに更新する必要があると仮定する。この時、同期ブロックr[i+3]’の基づくローカルデータは完全にローカルにあるものではなく、最新スナップショットブロックの前のブロックr[i-1]のデータはローカルに存在しないため、最新スナップショットブロックから前に、最新スナップショットブロックr[i]と前のブロックr[i-1]のトランザクション要求の実行結果を用い、最新スナップショットワールドツリーの更新を取り消し、さらに前のブロックr[i-1]の最新スナップショットワールドツリー及び同期ブロックr[i+3]’のワールドツリーの関係に基づいて、同期ブロックr[i+3]’のローカルデータを取得する必要がある。
【0067】
本実施例の上記技術的解決手段は、同期ブロックを取得した後の処理プロセスを提供し、同期ブロックのローカルアクセスを迅速に実行することができる。
【0068】
実施例3.
図3Aは、本出願の実施例3が提供するブロックチェーンのデータ記憶方法のフローチャートである。本実施例では具体的に前記記憶方式に基づいて、ブロックチェーンに分岐が発生する時の処理方式を紹介する。
【0069】
ブロックチェーン分岐とは、ネットワーク通信、ノード故障等の原因により、特定の又はいくつかのノードがブロックを処理する時に、発生したデータは他のノードと異なるためである。しかし、このような不一致はすぐには発見されないので、不一致ブロックに基づいて新たなブロックが生成され続ける。図3Bに示すように、ブロックr[i-1]の始まりでは、異なるノードによって生成されるブロックチェーンは異なり、すなわち分岐が生成される。ブロックチェーン内の分岐機構により分岐現象が発見されると、正しい分岐及び誤った分岐を確定し、例えば長鎖が正しい分岐であると判定する。そして、誤った分岐のノードが存在すると、誤った分岐ブロックを取り消し、他のノードから正しい分岐のブロックを同期して取得し、ローカルに記憶する。以上がブロックチェーンにおける分岐処理である。分岐処理の間、正しい分岐のブロックを取得することに加えて、ノードは、ローカルデータを共に更新する必要もある。
【0070】
本出願の実施例において提供されるローカルデータ記憶方式に基づいて、分岐を処理する時の具体的な実現方式は以下のとおりである。
【0071】
S310:現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成する。ここで、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点である。
【0072】
S320:前記新たなワールドツリールートを現在のブロックに対応して記憶する。
【0073】
S330:既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新する。ここで、前記スナップショットワールドツリーのデータ点はエンティティデータ点である。
【0074】
S340:分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さ以上である場合、ローカルデータのワールドツリールートを正しいブロック分岐のワールドツリールートに切り替える。
【0075】
他のノードから同期取得したブロックr[i+2]’、r[i+3]’及びr[i+4]’に基づいて、設定ルールに従って分岐が発生したと確定し、同期取得したブロックは正しいブロック分岐である。図3Cを例として、分岐点が位置するブロックは、分岐ブロックと呼ばれ、ブロックr[i+1]であり、上記例のように、ブロックチェーンにおける後から前への最新スナップショットブロックはr[i]である。したがって、分岐点が位置するブロックr[i+1]の高さは、最新スナップショットブロックr[i]の高さ以上である。
【0076】
分岐を処理する場合、現在最新ブロックのワールドツリールートを正しく分岐された最新ブロックに切り替える必要があり、ブロックr[i+4]’のワールドツリールートに直接切り替えることができ分岐処理を完了することができる。
【0077】
エラーブロックr[i+2]、r[i+3]のワールドツリールートがクエリ時にアクセスされないと、ワールドツリーのデータ点もインデックスにアクセスされず、無効であることに相当する。もちろん、これらの無効なデータ点を削除してメモリ空間を解放することもできる。
【0078】
上記操作は分岐状況の処理を解決し、すなわち分岐点はスナップショットブロックの後続ブロックに位置する。最新スナップショットブロックから、後続のエラーブロック及び正しいブロックはいずれも自身に対応するワールドツリーが存在するため、どのブロックにロールバックしようとしても、ローカルデータは分岐点が位置するブロックのワールドツリールートに直接マウントする必要があり、すなわち該ブロックのデータ状態にロールバックし、後続のエラーブロックのワールドツリーは直接無効になる。
【0079】
分岐点がスナップショットブロックのプリアンブルブロックに位置する場合、オプションとして、以下の処理方式を採用することができる。
【0080】
S350:分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さより小さい場合、前記最新スナップショットブロックから前記分岐点の間のエラー分岐ブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーに対して更新取り消しを行う。
【0081】
図3Bを例として、分岐ブロックはブロックr[i-1]であり、その高さが最新スナップショットブロックr[i]より小さく、この場合に以下の方式で処理する。
【0082】
最新スナップショットブロックの前のブロックは対応するワールドツリーを有していないため、データオブジェクトはこれらのワールドツリーを有さないブロックにおいてどのような変化を実行したかが分からないため、トランザクション要求の操作を一つずつ取り消す必要がある。
【0083】
二段階に分けて操作する。まず、最新スナップショットブロックのスナップショットワールドツリーに直接戻し、後続のエラーブロックのワールドツリーは無効である。そして、スナップショットワールドツリーを基に、エラーブロックのトランザクション要求を一つずつ取り消す(undo操作)。
【0084】
図1Bおよび図3Bの例を参照すると、最新スナップショットブロックはr[i]であるが、ロールバックを必要とするエラーブロックである。このとき、ブロックr[i]のトランザクション要求は、ブロックr[i]のスナップショットワールドツリーに基づいて後から前へと一つずつ実行される。ブロックr[i]のトランザクション要求は、ローカルデータから直接読み出すことができる。トランザクション要求の実行結果がデータ点eに対するデータオブジェクト追加操作である場合、更新を取り消すことはスナップショットワールドツリーにおけるデータ点eを削除することであり、対応する上位レベルデータ点b及びルートノードa[i]におけるポインタも更新する必要がある。トランザクション要求の実行結果がデータ点cのデータオブジェクトのデータ値を更新することである場合、データオブジェクトのデータ値への変更を直接取り消すことができる。トランザクション要求の実行結果がデータオブジェクトを削除することである場合、削除されたデータオブジェクトに対応して、スナップショットワールドツリーにデータ点をさらに追加する。このようにして、エラーブロックのトランザクション要求が取り消され、それに応じてスナップショットワールドツリーが更新される。
【0085】
S360:前記分岐点から、正しい分岐ブロックのトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに基づいて、更新取り消しが行われた後のスナップショットワールドツリーを更新する。
【0086】
スナップショットワールドツリーが分岐点が位置するブロックに更新を取り消した場合、分岐点から、さらに正しい分岐ブロックのトランザクション要求を一つずつ実行し、且つ実行結果に基づいてスナップショットワールドツリーを更新する。
【0087】
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新する方式は様々である。例えば、次のように挙げられる。
【0088】
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われたスナップショットワールドツリーを最新スナップショットブロック又は最新ブロックの位置まで更新し、スナップショットワールドツリーを保持する。
【0089】
すなわち、正しいブロックを一つずつ実行する場合、正しいブロックを新たなスナップショットワールドツリーとし、更新が完了した後、最新ブロックr[i+3]’は最新スナップショットブロックであり、対応するスナップショットワールドツリーが存在し、それまでのブロックはワールドツリーを保持しない。
【0090】
あるいは、直前の最新スナップショットブロックr[i]に更新された場合、スナップショットワールドツリーの生成を停止し、通常ワールドツリーの生成を継続する。
【0091】
上記異なる方式は異なる状況に適用することができる。第一の状況は、一次分岐が解決されたため、正確に分岐して再分岐する可能性が低く、通常のワールドツリーを保持する必要がなく、そのためスナップショットワールドツリーに直接変更し、記憶需要を低減することができる。第二の状況では、既存の最新スナップショットツリーの位置が保持され、スナップショットツリーの推進メカニズムが本来の計画に基づいて実施される。
【0092】
本実施例の技術的解決手段は、混合記憶方式に基づいて効果的な分岐解決方法を提供する。連続する複数のブロックの通常のワールドツリーが存在するため、分岐する時に迅速にロールバックすることができ、各エラーブロックのトランザクション要求を一つずつ取り消し操作を実行する必要がない。ワールドツリーが存在しなければ、ロールバック時に、まずエラーブロックのトランザクション要求を一つずつ取り消し、さらに正しいブロックのトランザクション要求を一つずつ実行しなければ、分岐処理のローカルデータ記憶を完了できない。明らかに多くの計算リソースを占有する必要があり、分岐処理の時間が長い。
【0093】
実施例4.
図4Aは、本出願の実施例4が提供するブロックチェーンのデータ記憶方法のフローチャートである。本実施例の技術的解決手段はブロックチェーンにおいてスナップショットブロック位置を後方に進め、スナップショットワールドツリーを更新する方式を提供する。具体的には以下を含む。
【0094】
S410:現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成する。ここで、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点である。
【0095】
S420:前記新たなワールドツリールートを現在のブロックに対応して記憶する。
【0096】
S430:既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定されると、前のスナップショットブロックから現在のスナップショットブロックまでのトランザクション要求を一つずつ順次実行する。
【0097】
S440:トランザクション要求を一つずつ実行する過程において、現在のスナップショットブロックのスナップショットワールドツリーは生成されるまで、トランザクション要求の実行結果における書き込みデータに応じて、前記前のスナップショットブロックに対応するスナップショットワールドツリーを基に、エンティティデータ点に対応するデータ値を更新し、且つ対応するパッチデータ点を削除する。
【0098】
図1B図4Bの例を合わせて参照する。スナップショットブロックの推進規則に従って、ブロックr[i+1]が現在のスナップショットブロックになる必要があると確定すれば、前のスナップショットブロックはブロックr[i]である。ブロックr[i+1]のトランザクション要求を実行し、前のスナップショットブロックr[i]のスナップショットワールドツリーを更新する。トランザクション要求の実行結果がデータ点cのデータオブジェクトを更新することである場合、データ点cのデータオブジェクトの数値を直接変更操作することができ、依然としてデータ点cに対応して記憶し、パッチデータ点c’を削除する。あるいは、変更されたデータオブジェクトをデータ点c’に対応させて記憶し、データ点cを削除してもよい。データ点c及びc’はいずれもデータ点であり、任意に選択して記憶することができる。そして、ルートノードおよび指さすデータ点fが更新される。それにより、スナップショットワールドツリーが引き続き更新され、エンティティデータ点が保持され、大量のパッチデータ点が削除されたので、記憶スペースが節約される。更新が完了すると、ブロックr[i]のスナップショットワールドツリーはもはや存在せず、ブロックr[i]はスナップショットワールドツリーではない。
【0099】
S40:現在のスナップショットブロックの後のブロックのワールドツリーのパッチデータ点を、現在のスナップショットワールドツリーのエンティティデータ点を指さすように更新する。
【0100】
現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、現在のスナップショットブロックr[i+1]の後のブロックr[i+2]については、元々指し示されていたデータ点が無効化されている可能性があり、例えば、データ点c’が存在しなくなった場合、パッチデータ点c”のような、ブロックr[i+2]のワールドツリーのパッチデータ点を、エンティティデータcを指さすように更新する必要がある。データ点cとc’がマージされると、データ点c’に関連付けられたポインタが更新され、すなわち、パッチデータ点c”が更新される。
【0101】
上記技術的解決手段に基づいて、ニーズに応じてスナップショットワールドツリーの更新操作を実行するタイミングを決定することができる。分岐の確率によっては、分岐が形成されにくいブロックを最新スナップショットブロックとするのが一般的である。
【0102】
すなわち、既存のブロックがスナップショット条件を満たす現在のスナップショットブロックであると判定することは、次のステップを含む。
【0103】
設定されたスナップショットブロックの間隔に従って、前のスナップショットブロックとの間のブロック間隔が前記スナップショットブロックの間隔に達するブロックを、現在のスナップショットブロックと決定する。
【0104】
上述のスナップショットブロックの間隔は、ブロックチェーンのコンセンサスアルゴリズムによって許容される最長分岐間隔として選択することができる。あるいは、記憶能力に応じて、一定期間または一定高さを保持するブロックは、例えば、1時間以内または1日以内のブロックを保持するワールドツリーのような通常のワールドツリーを有するように設定されてもよい。
【0105】
実施例5.
図5は本出願の実施例5に提供するブロックチェーンのデータ記憶装置500の構造概略図であり、本実施例はソフトウェア及び/又はハードウェアの方式で実現することができる。具体的に、該装置はブロックチェーンノードに配置され、ワールドツリー更新モジュール510、ルート記憶モジュール520及びスナップショット更新モジュール530を含む。
【0106】
ここで、ワールドツリー更新モジュール510は、現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求の実行結果における書き込みデータに応じて、ローカルデータのワールドツリーを更新し、新たなデータ点及び新たなワールドツリールートを生成する。ここで、前記新たなデータ点はエンティティデータ点又は既存のエンティティデータ点のパッチデータ点である。
【0107】
ルート記憶モジュール520は、前記新たなワールドツリールートを現在のブロックに対応して記憶するように構成される。
【0108】
スナップショット更新モジュール530は、既存のブロックがスナップショット条件を満たす現在のスナップショットブロックになったと判定された場合、前のスナップショットブロックから現在のスナップショットブロックまでの間のトランザクション要求に応じて、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新する。ここで、前記スナップショットワールドツリーのデータ点はエンティティデータ点である。
【0109】
本実施例の技術的解決手段は、一部にワールドツリーの記憶手段を採用することで、混合記憶方式となる。一部のブロックの全てのワールドツリー状態を保持するだけでなく、各状態を随時検索しやすく、またそれまでのブロックをスナップショット状態に調整し、データ記憶量を減少する。上記の記憶方式は分岐が発生する時に特に有利であり、分岐が発生する時、あるブロックのワールドツリーに迅速にロールバックすることができる。また、分岐が生じない前記ブロックには、大量のワールドツリーを保持する必要もない。
【0110】
任意選択で、ワールドツリー更新モジュール510は具体的に以下のことに用いられる。
【0111】
前記トランザクション要求の実行結果における書き込みデータがデータオブジェクトを新たに追加することである場合、前のブロックのワールドツリーを基にエンティティデータ点を新たに追加し、且つ新たに追加されたデータオブジェクトのデータ値を対応して記憶すること;
【0112】
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を更新することである場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つ更新されたデータ値を記録すること;
【0113】
前記トランザクション要求の実行結果における書き込みデータが既存のデータオブジェクトのデータ値を削除することである場合、前のブロックのワールドツリーを基に、前記既存のデータオブジェクトのデータ点にパッチデータ点を追加し、且つデータ値の削除を記録すること;
【0114】
新たに追加されたエンティティデータ点またはパッチデータ点に基づいて、対応する上位レベルデータ点およびワールドツリールートを更新して生成すること。
【0115】
任意選択で、スナップショット更新モジュール530は具体的に、次のことに用いられる。
【0116】
前のスナップショットブロックから現在のスナップショットブロックまでのトランザクション要求を一つずつ順次実行すること;
【0117】
トランザクション要求を一つずつ実行する過程において、現在のスナップショットブロックのスナップショットワールドツリーを生成するまで、トランザクション要求の実行結果における書き込みデータに応じて、前記前のスナップショットブロックに対応するスナップショットワールドツリーを基に、エンティティデータ点に対応するデータ値を更新し、且つ対応するパッチデータ点を削除すること。
【0118】
任意選択で、該装置は、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、現在のスナップショットブロックに後続するブロックのワールドツリーのパッチデータ点を、現在のスナップショットワールドツリーのエンティティデータ点を指さすように更新するための指向更新モジュールをさらに含む。
【0119】
任意選択で、スナップショット更新モジュール530は具体的に、次のことに用いられる。
【0120】
設定されたスナップショットブロックの間隔に従って、前のスナップショットブロックとの間のブロック間隔が前記スナップショットブロックの間隔に達するブロックを、現在のスナップショットブロックと決定すること。
【0121】
任意選択で、該装置は、他のノードから少なくとも1つの同期ブロックを取得するためのブロック同期モジュールをさらに含み、前記同期ブロックはローカルに記憶されたブロックチェーンにおける既存のブロックに接続され、前記既存のブロックは前記同期ブロックの前のブロックとする。
【0122】
任意選択で、該装置は、前記同期ブロックに対するデータアクセス操作が発生すると、前記同期ブロックに応じてローカルデータのワールドツリーを更新し、新たなデータ点および新たなワールドツリールートを生成するためのアクセス更新モジュールをさらに含む。
【0123】
ここで、前記アクセス更新モジュールは、具体的に、次のことに用いられる。
【0124】
前記前のブロックが最新スナップショットブロックの後の位置にある場合、前記同期ブロックに記載されたワールドツリーのデータ点に応じて、ローカルデータの既存のワールドツリーを基に前記同期ブロックのワールドツリーを構築すること;
【0125】
前記前のブロックが前記最新スナップショットブロックより前の位置にある場合、前記最新スナップショットブロックから前記前のブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーの更新を取り消すこと;前記同期ブロックに記載されたワールドツリーのデータ点に応じて、更新取り消しが行われた後のスナップショットワールドツリーを基に、前記同期ブロックのワールドツリーを構築すること。
【0126】
任意選択で、該装置は、分岐ロールバックモジュールをさらに備える。前記分岐ロールバックモジュールは、次のことに用いられる。
【0127】
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さ以上である場合、ローカルデータのワールドツリールートを正しいブロック分岐のワールドツリールートに切り替えること;
【0128】
分岐ロールバックが発生し、且つ分岐点が位置するブロックの高さが最新スナップショットブロックの高さより小さい場合、前記最新スナップショットブロックから前記分岐点の間のエラー分岐ブロックまで、後から前へとトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、前記最新スナップショットブロックに対応するスナップショットワールドツリーの更新を取り消すこと;前記分岐点から、正しい分岐ブロックのトランザクション要求を一つずつ実行し、トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われた後のスナップショットワールドツリーを更新すること。
【0129】
ここで、前記分岐ロールバックモジュールは、具体的に、次のことに用いられる。
【0130】
トランザクション要求の実行結果における書き込みデータに応じて、更新取り消しが行われたスナップショットワールドツリーを最新スナップショットブロック又は最新ブロックの位置まで更新し、スナップショットワールドツリーを保持すること。
【0131】
任意選択で、該装置は、現在のブロックの各トランザクション要求を実行する過程において、トランザクション要求のデータをブロック単位で、ローカルデータに順次記憶するためのブロック記憶モジュールをさらに含む。
【0132】
任意選択で、該装置は、現在のスナップショットブロックのワールドツリーをスナップショットワールドツリーに更新した後、現在のスナップショットブロックの前のブロックに対応するワールドツリーを削除するためのワールドツリー削除モジュールをさらに含む。
【0133】
実施例6.
本願の実施形態によれば、本願はさらに電子機器及び可読記憶媒体を提供する。
【0134】
図6は、本出願の実施例に係るブロックチェーンのデータ記憶方法を実現するための電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、作業台、パーソナルデジタルアシスタント、サーバ、ブレード型サーバ、大型コンピュータおよびその他の適切なコンピュータ等の様々な形態のデジタルコンピュータを表す。また、電子機器は、個人デジタル処理、携帯電話、スマートフォン、ウェアラブル機器およびその他の類似するコンピューティングデバイス等の様々な形態のモバイルデバイスを表すことができる。なお、ここで示した構成要素、それらの接続関係、およびそれらの機能はあくまでも一例であり、ここで説明および/または要求した本願の実現を限定することを意図するものではない。
【0135】
図6に示すように、該電子機器は、1つ又は複数のプロセッサ601、メモリ602、及び各コンポーネントを接続するためのインタフェース(高速インタフェース及び低速インタフェースを含む)を含む。各コンポーネントは、互いに異なるバスで接続されており、共通のマザーボード上に実装されていてもよいし、必要に応じて他の方式で実装されていてもよい。プロセッサは電子機器内で実行される命令を処理することができ、インタフェースに結合された表示装置等の外部入出力装置に、グラフィカルユーザインタフェース(GUI,Graphical User Interface)のグラフィック情報を表示するために命令をメモリ内またはメモリ上に格納することを含む。他の実施形態では、必要に応じて、複数のプロセッサおよび/または複数のバスおよび複数のメモリを、複数のメモリとともに使用することができる。また、複数の電子機器が接続されていてもよく、各機器は、例えば、サーバアレイ、ブレードサーバ群またはマルチプロセッサシステムなど、一部の必要な操作を提供する。図6では、1つのプロセッサ601を例としている。
【0136】
メモリ602は、本願が提供する非一時的コンピュータ可読記憶媒体である。ここで、前記メモリは、少なくとも1つのプロセッサが実行可能な命令を格納しており、それにより前記少なくとも1つのプロセッサに本出願が提供するブロックチェーンのデータ記憶方法を実行させる。本出願の非一時的コンピュータ可読記憶媒体はコンピュータ命令を格納し、該コンピュータ命令はコンピュータに本出願が提供するブロックチェーンのデータ記憶方法を実行させるために用いられる。
【0137】
メモリ602は、非一時的コンピュータ可読記憶媒体として、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能なプログラム及びモジュールを格納することに用いることができ、例えば本出願の実施例におけるブロックチェーンのデータ記憶方法に対応するプログラム命令/モジュール(例えば、図5に示すワールドツリー更新モジュール510、ルート記憶モジュール520及びスナップショット更新モジュール530)。プロセッサ601は、メモリ602に格納された非一時的ソフトウェアプログラム、命令及びモジュールを実行することにより、サーバの各種機能アプリケーション及びデータ処理を実行し、すなわち上記方法の実施例におけるブロックチェーンのデータ記憶方法を実現する。
【0138】
メモリ602はオペレーティングシステム、少なくとも1つの機能に必要なアプリケーションプログラムを記憶できるプログラム記憶領域と、ブロックチェーンのデータ記憶用の電子機器の使用に応じて作成されたデータ等を記憶できるデータ記憶領域とを備える。また、メモリ602は高速ランダムアクセスメモリを含むことができ、また非一時的メモリ(例えば、少なくとも1つの磁気ディスク記憶装置、フラッシュメモリデバイス又はその他の非一時的ソリッドステート記憶装置)を含むことができる。いくつかの実施例において、メモリ602は任意選択でプロセッサ601に対して遠隔に設置されたメモリを含み、これらのリモートメモリはネットワークを介してブロックチェーンのデータ記憶用の電子機器に接続することができる。上記ネットワークとしては、例えば、インターネット、企業イントラネット、ローカルエリアネットワーク、移動体通信網、ブロックチェーンネットワーク及びこれらの組み合わせなどが挙げられるが、それらに限定されない。
【0139】
ブロックチェーンのデータ記憶方法の電子機器は、さらに入力装置603及び出力装置604を含むことができる。プロセッサ601、メモリ602、入力装置603及び出力装置604は、バス又はその他の方式で接続されていてもよく、図6ではバスで接続されている例を示している。
【0140】
例えばタッチパネル、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングデバイス、1つまたは複数のマウスボタン、トラックボール、ジョイスティック等の入力装置603は、入力された数字や文字情報を受信でき、ブロックチェーンのデータ記憶用電子機器のユーザ設定及び機能制御に関するキー信号入力を生成することができる。出力装置604は表示装置、補助照明装置(例えば、LED)及び触覚フィードバック装置(例えば、振動モータ)等を含むことができる。該表示装置は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ及びプラズマディスプレイを含むことができるが、これらに限定されない。いくつかの実施形態において、表示装置はタッチパネルであってもよい。
【0141】
ここで説明するシステム及び技術の様々な実施形態はデジタル電子回路システム、集積回路システム、専用集積回路(Application Specific Integrated Circuit,ASIC)、コンピュータハードウェア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせにおいて実現することができる。これらの様々な実施形態は、1つ又は複数のコンピュータプログラムに実装され、該1つ又は複数のコンピュータプログラムは少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムにおいて実行及び/又は解釈することができ、該プログラマブルプロセッサは専用又は汎用プログラマブルプロセッサであってもよく、記憶システム、少なくとも1つの入力装置及び少なくとも1つの出力装置からデータ及び命令を受信することができ、且つデータ及び命令を該記憶システム、該少なくとも1つの入力装置及び該少なくとも1つの出力装置に伝送することを含み得る。
【0142】
これらのコンピュータプログラムは、プログラム、ソフトウェア、ソフトウェアアプリケーション又はコードとも呼ばれ、プログラマブルプロセッサの機械命令を含み、且つ高度プロセス及び/又はオブジェクト指向のプログラミング言語、及び/又はアセンブリ言語/機械言語を利用して実現することができる。ここで、「機械可読媒体」及び「コンピュータ可読媒体」という用語は、機械指令及び/又はデータをプログラマブルプロセッサに供給するための任意のコンピュータプログラム製品、装置、及び/又はデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD))を意味し、機械可読信号である機械指令を受信する機械可読媒体を含む。「機械可読信号」という用語は、機械指令および/またはデータをプログラマブルプロセッサに供給するための任意の信号を意味する。
【0143】
ユーザとのインタラクションを提供するために、ここで説明するシステムと技術は、ユーザに情報を表示するための表示装置(例えば、陰極線管(Cathode Ray Tube,CRT)またはLCD(液晶ディスプレイ)モニタ)と、キーボード及びポインティングデバイス(例えば、マウスまたはトラックボール)とを備えるコンピュータ上で実現することができ、ユーザが該キーボード及び該ポインティングデバイスを介してコンピュータに入力を提供できる。他の種類の装置は、さらにユーザとのインタラクションを提供することに用いることができる。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックであるいかなる形態のセンシングフィードバックであってもよく、且つ音入力、音声入力又は、触覚入力を含むいかなる形態でユーザからの入力を受信してもよい。
【0144】
ここで説明したシステム及び技術は、バックグラウンドコンポーネントを含むコンピューティングシステム(例えば、データサーバ)に実施されてもよく、又はミドルウェアコンポーネントを含むコンピューティングシステム(例えば、アプリケーションサーバ)に実施されてもよく、又はフロントエンドコンポーネントを含むコンピューティングシステム(例えば、グラフィカルユーザインタフェース又はウェブブラウザを有するユーザコンピュータ)に実施されてもよく、ユーザは該グラフィカルユーザインタフェース又はウェブブラウザを介してここで説明したシステム及び技術の実施形態とインタラクションしてもよく、又はこのようなバックグラウンドコンポーネント、ミドルウェアコンポーネント又はフロントエンドコンポーネントのいずれかの組み合わせを含むコンピューティングシステムに実施されてもよい。また、システムの各構成要素間は、通信ネットワーク等の任意の形態または媒体を介してデジタルデータ通信により接続されていてもよい。通信ネットワークとしては、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、ブロックチェーンネットワーク等が挙げられる。
【0145】
コンピュータシステムは、クライアントとサーバとを含んでもよい。クライアントとサーバは、通常、互いに離れており、通信ネットワークを介してインタラクションを行う。クライアントとサーバとの関係は、互いにクライアント-サーバの関係を有するコンピュータプログラムをそれぞれのコンピュータ上で操作することによって生成される。
【0146】
なお、上述した様々な形態のフローを用いて、ステップを改めて並び替え、追加または削除を行うことができる。例えば、本出願に記載された各ステップは、本願に開示された技術案の所望の結果が達成できる限り、並行して実行されてもよいし、順番に実行されてもよいし、異なる順序で実行されてもよい。本明細書はここで制限しない。
【0147】
上記具体的な実施形態は、本願の保護範囲を限定するものではない。設計要件および他の要因に従って、様々な修正、組み合わせ、サブコンビネーション、および置換を行うことができることを当業者は理解すべきである。本願の精神および原理内で行われたあらゆる補正、同等置換および改善などは、いずれも本願の保護範囲内に含まれるべきである。
図1A
図1B
図1C
図2A
図2B
図2C
図3A
図3B
図3C
図4A
図4B
図5
図6