(57)【要約】  本出願の実施例は、データ記憶方法、装置、機器および記憶媒体を開示している。ここに、当該方法は、データ処理要求を取得するステップと、前記データ処理要求に基づいて、現在のバージョン識別を決定するステップと、前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。【選択図】図１
2021531564.tif 000002
【特許請求の範囲】
【請求項１】
データ処理要求を取得するステップと、
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、
新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、
記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、
ことを特徴とするデータ記憶方法。
【請求項２】
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップは、
前記データ処理要求に基づいて、前のバージョンのデータ対象を決定するステップと、
前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別を決定するステップと、を含み、ここに、前記現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である、
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するステップは、
前記データ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するステップを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項４】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
前記データ処理要求は、目標データの書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに新しいキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューに前記目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューに目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューを空に設定するステップと、
前記データ処理要求は、既存のキー・バリューの読取操作であると、既存のキー・バリューを目標キー・バリューとして決定し、前記目標キー・バリューのバリューにおけるデータを読取りフィードバックするステップと、を含む
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
現在のバージョンのデータ対象で、前記データ処理要求に基づいて対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別を前記機能関数の入力パラメータとすることによって、前記データ処理要求を実行するステップを含む、
ことを特徴とする請求項３に記載の方法。
【請求項６】
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップは、
前のバージョン識別を決定し、設定番号規則に従って現在のバージョン識別を生成するステップ、または
前のバージョン識別を決定し、前のバージョン識別のシリアル番号識別に基づいて、設定番号規則に従って現在のバージョン識別におけるシリアル番号識別および前記データ処理要求に基づいて決定されたバージョン附加識別を生成し、前記シリアル番号識別と前記現在のバージョン識別を構成するステップとを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項７】
前のバージョン識別を決定するステップは、
前記データ処理要求から前のバージョン識別を抽出するステップ、または、
前記データ処理要求における業務データ識別に基づいて前のバージョン識別を決定するステップを含み、ここに、前記業務データ識別は、ブロック識別またはトランザクション識別である、
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記バージョン附加識別は、ブロック識別またはトランザクション識別である、
ことを特徴とする請求項６に記載の方法。
【請求項９】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップは、
有効化制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を有効化にするように制御し、前記現在のバージョンのデータ対象における新たに生成された目標キー・バリューを記憶スペースに書き込むステップを含む、
ことを特徴とする請求項２に記載の方法。
【請求項１０】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップの前に、
失効制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を失効にするように制御するステップをさらに含む、
ことを特徴とする請求項２に記載の方法。
【請求項１１】
前記現在のバージョンのデータ対象を有効化にするように制御するステップの前に、
上層ソフトウエアから転送されたバージョン識別修正指示に基づいて、前記現在のバージョン識別を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別を更新するステップをさらに含む、
ことを特徴とする請求項９に記載の方法。
【請求項１２】
有効化制御コマンドを呼び出すステップは、
現在のバージョンの有効化条件を生成する、または上層ソフトウエアから送信された現在のバージョン有効化コマンドを受信するときに、前記有効化制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項９に記載の方法。
【請求項１３】
現在のバージョンの有効化条件を生成するステップは、
処理対象データのブロック識別が変更したことと、
処理対象データのトランザクション識別が変更したことと、のうち少なくとも１つを含む、
ことを特徴とする請求項１２に記載の方法。
【請求項１４】
失効制御コマンドを呼び出すステップは、
現在のバージョンの失効条件を生成する、または上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、失効制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記目標キー・バリューのバリューにおけるデータを処理するステップの後で、
新たに生成された目標キー・バリューに基づいて、キー識別とバージョン識別とのマッピング関係テーブルに、キー識別と現在のバージョン識別とのマッピング関係を追加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項１６】
前記方法は、ブロックチェーンノードに適用されると、前記方法は、
上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定するときに、他のノードから受信したブロックデータ、および前記ブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを取得するステップと、
上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、取得した前記ブロックデータをローカルの記憶スペースに書き込むとともに、取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップと、
上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させるステップと、をさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップは、
取得した前記マッピングテーブルのローカルマッピング関係テーブルに対する増分キー識別とバージョン識別をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別とバージョン識別を保留するステップを含み、ここに、増分バージョン識別には、有効化ブロックバージョン識別が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別には、失効ブロックバージョン識別が含まれる、
ことを特徴とする請求項１６に記載の方法。
【請求項１８】
上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定するとともに、前記キー識別と有効化バージョン識別に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１９】
上層ソフトウエアによる新業務データの書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別に基づいて前記データ書き込み要求が依頼される前のバージョン識別として、前記データ書き込み要求に携帯するステップをさらに含み、
前記新業務データは、新しいブロックまたは新しいトランザクションデータである、
ことを特徴とする請求項１５に記載の方法。
【請求項２０】
前記記憶スペースは、ディスク記憶スペースであり、前記ディスク記憶スペースにおけるＫＶ記憶システムで用いられるインデックスは、順序付きテーブルまたはインデックスツリーである、
ことを特徴とする請求項１に記載の方法。
【請求項２１】
新たに生成された目標キー・バリューを記憶スペースに書き込む過程で、
バージョン識別とキー識別との逆インデックスにおいて、現在のバージョン識別に対応する新たに生成された目標キー・バリューのキー識別を増加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項２２】
データ処理要求を取得するように構成される処理要求取得モジュールと、
前記データ処理要求に基づいて、現在のバージョン識別を決定するように構成される現在識別決定モジュールと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュールと、
新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュールと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、
ことを特徴とするデータ記憶装置。
【請求項２３】
１つまたは複数のプロセッサと、
１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、
前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに請求項１〜２１のいずれかに記載のデータ記憶方法を実現する、
ことを特徴とする機器。
【請求項２４】
コンピュータプログラムが記憶されている記憶媒体であって、
前記コンピュータプログラムがプロセッサによって実行される場合、請求項１〜２１のいずれかに記載のデータ記憶方法が実現される、
ことを特徴とするコンピュータプログラムが記憶されている記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１８年１２月２６日に中国特許庁に提出された、出願番号が２０１８１１６０５４４６．１である中国特許出願の優先権を主張し、その出願の全部の内容が引用によって本出願に援用される。
【０００２】
本出願の実施例は、コンピュータデータ記憶の技術に関し、例えば、データ記憶方法、装置、機器及び記憶媒体に関する。
【背景技術】
【０００３】
現在のブロックチェーンシステムで用いられている基礎データ記憶技術は、様々があり、そのうち、キー・バリュー（Ｋｅｙ  Ｖａｌｕｅ、ＫＶと簡略される）記憶システムが比較的に広く用いられている。ＫＶ記憶システムは、ブロックチェーンシステムの上層ソフトウェアの制御で、ブロックチェーンシステムのデータリード／ライトなどのアクセス処理をサポートする。
【０００４】
ＫＶ記憶システムでは、多くのＫＶを用いてブロックチェーンシステムに記憶される必要がある各種のデータをそれぞれ記憶し、一部のＫＶはブロックの生成に伴って修正する必要がある。例えば、ブロックチェーンネットワークでトランザクション要求を開始した後、ブロックチェーンネットワークにおけるノードがトランザクション要求におけるスマート契約を実行する必要があり、スマート契約の実行は既存のデータに基づかなければならないと同時に、一部の既存データを修正する必要がある。例えば、振込機能に関するスマート契約の場合に、入金口座と送金口座とのＫＶを読み取る必要があり、ここに、ＫＶのキー（ｋｅｙ）は口座名を記憶することができ、バリュー（ｖａｌｕｅ）は口座残高の数値を記憶することができ、スマート契約が実行されると、振込金額に応じて入金口座と送金口座のｖａｌｕｅ値が修正される。実際に、ブロック生成プロセスは大量のＫＶの変化を伴う。
【０００５】
現在、ブロックチェーンノードは、ＫＶ記憶システムにインデックスを作成してデータにアクセスしやすくするが、ＫＶの変化によってインデックスが大幅に変化してしまい、これは、通常、ＫＶ記憶システム自体が用いるインデックス方式によって決定される。ブロックチェーンシステムの上層ソフトウエアのデータ処理要求によって、ＫＶの追加、ＫＶの削除またはＫＶの修正などの調整を生じるので、それに応じてＫＶのインデックスを調整する必要がある。
【０００６】
ブロックチェーンの分岐により一部のブロックチェーンノードのローカルに記憶されているブロックチェーンデータがロールバックとやり直しを行う必要がある場合、ロールバック操作は、基礎ＫＶ記憶システムの記憶データを段階的に分岐点に復元してから、新しいブロックチェーンでやり直しコマンドを実行し、すなわち、すべてのトランザクションのビジネスロジックを再実行し、生成されたブロックデータをＫＶ記憶システムに再び挿入することは、莫大なリソースオーバーヘッドを招くことに違いない。
【０００７】
そのため、ブロックチェーンシステムのデータ処理の特徴から、既存のＫＶ記憶ジシステムを用いてブロックチェーンノードのデータ記憶をサポートする場合、性能が悪くなってしまう。
【発明の概要】
【０００８】
以下は、本文で詳しく説明する主題の概要である。この概要は、請求項の保護範囲を制限するためのものではない。
【０００９】
本出願の実施例は、ＫＶ記憶システムの記憶方式を最適化し、記憶システムの性能を改善するために、データ記憶方法、装置、機器及び記憶媒体を提供する。
【００１０】
本出願の実施例は、データ処理要求を取得するステップと、前記データ処理要求に基づいて、現在のバージョン識別を決定するステップと、前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、データ記憶方法を提供する。
【００１１】
本出願の別の実施例は、データ処理要求を取得するように構成される処理要求取得モジュールと、前記データ処理要求に基づいて、現在のバージョン識別を決定するように構成される現在識別決定モジュールと、前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュールと、新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュールと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、データ記憶装置をさらに提供する。
【００１２】
本出願の他の実施例は、１つまたは複数のプロセッサと、１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに本出願の何れかの実施例に記載のデータ記憶方法を実現させる、機器をさらに提供する。
【００１３】
本出願の他の実施例は、コンピュータプログラムが記憶されている記憶媒体をさらに提供し、前記コンピュータプログラムがプロセッサによって実行される場合、本出願の何れかの実施例に記載のデータ記憶方法が実現される。
【００１４】
図面と詳細な説明を読んで理解した後、他の方面を理解することができる。
【図面の簡単な説明】
【００１５】
【図１】本出願の実施例一に提供されるデータ記憶方法のフローチャートである。
【図２】本出願の実施例二に提供されるデータ記憶方法のフローチャートである。
【図３】本出願の実施例三に提供されるデータ記憶方法のフローチャートである。
【図４】本出願の実施例四に提供されるデータ記憶方法のフローチャートである。
【図５Ａ】本出願の実施例五に提供されるデータ記憶方法のフローチャートである。
【図５Ｂ】本出願の実施例五に提供されるブロックチェーン分岐の概略図である。
【図６】本出願の実施例六に提供されるデータ記憶方法のフローチャートである。
【図７】本出願の実施例七に提供されるデータ記憶装置の構成概略図である。
【図８】本出願の実施例八に提供される機器の構成概略図である。
【発明を実施するための形態】
【００１６】
以下、本出願を図面と実施例を参照してさらに詳しく説明する。ここに記載の具体的な実施例は、本出願を説明するためのものに過ぎず、本出願を限定するものではないことを理解することができる。なお、説明を容易にするために、図面には、すべての構成ではなく、本出願に関連する部分のみが示されている。
【００１７】
実施例一
図１は、本出願の実施例一に提供されるデータ記憶方法のフローチャートであり、本実施例は、ＫＶ記憶システムを基礎記憶システムとすると、上層ソフトウェアから発行されたデータを処理する場合に適用されることができる。特に、当該ＫＶ記憶システムは、ブロックチェーンシステムのデータ記憶をサポートするときに、ブロックチェーンシステムのデータ処理特徴とより一致させることができる。当該方法は、ソフトウェアおよび／またはハードウェアの形で実現され得るとともに、ロード計算機器、特にブロックチェーンノードである計算機器に統合され得る、データ記憶装置によって実行されることができる。図１を参照し、当該方法は、以下のステップを具体的に含む。
【００１８】
Ｓ１１０において、データ処理要求を取得する。
【００１９】
本実施例において、データ処理要求とは、データを処理するための要求を指し、具体的には、データ処理要求は、上層ソフトウェアのタイミングが一定のデータ量に達したり、あるトリガメカニズムを受信したりするなど、データを処理する必要がある何れかのタイミングで、基礎記憶システムに送信される、処理対象データに対して書き込み、変更、読取または削除などのある処理操作を行うように基礎記憶システムに要求するものである。本出願の実施例は、特にブロックチェーンシステムのデータ処理に適用し、下記の実施例は、ブロックチェーンデータの処理を例に説明する。しかし、当業者は、本出願の実施例の技術構成がブロックチェーンシステムでの使用に限定されないことを理解することができる。
【００２０】
選択可能には、データ処理要求は、処理対象の目標データを含むことができ、目標データは、ブロックのデータ、トランザクションデータ、または他の業務データや管理データなどであってもよく、トランザクションデータは、ブロックチェーンシステムで開始されたトランザクション要求を処理するデータである。ブロックのデータは、ブロック内に記憶されたデータと、ブロックチェーンに依存するがブロックチェーンから独立してブロックチェーンノードローカルに記憶されたデータとを含むことができる。データ処理要求は、例えば、あるブロックを唯一に識別するための識別、例えばブロックＩＤを指すブロック識別、または、あるクラスまたはあるトランザクションデータを唯一に識別するための識別を指すトランザクション識別などのような目標データ識別をさらに含むことができる。
【００２１】
Ｓ１２０において、データ処理要求に基づいて、現在のバージョン識別を決定する。
【００２２】
本実施例において、バージョン識別は、現在のデータ処理要求に関するデータに対する更新操作を識別するための唯一識別作用を果たす識別子である。
【００２３】
現在のバージョン識別とは、今回のデータ処理要求で処理する必要のあるデータに使用されるバージョン識別を指す。今回のデータ処理要求は、１つまたは複数であってもよい。１つのバージョン識別は、１つのデータ処理要求に関するデータに適用してもよいし、１ロットのデータ処理要求に関するデータに適用してもよい。具体的には、異なるブロックで生成されたデータ処理要求は、異なるバージョン識別を有することができ、つまり、同一のブロックの処理中に生成されたデータ処理要求に関するデータは、同一のバージョン識別を有することができる。あるいは、１つのトランザクションデータの処理中に生成されたデータ処理要求に関するデータは、１つのバージョン識別を有することもできる。ブロックまたはトランザクションデータの処理中に関するデータは、多くあり得、例えば、トランザクション要求のデータは、記憶する必要がある場合、トランザクション要求データは、書き込み要求に関するデータであり、あるトランザクション要求を実行するスマート契約によって、ある口座の口座残高が変化した場合、当該口座残高は、書き込み要求に関するデータである。
【００２４】
バージョン識別は、ランダムに生成されてもよいし、例えば、流水番号や流水番号＋ブロック識別／トランザクション識別などのような設定規則に従って生成されてもよい。後続の照会、変更等の操作を容易にするために、本実施例において、設定規則に従ってバージョン識別を生成することが好ましい。設定規則は、例えば、バージョン識別を整数値とし、前のバージョン識別を基礎に１をプラスすることによって新しいバージョン識別を決定するものである。選択可能には、データ処理要求は、前のバージョン識別を含むこともできる。このため、データ処理要求から前のバージョン識別を抽出してから、前のバージョン識別に基づいて、現在のバージョン識別を生成することができる。
【００２５】
Ｓ１３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００２６】
本実施例において、キー・バリューのキーフィールドは、データのキー識別とバージョン識別を記憶するために用いられることができ、キー識別は、例えば、ブロック識別やトランザクション識別などのようなデータの実際の意味を表すことができる識別であってもよく、キー・バリューのバリューは、データ自体を記憶するために用いられることができる。目標キー・バリューは、データ処理要求の目標データを記憶するために用いられ、データ処理をサポートし、データ処理要求における目標データの位置する既存のキー・バリュー、または、新たに生成されたキー・バリューであってもよい。
【００２７】
データ処理要求は、目標データに対して読取操作を行うものであると、データ処理要求における目標データの位置する既存のキー・バリューを目標キー・バリューとすることができる。例示的に、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するステップは、データ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するステップを含むことができる。本実施例において、バージョン識別とは、読み取る必要のあるデータのバージョン識別を指し、前のバージョン識別であってもよく、履歴のいずれのバージョン識別であってもよい。具体的には、目標データのキー識別とバージョン識別をインデックスとして、既存のキー・バリューで検索し、一致する既存のキー・バリューを目標キー・バリューとすることができる。
【００２８】
データ処理要求は、目標データに対する書き込み操作、または既存のキー・バリューにおけるバリューに対する変更や削除であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。なお、本実施例において、データに対して削除や変更を行うことが必要である場合、新たに生成されたキー・バリューで操作し、既存のキー・バリューを保留することで、前の他のバージョン識別のキー・バリューデータに切り替えて検索する必要があるときに、大量のキー・バリューのデータ復元が不要で、切り替え速度が速い。そのため、データを削除または変更する必要がある場合、さらにデータ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを決定してから、既存のキー・バリューおよび目標キー・バリューに基づいて、目標データに対して削除または変更操作を行う必要がある。
【００２９】
通常、上層ソフトウェアは、アクセス処理が必要な目標データを決定できるため、データ処理要求によってキー識別とバージョン識別に対応する情報を伝達することができる。
【００３０】
具体的には、データ処理要求に基づいて、現在のバージョン識別を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定することができ、その後、データ処理要求の所定のデータの処理方式に基づいて、目標キー・バリューのバリューにおけるデータを処理する。
【００３１】
選択可能には、データ処理要求の所定のデータ処理方式、例えば、変更、照会、書き込みまたは削除などの方式によって、データを処理するポリシーは、異なるが、以下の実施例では、異なる処理方式に対応する処理ポリシーについて詳しく紹介する。
【００３２】
Ｓ１４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【００３３】
本実施例において、記憶スペースとは、目標キー・バリューを記憶するために必要な記憶媒体を指し、例えば、メモリ記憶スペースであってもよいし、ディスク記憶スペースであってもよいなど、大容量の任意の記憶機器であってもよい。ディスクの電源を切った後に保存されたデータは失われず、消去しない場合、永続的に保存され、上層ソフトウェアは、基礎記憶システムが取得したブロックのデータまたはトランザクションデータを永続的に保存する必要があるため、本実施例において、記憶スペースは、ディスク記憶スペースであることが好ましい。キー・バリューの管理や後続の照会などを容易にするために、１つのブロック内のデータに対応するキー・バリューや関連関係のあるキー・バリューを関連付けて記憶することができる。選択可能には、ディスク記憶スペースに用いられるＫＶ記憶システムのインデックスは、順序付きテーブルまたはインデックスツリーであってもよい。ここに、順序付きテーブルは、キー・バリューが増加または減少するように順序付けられているものであり、インデックスツリーとは、キー・バリューをツリー構造に並べるものを指し、インデックスツリーは、二分木であってもよく、かつ、インデックスツリーの右側に位置するキー・バリューのキー識別が、インデックスツリーの左側に位置するキー・バリューのキー識別よりも大きいなどであってもよい。
【００３４】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別およびデータを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行とともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別を目標キー・バリューのキーフィールドに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータの記憶を完成する。本方案において、後続のバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会することを容易にするために、データに対して書き込み、変更又は削除などの処理を行う必要がある場合、既存のキー・バリューを保持し、新たに生成されたキー・バリューで操作する。特に、ブロックチェーンシステムには、ブロックのロールバックとやり直しのニーズがあるため、例えば、分岐が生じた場合、ロールバックする必要があると、本出願の実施例に提供されるＫＶ記憶システムによれば、大量のキー・バリューのデータの復元を必要せずに、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができる。従来のブロックチェーンのデータ記憶方式に比べられ、バージョンの復元速度が向上し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００３５】
実施例二
図２は、本出願の実施例二に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ対象に基づいて実行する具体的な方案を提供する。図２を参照し、当該方法は、以下のステップを具体的に含む。
【００３６】
Ｓ２１０において、データ処理要求を取得する。
【００３７】
Ｓ２２０において、データ処理要求に基づいて、前のバージョンのデータ対象を決定する。
【００３８】
本実施例において、データ対象は、ハンドルまたはポインタとも呼ばれ、基礎記憶システムにより１つまたは１ロットのデータ処理要求を処理する仮想識別であってもよく、当該仮想識別は、プログラムの実行中にコンピュータ機器のハードウェアリソースとソフトウェアにより構築された仮想リソースを使いやすくするために用いられ、主に仮想識別で記憶リソースに対応することができ、このデータ対象に対してある記憶システムおよび具体的な記憶スペースを用いる必要があることを表す。具体的には、あるデータ対象のメインプログラムが実行中に、対応する機能関数を呼び出してデータ処理要求におけるデータを処理することができる。当該データ対象のメインプログラムと機能関数の対象となる記憶システムは、同一である。
【００３９】
本出願の実施例において、データ対象は、バージョン識別と１対１に対応し、異なるバージョン識別に対応するバージョンのデータ対象は、異なる。選択可能には、本実施例において、データ対象の名称は、バージョン識別を含むことができる。前のバージョンのデータ対象は、現在のバージョンのデータ対象を生成するために必要な古いバージョンのデータ対象であり、上層ソフトウェアによって決定され、実際には、上層ソフトウェアによって前のバージョンのバージョン識別を決定することができる。本出願の実施例の各バージョンのデータ対象に対応する記憶システムは、すべてのキー・バリュー記憶システムであり、各バージョンのキー・バリューを含んでいる。
【００４０】
Ｓ２３０において、前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別を決定し、ここに、現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である。
【００４１】
具体的には、前のバージョンのデータ対象の名称、例えば前のバージョン識別を、データ対象のメインプログラムの入力パラメータとして、例えば、バージョン生成関数によって前のバージョン識別に基づいて、現在のバージョン識別を生成し、さらに現在のバージョンのデータ対象を生成する。
【００４２】
たとえば、バージョン生成関数がｔｒｅｅ．ｖｅｒｓｉｏｎ（）である場合、前のバージョンのデータ対象の名称である前のバージョン識別は、ｏｌｄ＿ｖｅｒｓｉｏｎであり、ｃｔｘは、現在のバージョンのデータ対象の名称であり、即ち、現在のバージョン識別をｃｔｘ＝  ｔｒｅｅ．ｖｅｒｓｉｏｎ（ｏｌｄ＿ｖｅｒｓｉｏｎ）と表すことができる。
【００４３】
選択可能には、データ処理要求は、現在のブロックの生成中に関するデータ処理要求であると、現在のバージョン識別を生成するときに、前のバージョン識別を前のブロックのバージョン識別とすることができ、データ処理要求は、現在のトランザクションデータの生成中に関するデータ処理要求であると、当該データ処理要求に対して現在のバージョン識別を生成するときに、前のバージョン識別を、前のトランザクションデータのバージョン識別とすることができる。
【００４４】
選択可能には、異なるデータ対象が操作する記憶スペースは、同じであるが、異なるデータ対象が同一の機能関数を呼び出すときに、当該機能関数に伝達されるパラメータは、異なり、選択可能には、機能関数に伝達されるパラメータには、バージョン識別が含まれなければならず、ここに、バージョン識別は、データ対象に対応する現在のバージョン識別であり、目標データおよび目標データ識別などをさらに含むことができる。たとえば、データ処理要求は、目標データの書き込み操作であると、現在のバージョンのデータ対象は、ｃｔｘ．ｉｎｓｅｒｔ（目標データ、目標データ識別、ｎｅｗ＿ｖｅｒｓｉｏｎ）を呼び出すことができ、ここに、ｎｅｗ＿ｖｅｒｓｉｏｎは、現在のバージョンのデータ対象がｃｔｘ．ｉｎｓｅｒｔ（）関数を呼び出すときに伝達されるパラメータであり、現在のバージョンのデータ対象に対応する現在のバージョン識別である。
【００４５】
また、異なるデータ対象が操作する記憶スペースは、同一であるため、前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するときにも、前のバージョンのデータ対象のバージョン識別を導入する必要がなく、デフォルトでバージョン識別を維持できる。
【００４６】
Ｓ２４０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００４７】
具体的には、データ処理要求に基づいて、現在のバージョン識別を決定した後で、データ処理要求に基づいてデータを処理するための目標キー・バリューを決定し、その後、データ処理要求に基づいて、対応する機能関数を呼び出し、目標キー・バリューを処理する。
【００４８】
例示的に、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理するステップは、現在データ対象において、データ処理要求に基づいて、対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別を機能関数の入力パラメータとすることによって、データ処理要求を実行するステップをさらに含むことができる。
【００４９】
具体的には、データ処理要求は、目標データに対して照会や読取操作を行うものであると、前のバージョンのデータ対象または履歴のいずれのバージョンのデータ対象を決定した後で、データ処理要求における目標データの位置する既存のキー・バリューを目標キー・バリューとすることができ、その後、前のバージョンのデータ対象または履歴のいずれのバージョンのデータ対象に基づいて、照会関数を呼び出し、目標キー・バリューにおけるキー（キー識別および前のバージョン識別または履歴のいずれのバージョン識別）を照会関数の入力パラメータとするとともに、当該照会関数を実行し、目標キー・バリューのバリューから目標データを読取するとともにフィードバックする。
【００５０】
データ処理要求は、目標データに対する書込み操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて挿入関数を呼び出すとともに、目標データ、目標データ識別及び現在のバージョン識別等を挿入関数の入力パラメータとして、当該挿入関数を実行し、目標キー・バリューのキーフィールドには目標データ識別（キー識別として）と現在のバージョン識別が記憶され、目標キー・バリューのバリューには目標データが記憶されているものを取得する。
【００５１】
データ処理要求は、既存のキー・バリューのバリューに対する変更操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて変更関数を呼び出すとともに、目標データ、既存のキー・バリューにおけるキー（キー識別および前のバージョン識別）及び現在のバージョン識別等を変更関数の入力パラメータとして、当該変更関数を実行し、目標キー・バリューのキーフィールドには既存のキー・バリューのキー識別と現在のバージョン識別が記憶され、目標キー・バリューのバリューには目標データが記憶されるものを取得する。
【００５２】
データ処理要求は、既存のキー・バリューにおけるバリューに対する削除操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて削除関数を呼び出すとともに、目標データ、既存のキー・バリューにおけるキー（キー識別および前のバージョン識別）及び現在のバージョン識別等を削除関数の入力パラメータとして、当該削除関数を実行し、目標キー・バリューのキーフィールドには既存のキー・バリューのキー識別と現在のバージョン識別が記憶され、目標キー・バリューのバリューが空であるものを取得する。
【００５３】
Ｓ２５０において、有効化制御コマンドを呼び出して、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象で新たに生成された目標キー・バリューを記憶スペースに書き込む。
【００５４】
ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【００５５】
有効化制御コマンドは、現在のバージョンのデータ対象を有効化にするように制御するために用いられ、即ち、現在のバージョンのデータ対象の処理する全てのデータ処理要求を有効化にするように制御し、さらに、現在のバージョン識別に基づいて、生成された目標キー・バリューが有効となる。データ対象に基づくデータ処理要求に対する処理は、実際にキャッシュされたメモリ容器に応じて設定することができ、キャッシュ中で完成し、有効になったと確認された後で、これらのデータ処理要求によって更新されたキー・バリューを一括して永続化記憶スペースに記憶するようにしてもよい。新しいキー・バリューをメモリからディスクスペースにコピーしてもよく、新しいキー・バリューが既にディスクのキャッシュスペースにある場合、新しいキー・バリューを永続的な記憶に有効化にするように制御すればよい。
【００５６】
選択可能には、基礎記憶システムは、ステップＳ２４０を実行した後で、あらかじめ設定された時間帯を待った後で、自動的に有効化制御コマンドを呼び出すことができ、あるトリガ操作を受信すると、有効化コマンドを呼び出すなどでもよい。例示的に、有効化制御コマンドを呼び出すステップは、現在のバージョンの有効化条件が生成された場合、または上層ソフトウェアから送信された現在のバージョンの有効化コマンドが受信された場合、有効化制御コマンドを呼び出すステップを含むことができる。
【００５７】
ここに、現在のバージョンの有効化条件とは、現在のバージョンが有効になるために満たす必要のある条件を指し、上層ソフトウェアが基礎記憶システムに新しいデータ処理要求を発行したり、待ち時間が自動有効化条件に達したりするなどであってもよい。選択可能には、現在のバージョンの有効化条件を生成するには、１）処理対象データのブロック識別が変更したことと、２）処理対象データのトランザクション識別が変更したことと、３）現在時刻が有効時間間隔を満たすことなどとのうち少なくとも１つを含む。本実施例において、現在のバージョン有効化コマンドとは、上層ソフトウェアから送信された、現在のバージョンのデータ対象が有効になることを示すためのコマンドを指し、現在のバージョン識別、またはデータ処理要求におけるブロック識別またはトランザクション識別などのようなデータ識別を含むことができる。
【００５８】
具体的には、基礎記憶システムが上層ソフトウエアから発行された新しいデータ処理要求を受信すると、処理対象データのブロック識別またはトランザクション識別が変更したことを確定でき、前のブロックまたは前のトランザクションデータが処理済みであることを示すと、有効化制御コマンドを呼び出し、現在のデータ処理要求が実行されたタイムスタンプから現在のタイムスタンプまでの時間間隔が有効化時間間隔以上であると、自動的に有効化制御コマンドを呼び出してもよく、さらに、基礎記憶システムが上層ソフトウェアで発生した現在のバージョンの有効化コマンドを受信すると、有効化制御コマンドを呼び出すなどでもよい。その後、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象で新たに生成された目標キー・バリューを永続化記憶スペースに書き込む。
【００５９】
なお、本実施例において有効化制御コマンドに基づいて、キー・バリューまたはデータを記憶スペースに書き込む権限を限定し、記憶スペースの管理および制御により有利である。
【００６０】
基礎記憶システムが有効化制御コマンドを呼び出していないとき、もし上層ソフトウェアから送信されたバージョン識別修正コマンドを受信すると、まずバージョン識別修正コマンドに従って現在のバージョン識別を修正するとともに、同期して現在のバージョンのデータ対象におけるキー・バリューのキーフィールドにおける現在のバージョン識別を更新することができ、その後、現在のバージョンのデータ対象を有効化にするように制御する。例示的に、現在のバージョンのデータ対象を有効化にするように制御するステップの前に、上層ソフトウエアから伝送されたバージョン識別に基づいて指示を修正し、現在のバージョン識別を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別を修正するステップをさらに含むことができる。
【００６１】
本実施例において、バージョン識別修正コマンドとは、上層ソフトウェアに送信され、現在のバージョンのデータ対象で新たに生成されたキー・バリューのキーフィールドにおけるバージョン識別を修正するためのコマンドを指す。バージョン識別は、一般的にシリアル番号やその他の論理的な意味を持つ識別、例えば、ブロック識別やトランザクション識別、あるいは時間識別などが附加バージョン識別として含むことができる。上層ソフトウェアは、これらの附加バージョン識別を修正できるものが好ましい。
【００６２】
具体的には、バージョン識別修正コマンドは、現在のバージョン識別、修正前のブロック識別またはトランザクション識別、修正後のブロック識別またはトランザクション識別等を含むことができ、或いは、修正後のバージョン識別をさらに含むことができる。選択可能には、バージョン識別修正コマンドは、バージョン識別を構成するブロック識別またはトランザクション識別等を修正するために用いられる。
【００６３】
具体的には、上層ソフトウエアは、基礎記憶システムに送信されたデータ処理要求に含まれる、例えばブロック識別のような目標データ識別が間違えれば、基礎記憶システムに修正前のブロック識別と修正後のブロック識別を含むバージョン識別修正コマンドを送信することができ、基礎記憶システムは、当該バージョン修正コマンドを受信した後で、バージョン修正コマンドの指示に基づいて、修正後のブロック識別で修正前のブロック識別を置換し、さらに現在のバージョン識別の修正を完成し、その後、同期して現在のバージョンのデータ対象におけるキー・バリューのキーフィールドにおける現在のバージョン識別を更新し、現在のバージョン識別のキー・バリューに基づいて修正が完成した場合、かつ、データ対象に基づいて、データ処理要求が完成した後で、有効化制御コマンドを呼び出し、現在のバージョンのデータ対象を有効化にするように制御する。
【００６４】
例示的に、新たに生成された目標キー・バリューを記憶スペースに書き込むステップの前に、失効制御コマンドを呼び出し、現在のバージョンのデータ対象を失効にするように制御するステップをさらに含むことができる。本実施例において、失効制御コマンドは、有効化制御コマンドに対応し、現在のバージョンのデータ対象を失効にするように制御するために用いられ、即ち、現在のバージョンのデータ対象に対応する現在のバージョン識別を失効にし、さらに現在のバージョン識別に基づいて生成された目標キー・バリューを失効にするように制御する。選択可能には、基礎記憶システムは、新たに生成された目標キー・バリューが永続化記憶スペースに書き込まれる前に、ローカル機器がダウンしたり停電したりすると、失効制御コマンドを自動的に呼び出し、さらにあるトリガ操作を受信すると、失効制御コマンドを呼び出してもよい。失効制御コマンドは、メモリにおける新しいキー・バリューを失効にすることができ、または、キャッシュのディスクスペースにおける新しいキー・バリューを削除することができる。例示的に、失効制御コマンドを呼び出すステップは、現在のバージョン失効条件が生成される場合、または、上層ソフトウエアから送信された現在のバージョン失効コマンドを受信する場合に、失効制御コマンドを呼び出すステップを含むことができる。
【００６５】
ここに、現在のバージョン失効条件とは、現在のバージョン失効を確定するために満たす必要がある条件を指し、ローカル機器のダウン、停電、または外的要因による攻撃などにより、新たに生成された目標キー・バリューの未処理完了などでもよい。現在のバージョン失効コマンドとは、上層ソフトウェアが送信した、現在のバージョンのデータ対象失効を示すためのコマンドを指し、現在のバージョン識別、またはデータ処理要求における、例えば、ブロック識別またはトランザクション識別などのようなデータ識別を含むことができる。
【００６６】
具体的には、基礎記憶システムは、上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、または、ローカル機器がダウンまたは停電するなどのときに、失効制御コマンドを呼び出し、現在のバージョンのデータ対象を失効にするように制御し、さらに、現在のバージョンのデータ対象にて新たに生成された目標キーを失効にするため、キャッシュで更新されたキー・バリューを直接破棄することができる。つまり、新たに生成された目標キー・バリューを永続化記憶スペースに書き込むステップ前に、基礎記憶システムが失効制御コマンドを呼び出すと、今回のデータ処理要求を終了し、上層ソフトウエアにデータ処理要求が失敗したという情報などをフィードバックすることができる。永続化記憶スペースは、通常ディスクである。
【００６７】
本出願の実施例に提供される技術構成により、データ処理要求を取得した後で、バージョンのデータ対象に基づいて、現在のバージョン識別を決定する方案を提供し、現在のバージョン識別を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行い、かつ、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別を目標キー・バリューにおけるキーに記憶し、その後、有効化制御コマンドを呼び出し、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象にて新たに生成された目標キー・バリューを記憶スペースに書き込む。本方案において、データに対して書き込み、変更または削除などの処理を行う必要があるとき、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作し、後続的にバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会するのを容易にするものである。特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がなく、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、従来のブロックチェーンのデータ記憶方式に比べられ、ブロックチェーンのデータ記憶に新しい着想を提供する。また、有効化制御コマンドに基づいて、キー・バリューまたはデータを記憶スペースに書き込む権限を限定し、記憶スペースの管理および制御により有利である。
【００６８】
実施例三
図３は、本出願の実施例三に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ処理要求に基づいて、現在のバージョン識別を決定する方案をさらに提供する。図３を参照し、当該方法は、以下のステップを具体的に含む。
【００６９】
Ｓ３１０において、データ処理要求を取得する。
【００７０】
Ｓ３２０において、前のバージョン識別を決定し、設定番号規則に従って現在のバージョン識別を生成する。
【００７１】
或いは、Ｓ３２０の操作は、具体的には、前のバージョン識別を決定し、前のバージョン識別のシリアル番号識別に基づいて、設定番号規則に従って現在のバージョン識別におけるシリアル番号識別を生成し、およびデータ処理要求に基づいて決定されたバージョン附加識別がシリアル番号識別と現在のバージョン識別を構成してもよい。
【００７２】
本実施例において、シリアル番号識別は、シリアル番号値であり、設定番号規則とは、予め設定された、バージョン識別シリアル番号またはシリアル番号識別の決定規則を指し、選択可能には、設定番号規則は、前のブロックの個数またはトランザクションデータの個数に１を加算または減算して番号値またはシリアル番号識別としてもよく、データ処理要求における目標データは、ブロックのデータまたはトランザクションデータでもよく、また、一つのデータ処理要求における目標データが一つのバージョン識別に対応するため、前のバージョン識別に例えば１である予め設定された整数値を加算し、または１を減算して、現在のバージョン識別を得ることができ、前のバージョン識別のシリアル番号識別に１を加算し、または１を減算して、現在のバージョン識別におけるシリアル番号識別を得ることができる。例示的に、バージョン附加識別は、ブロック識別またはトランザクション識別である。
【００７３】
前のバージョン識別は、現在のバージョン識別を生成するために必要な古いバージョン識別であり、前のバージョンのデータ対象の名称でもよい。データ処理要求には、処理対象の目標データ、目標データ識別および前のバージョン識別等が含まれてもよいため、データ処理要求から前のバージョン識別を取得することができる。例示的に、前のバージョン識別を決定するステップは、データ処理要求から前のバージョン識別を抽出するステップ、またはデータ処理要求における業務データ識別に基づいて前のバージョン識別を決定するステップを含むことができる。
【００７４】
ここに、業務データは、処理対象の目標データであり、業務データ識別は、ブロック識別またはトランザクション識別である。具体的には、データ処理要求から前のバージョン識別を直接取得することができ、さらに根据データ処理要求における業務データ識別である目標データ識別に基づいて前のバージョンのブロック識別またはトランザクション識別をバージョン附加識別として決定するとともに、目標データに基づいて、現在ブロックの個数またはトランザクションデータの個数を決定し、さらに、現在ブロックの個数またはトランザクションデータの個数に１を減算し、または１を加算して前のバージョン識別シリアル番号を取得し、その後、バージョン附加識別およびシリアル番号識別に基づいて、前のバージョン識別を決定することができる。
【００７５】
具体的には、前のバージョン識別を決定した後で、前のバージョン識別および設定番号規則に基づいて、現在のバージョン識別を生成することができ、前のバージョン識別のシリアル番号識別および設定番号規則に基づいて、現在のバージョン識別のシリアル番号識別を生成するとともに、データ処理要求から目標データ識別をバージョン附加識別として抽出し、シリアル番号識別およびバージョン附加識別を現在のバージョン識別とすることもできる。
【００７６】
Ｓ３３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００７７】
Ｓ３４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【００７８】
本出願の実施例に提供される技術構成により、データ処理要求を取得した後で、設定番号規則に基づいて、現在のバージョン識別を決定する方案を提供し、方案の柔軟性を増加し、現在のバージョン識別を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行うとともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別を目標キー・バリューのキーフィールドに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらに、データの記憶を完成する。本方案において、データに対して、書き込み、変更または削除等の処理を行う必要があるときに、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作し、後続的にバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会するのを容易にするものであり、特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がなく、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、従来のブロックチェーンのデータ記憶方式に比べられ、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００７９】
実施例四
図４は、本出願の実施例四に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理することをさらに解釈し説明する。図４を参照し、当該方法は、以下のステップを具体的に含む。
【００８０】
Ｓ４１０において、データ処理要求を取得する。
【００８１】
Ｓ４２０において、データ処理要求に基づいて、現在のバージョン識別を決定する。
【００８２】
Ｓ４３０において、データ処理要求で指定された目標データに対する操作方式を判断する。データ処理要求は、目標データの書き込み操作であると、ステップＳ４４０を実行し、データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、ステップＳ４５０を実行し、データ処理要求は、既存のキー・バリューの削除操作であると、ステップＳ４６０を実行し、データ処理要求は、既存のキー・バリューの読取操作であると、ステップＳ４７０を実行する。
【００８３】
なお、一つのデータ処理要求による目標データに対する操作方式は、少なくとも書き込み操作、削除操作、読取操作および変更操作の１種に関する。
【００８４】
Ｓ４４０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに新しいキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューに目標データを書き込むとともに、ステップＳ４８０を実行する。
【００８５】
本実施例において、新しいキー識別とは、既存のキー・バリューと区別されるキー識別を指し、つまり、初めて出現するキー識別である。
【００８６】
具体的には、データ処理要求は、目標データに対する書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求から、例えば、ブロック識別またはトランザクション識別等のような目標データ識別を新しいキー識別としてを取得し、その後、新しいキー識別と現在のバージョン識別を目標キー・バリューのキーフィールドに書き込み、目標データを目標キー・バリューのバリューに書き込む。
【００８７】
例えば、ある新しい口座は、初めて振込操作を実行し、目標データは、振込トランザクションデータ（振込金額）であり、キー識別は、口座名称でもよく、目標データに対する処理は、振込トランザクションデータをキー・バリューのバリューに書き込むことである。
【００８８】
Ｓ４５０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューに目標データを書き込むとともに、ステップＳ４８０を実行する。
【００８９】
具体的には、データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別と前のバージョン識別に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別を目標キー・バリューのキー識別とするとともに、当該キー識別と現在のバージョン識別を目標キー・バリューのキーフィールドに書き込み、目標データを目標キー・バリューのバリューに書き込む。
【００９０】
選択可能には、データ処理要求は、既存のキー・バリューのバリューデータを基に目標データを増加または減算するものであると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別と前のバージョン識別に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別を目標キー・バリューのキー識別とするとともに、当該キー識別と現在のバージョン識別を目標キー・バリューのキーフィールドに書き込み、既存のキー・バリューのバリューデータを取得し、バリューデータで目標データを増加または減算した結果を目標キー・バリューのバリューに書き込むことができる。
【００９１】
なお、本実施例において、データ処理要求が既存のキー・バリューのバリューデータに対する変更であると確定したときに、一つのＫＶ記憶変更データを新規追加することにより、元のＫＶの基礎で修正することよりも、既存のキー・バリューを保留し、後続的にバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会するのを容易にする。
【００９２】
Ｓ４６０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューを空に設定するとともに、ステップＳ４８０を実行する。
【００９３】
具体的には、データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別を目標キー・バリューのキー識別とするとともに、当該キー識別と現在のバージョン識別を目標キー・バリューのキーフィールドに書き込み、目標キー・バリューのバリューを空に設定する。既存のキー・バリューは、依然として保留されるが、上層ソフトウエアでは、現在のバージョン識別に対応するキー・バリューが有効であることを知るため、現在のバージョン識別に基づいて関連データにアクセスすることができ、相対的に既存のキー・バリューが無効であることを確認でき、上層ソフトウエアにアクセスされなくなり、削除操作を行ったことに相当する。上層ソフトウエアが既に無効になった既存のキー・バリューを再利用する必要があるときに、データにアクセスするときに用いるバージョン識別を変更すればよく、既存のキー・バリューに対するデータ制御を復元できる。
【００９４】
Ｓ４７０において、既存のキー・バリューを目標キー・バリューとして決定し、目標キー・バリューのバリューにおけるデータを読取しフィードバックするとともに、ステップＳ４８０を実行する。
【００９５】
具体的には、データ処理要求は、既存のキー・バリューの読取操作または照会操作であると、既存のキー・バリューを目標キー・バリューとするとともに、データ処理要求における目標キー・バリューのキー識別とバージョン識別に基づいて、目標キー・バリューの記憶アドレスを決定し、その後、記憶アドレスに基づいて目標キー・バリューの箇所に位置決めするとともに、目標キー・バリューのバリューからデータを読取るとともに、上層ソフトウエアにフィードバックすることができる。
【００９６】
Ｓ４８０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【００９７】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別を決定した後で、データ処理要求の所定のデータ操作方式、例えば、書き込み操作、読取操作、削除操作または変更操作等に基づいて、対応する処理ポリシーを用いてデータ処理要求を実行するとともに、この過程に新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータの記憶を完成する。特に、データに対して書き込み、変更或削除処理を行う必要があるときに、一つのＫＶ記憶書き込み、変更または削除データを新規追加することにより、元のＫＶの基礎で上記の操作をすることよりも、既存のキー・バリューを保留し、後続的にバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会するのを容易にし、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００９８】
実施例五
図５Ａは、本出願の実施例五に提供されるデータ記憶方法のフローチャートであり、本出願の実施例は、上記の実施例に加え、ブロックチェーンシステムに適用されるときに、分岐状況を処理する方式を提供し、分岐時にデータロールバックとやり直しを行う必要がある問題を効果的に解決し、当該方法は、ブロックチェーンノードに適用可能である。図５Ａを参照し、当該方法は、以下のステップを具体的に含む。
【００９９】
Ｓ５１０において、データ処理要求を取得する。
【０１００】
Ｓ５２０において、データ処理要求に基づいて、現在のバージョン識別を決定する。
【０１０１】
Ｓ５３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【０１０２】
Ｓ５４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【０１０３】
Ｓ５５０において、新たに生成された目標キー・バリューに基づいて、キー識別とバージョン識別とのマッピング関係テーブルに、キー識別と現在のバージョン識別とのマッピング関係を追加する。
【０１０４】
本実施例において、基礎記憶システムは、キー識別とバージョン識別とのマッピング関係テーブルを予め構築し、上層ソフトウェアが照会するために用いられる。選択可能には、キー識別とバージョン識別とのマッピング関係テーブルにおいて、記憶システムにおける全てのキー・バリューのキー識別がリストされており、各キー識別は、１つまたは複数のバージョン識別に対応することができ、バージョン識別は、キー・バリューの更新に従って追加される。
【０１０５】
具体的には、新たに生成された目標キー・バリューを記憶スペースに書き込んだ後で、新たに生成された目標キー・バリューのキー識別とバージョン識別を対応付けてマッピング関係テーブルに記憶することができる。具体的には、新たに生成された目標キー・バリューのキー識別をキー識別とバージョン識別とのマッピング関係テーブルに入力してマッチングし、マッチングが成功すると、当該目標キー・バリューのキー識別が既に記憶されていることがわかり、当該キー識別に関連付けられるバージョン識別をマッピング関係テーブルにおける当該キー識別の対応箇所に追加することができる。マッチングが失敗すると、当該目標キー・バリューのキー識別が記憶されていないことがわかり、マッピング関係テーブルに一つのキー識別とバージョン識別とのインデックスペアを新規追加することができる。例えば、異なるブロックの処理中に、同一の口座に対して複数回の振込操作を発生した可能性があると、当該口座の残高は複数回変化する。すると、当該口座の残高を記憶するためのキー・バリューは、複数の異なるバージョン識別を有する。
【０１０６】
上層ソフトウェアがバージョン識別に対応する修正されたキー識別（すなわち、キー識別に関連付けられるバリュー修正後）を迅速に照会、統計および位置決めすために、基礎記憶システムは、バージョン識別とキー識別との逆インデックステーブルを構築することができ、即ち、一つのバージョン識別は、複数のキー識別に対応し、さらにバージョン識別に基づいて、バージョン識別に対応する修正されたキー識別を迅速に取得できる。例えば、あるブロックの処理中、十つのキー・バリューの更新に関し、当該バージョン識別に対応付けて、この十つのバリューの修正されたキー・バリューのキー識別を記録する。例示的に、新たに生成された目標キー・バリューを記憶スペースに書き込む過程で、バージョン識別とキー識別との逆インデックスにおいて、現在のバージョン識別に対応する新たに生成された目標キー・バリューのキー識別を増加するステップをさらに含むことができる。
【０１０７】
Ｓ５６０において、上層ソフトウエアによりブロックロールバックとやり直しのニーズが発生したことを確定したときに、他のノードから受信したブロックデータ、およびブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを取得する。
【０１０８】
本実施例において、ブロックロールバックとやり直しのニーズは、ブロックチェーンに分岐したときに、上層ソフトウエアに確定されたブロックチェーンノードローカルで記憶されたブロックチェーンデータに対してロールバックとやり直しを行う必要があることであってもよい。所謂分岐とは、あるブロックチェーンノードローカルで記憶されるブロックチェーンにおいて、最後のいくつかのブロックは、他のノードが生成するブロックと一致せず、他のノードのブロックを受け入れ、ローカルのブロックを破棄する必要があることを指す。図５Ｂに示すように、あるブロックチェーンノードローカルで記憶されるブロックチェーンは、Ａ、Ｂ、Ｃ、Ｄの四つのブロックを含み、合意メカニズムにより、Ｄブロックを破棄する必要があり、他のノードに提供されるＥ、Ｆの２つのブロックを受け入れるべきであると確定される。すると、Ｄブロックは、ロールバックする必要があり、ＥとＦブロックは、他のノードから取得したブロックデータに基づいてやり直しを行う必要があることに相当する。
【０１０９】
具体的には、ブロックチェーンノードは、上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定するときに、他のノードにブロックデータ取得要求を送信することによって、他のノードに必要なブロックデータ、およびブロックデータのキー識別とバージョン識別とのマッピング関係テーブルをフィードバックするように要求し、ブロックチェーンノードは、他のノードにフィードバックされるブロックデータ、およびブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを受信することができる。
【０１１０】
Ｓ５７０において、上層ソフトウエアは、ローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、取得したブロックデータをローカルの記憶スペースに書き込むとともに、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加する。
【０１１１】
本実施例において、ローカルＫＶ記憶システムは、ブロックチェーンノードローカルの基礎記憶システムであり、データ書き込み要求とは、ブロックチェーンノードが上層ソフトウエアによるローカルＫＶ記憶システムに送信した、ローカルＫＶ記憶システムがデータをその記憶スペースに書き込むように要求するために用いられるものを指す。
【０１１２】
具体的には、ブロックチェーンノードは、他のノードにフィードバックされるブロックデータのキー識別とバージョン識別とのマッピング関係テーブルをローカルマッピング関係テーブルにおけるマッピング関係テーブルに追加することができる。ローカルマッピング関係テーブルにおけるバージョン識別とキー識別を削除する必要がなく、取得したマッピング関係テーブルにおける新規内容をローカルに追加すればよい。
【０１１３】
上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、ローカルＫＶ記憶システムがブロックデータをローカルの記憶スペースに書き込むように要求することができる。
【０１１４】
他のブロックチェーンノードに送信されたブロックデータとマッピング関係テーブルは、全量のデータを含んでもよく、例えば、ＥブロックとＦブロックの関するブロックデータとバージョン識別のようなやり直しを必要とされるブロックのデータのみを含んでもよい。
【０１１５】
なお、ローカルＫＶ記憶システムに記憶されるキー・バリューの間に空間関連関係を有するため、あるキー・バリューを修正すると、大量の既に記憶されているキー・バリューのインデックスを調整しなければならない。ローカルＫＶ記憶システムが大量の既に記憶されているキー・バリューのインデックスを修正することによるリソースのオーバーヘッドおよび仕事量を減少するために、間違えたインデックスを修正せずに、正確なインデックスを追加することができる。例示的に、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップは、取得したマッピングテーブルのローカルマッピング関係テーブルに対する、増分キー識別とバージョン識別をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別とバージョン識別を保留するステップを含むことができ、ここに、増分バージョン識別には有効化ブロックバージョン識別が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別には失効ブロックバージョン識別が含まれる。
【０１１６】
本実施例において、ブロックチェーンノードローカルのマッピング関係テーブルにおいて、ロールバックを必要とされるブロックに関連するブロックバージョン識別は、失効ブロックバージョン識別であり、それに対応して、他のノードから取得した必要なブロックに関連するブロックバージョン識別は、有効化ブロックバージョン識別である。具体的には、ブロックチェーンノードは、ローカルマッピング関係テーブルにおける既存のキー識別とバージョン識別を保留する場合、他のノードから取得したマッピングテーブルのローカルマッピング関係テーブルに対する有効化ブロックバージョン識別とバージョン識別をローカルマッピング関係テーブルに追加する。
【０１１７】
なお、本実施例において、上層ソフトウエアによって、ブロックロールバック和やり直しのニーズを発生したと確定したときに、ブロックロールバックとやり直し操作を本に実行するものではなく、ノードの維持するキー識別とバージョン識別とのマッピング関係テーブルに基づいて、他のノードに提供されるブロックデータとバージョン識別を直接記憶するものである。
【０１１８】
Ｓ５８０において、上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させる。
【０１１９】
具体的には、ステップＳ５７０を実行した後で、上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロック識別とバージョン識別によって、ローカルＫＶ記憶システムにブロックデータの照会、削除、変更または書き込み等のデータ処理要求を開始させることができ、つまり、ローカルＫＶ記憶システムは、ステップＳ５１０からステップＳ５５０の操作を実行する。
【０１２０】
なお、ステップＳ５６０からステップＳ５８０の操作過程は、ステップＳ５５０の後で実行する必要がなく、ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別とバージョン識別とのマッピング関係テーブルを提供しただけでよく、つまり、ステップＳ５１０からＳ５５０の何れか１つのステップの後または前に実行してもよい。
【０１２１】
本出願の実施例に提供される技術構成により、上層ソフトウエアによってブロックロールバックとやり直しのニーズが発生したと確定したときに、他のノードからブロックデータおよびブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを受信し、その後、上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、ローカルＫＶ記憶システムがブロックデータをローカルの記憶スペースに書き込むように要求すると同時に、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加し、さらに分岐ブロックの調整を完成することができ、従来のロールバックとやり直し方式に比べられ、本方案において、ブロックロールバックとやり直し操作を本に実行するものではなく、ノードの維持するキー識別とバージョン識別とのマッピング関係テーブルのみに基づいて、ブロックチェーンノードのブロックロールバックとやり直しを解決できる。ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、インデックスの占めるデータ量を減少するとともに、ブロックロールバックとやり直しに新しい着想を提供する。
【０１２２】
上記の例で言うと、ブロックチェーンノードは、他のノードからＥブロックとＦブロックの実行中に関するデータを直接受け取り、ブロックにおけるトランザクションデータも含み、トランザクション要求が実行された後で修正されたデータも含み、ブロックの実行中に関するデータは、全部同一のバージョン識別を有する。従って、ブロックチェーンノードは、ＥブロックとＦブロックのバージョン識別が有効であり、Ｄブロックのバージョン識別が無効であると上層ソフトウエアによって確定されるだけで、後続的過程で、有効ブロックに対応するデータのみを処理し、無効ブロックに対応するデータを処理しなくなる。しかし、無効ブロックに対応するデータは、記憶スペースから削除されない。上記の操作過程において、無効ブロックのトランザクション要求をロールバックすることによって、既に記憶されたデータに対する影響を消去する必要がなく、有効ブロックのトランザクション要求をやり直しすることによって新しいデータを取得する必要もない。
【０１２３】
また、なお、同一のブロック内で複数のトランザクション要求に関すれば、同一の目標キー・バリューに対して操作を行う必要があるが、目標キー・バリューのバージョン識別は、１番目のトランザクション要求を実行する際にのみ修正され、後続的に他のトランザクション要求を実行する際に、目標キー・バリューのバリューにおけるデータだけを修正し、バージョン識別を修正しなくてもよい。例えば、一つのブロックの処理中、一つのトランザクション要求は、口座Ａから口座Ｂへ振込むことであり、他のトランザクション要求は、口座Ａから口座Ｃへ振込むことであり、口座Ａに対応する目標キー・バリューのバージョン識別は、口座Ａから口座Ｂへの振込が実行された後で、現在のバージョン識別と決定され、口座Ａから口座Ｃへの振込が実行された後で、口座Ａに対応する目標キー・バリューのバージョン識別は、依然として現在のバージョン識別であり、新しいキー・バリューを生成しない。しかし、同一の目標キー・バリューに対する操作は、全て同一のブロック内にあるため、バージョン識別に基づいてブロックロールバック問題を解決することに影響しない。
【０１２４】
実施例六
図６は、本出願の実施例六に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、さらに最適化されるものである。図６を参照し、当該方法は、以下のステップを具体的に含む。
【０１２５】
Ｓ６１０において、データ処理要求を取得する。
【０１２６】
Ｓ６２０において、データ処理要求に基づいて、現在のバージョン識別を決定する。
【０１２７】
Ｓ６３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【０１２８】
Ｓ６４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【０１２９】
Ｓ６５０において、新たに生成された目標キー・バリューに基づいて、キー識別とバージョン識別とのマッピング関係テーブルに、キー識別と現在のバージョン識別とのマッピング関係を追加する。
【０１３０】
Ｓ６６０において、上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定するとともに、キー識別と有効化バージョン識別に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成する。
【０１３１】
具体的には、ローカルＫＶ記憶システムは、上層ソフトウエアにキー識別とバージョン識別とのマッピング関係テーブルを提供し、ブロックチェーンノードは、あるデータを照会、削除または変更する必要があるときに、上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定し、その後、キー識別と有効化バージョン識別に基づいて、データ変更要求、データ削除要求またはデータ照会要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにステップＳ６１０からステップＳ６５０の操作を実行させるとともに、ローカルＫＶ記憶システムにより、ブロックチェーンノードへ、例えば、読取ったデータなどをフィードバックするなどのような対応する結果をフィードバックする。
【０１３２】
なお、ステップＳ６６０の操作過程は、ステップＳ６５０の後で実行する必要がなく、ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別とバージョン識別とのマッピング関係テーブルを提供しただけでよく、つまり、ステップＳ６１０からＳ６５０の何れか１つのステップの後または前に実行してもよい。
【０１３３】
ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別とバージョン識別とのマッピング関係テーブルを提供した場合、例示的に、上層ソフトウエアによる新業務データの書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別に基づいてデータ書き込み要求が依頼される前のバージョン識別として、データ書き込み要求に携帯するステップをさらに含むことができ、ここに、新業務データは、新しいブロックまたは新しいトランザクションデータである。
【０１３４】
具体的には、ブロックチェーンノードは、ローカルＫＶ記憶システムがデータを記憶する必要があるときに、上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、前の業務データのバージョン識別を決定するとともに、当該バージョン識別をデータ書き込み要求が依頼される前のバージョン識別とし、その後、前のバージョン識別、新業務データ及び新業務データ識別に基づいてデータ書き込み要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにステップＳ６１０からステップＳ６４０の操作を実行させ、新業務データの書き込みを完成するとともに、キー識別とバージョン識別とのマッピング関係テーブルを更新すると同時に、上層ソフトウエアへ更新されたキー識別とバージョン識別とのマッピング関係テーブルをフィードバックするようにステップＳ６５０を実行することができる。
【０１３５】
本出願の実施例に提供される技術構成により、ブロックチェーンノードは、あるデータを照会、削除または変更する必要があるときに、上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定し、その後、キー識別と有効化バージョン識別に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにデータまたはキー・バリューを記憶スペースに書き込む操作を実行させる。
【０１３６】
実施例七
図７は、本出願の実施例七に提供されるデータ記憶装置の構成概略図であり、当該装置は、計算機器、特にブロックチェーンノードである計算機器に配置されることができ、本出願のいずれかの実施例に提供されるデータ記憶方法を実行することができ、実行方法に応じた機能モジュールと有益な効果を具備する。図７に示すように、当該装置は、
データ処理要求を取得するように構成される処理要求取得モジュール７１０と、
データ処理要求に基づいて、現在のバージョン識別を決定するように構成される現在識別決定モジュール７２０と、
データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュール７３０と、
新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュール７４０と、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である。
【０１３７】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別およびデータを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行うとともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別を目標キー・バリューにおけるキーに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータを記憶する。本方案において、データに対して書き込み、変更または削除等の処理を行う必要があるときに、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作を行い、後続的にバージョン識別に基づいて前の他のバージョン識別のキー・バリューデータに迅速に切り替えて照会するのを容易にし、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化した。特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がない。従来のブロックチェーンのデータ記憶方式に比べられ、バージョンの復元速度が向上し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【０１３８】
例示的に、現在識別決定モジュール７２０は、
データ処理要求に基づいて、前のバージョンのデータ対象を決定し、
前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別を決定するように構成され、ここに、現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である。
【０１３９】
例示的に、データ処理モジュール７３０は、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するときに、
データ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するようにさらに構成される。
【０１４０】
例示的に、データ処理モジュール７３０は、
データ処理要求は、目標データの書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに新しいキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューに目標データを書き込み、
データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューに目標データを書き込み、
データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、目標キー・バリューのバリューを空に設定し、
データ処理要求は、既存のキー・バリューの読取操作であると、既存のキー・バリューを目標キー・バリューとして決定し、目標キー・バリューのバリューにおけるデータを読取りフィードバックするようにさらに構成される。
【０１４１】
例示的に、データ処理モジュール７３０は、
現在のバージョンのデータ対象で、データ処理要求に基づいて、対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別を機能関数の入力パラメータとすることによって、データ処理要求を実行するようにさらに構成される。
【０１４２】
例示的に、現在識別決定モジュール７２０は、
前のバージョン識別を決定するように構成される前のバージョン識別決定ユニットと、
設定番号規則に従って現在のバージョン識別を生成するように構成される現在識別決定ユニット、または
前のバージョン識別決定ユニットにより前のバージョン識別を決定した後で、前のバージョン識別のシリアル番号識別に基づいて、設定番号規則に従って現在のバージョン識別におけるシリアル番号識別およびデータ処理要求に基づいて決定されたバージョン附加識別を生成し、シリアル番号識別と前記現在のバージョン識別を構成するように構成される現在識別決定ユニットと、を含むことができる。
【０１４３】
例示的に、前のバージョン識別決定ユニットは、
データ処理要求から前のバージョン識別を抽出する、または、
データ処理要求における業務データ識別に基づいて前のバージョン識別を決定するように構成され、ここに、業務データ識別は、ブロック識別またはトランザクション識別である。
【０１４４】
例示的に、バージョン附加識別は、ブロック識別またはトランザクション識別である。
【０１４５】
例示的に、書き込みモジュール７４０は、
有効化制御コマンドを呼び出すことによって、現在のバージョンのデータ対象を有効化にするように制御するように構成される有効化コマンド呼び出しユニットと、
現在のバージョンのデータ対象で新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みユニットと、を含むことができる。
【０１４６】
例示的に、上記の装置は、
新たに生成された目標キー・バリューを記憶スペースに書き込む前に、失効制御コマンドを呼び出すことによって、現在のバージョンのデータ対象を失効にするように制御するように構成される失効コマンド呼び出しモジュールをさらに含むことができる。
【０１４７】
例示的に、
現在のバージョンのデータ対象を有効化にするように制御する前に、上層ソフトウエアから転送されたバージョン識別修正指示に基づいて、現在のバージョン識別を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別を更新するように構成される修正更新ユニットをさらに含むことができる。
【０１４８】
例示的に、有効化コマンド呼び出しユニットは、
現在のバージョンの有効化条件を生成する、または上層ソフトウエアから送信された現在のバージョン有効化コマンドを受信するときに、有効化制御コマンドを呼び出すように構成される。
【０１４９】
例示的に、現在のバージョンの有効化条件を生成することは、
処理対象データのブロック識別が変更したことと、
処理対象データのトランザクション識別が変更したことと、のうち少なくとも１つを含むことができる。
【０１５０】
例示的に、失効コマンド呼び出しモジュールは、
現在のバージョンの失効条件を生成する、または上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、失効制御コマンドを呼び出すようにさらに構成される。
【０１５１】
例示的に、上記の装置は、
目標キー・バリューのバリューにおけるデータを処理した後で、新たに生成された目標キー・バリューに基づいて、キー識別とバージョン識別とのマッピング関係テーブルに、キー識別と現在のバージョン識別とのマッピング関係を追加するように構成される追加モジュールをさらに含むことができる。
【０１５２】
例示的に、上記の装置は、
上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定したときに、他のノードから受信したブロックデータおよびブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを取得し、
上層ソフトウエアによりローカルＫＶ記憶システムにデータ書き込み要求を開始させ、取得したブロックデータをローカルの記憶スペースに書き込むとともに、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加し、
上層ソフトウエアによりブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させる
ように構成されるロールバックとやり直しモジュールをさらに含むことができる。
【０１５３】
例示的に、ロールバックとやり直しモジュールは、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加するときに、
取得したマッピングテーブルのローカルマッピング関係テーブルに対する増分キー識別とバージョン識別をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別とバージョン識別を保留するようにさらに構成され、ここに、増分バージョン識別には、有効化ブロックバージョン識別が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別には、失効ブロックバージョン識別が含まれる。
【０１５４】
例示的に、上記の装置は、
上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定するとともに、キー識別と有効化バージョン識別に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するように構成される要求生成モジュールをさらに含むことができる。
【０１５５】
例示的に、要求生成モジュールは、
上層ソフトウエアによる新業務データ書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別をデータ書き込みが依頼される前のバージョン識別として、データ書き込み要求に携帯するようにさらに構成され、ここに、新業務データは、新ブロックまたは新トランザクションデータである。
【０１５６】
例示的に、記憶スペースは、ディスク記憶スペースであり、磁盤記憶スペースにおけるＫＶ記憶システムに用いられるインデックスは、順序付きテーブルまたはインデックスツリーである。
【０１５７】
例示的に、上記の装置は、
新たに生成された目標キー・バリューが記憶スペースに書き込まれる過程で、バージョン識別とキー識別との逆インデックスで、現在のバージョン識別に対応する新たに生成された目標キー・バリューのキー識別を増加するように構成される増加モジュールをさらに含むことができる。
【０１５８】
実施例八
図８は、本出願の実施例八に提供される機器の構成概略図である。図８は、本出願の実施形態を実現するために適する例示的な機器１２のブロック図を示す。図８に示す機器１２は、一つの例示に過ぎず、本出願の実施例の機能と使用範囲を何ら制限するわけではない。機器１２は、典型的に計算機器でもよく、ブロックチェーンネットワークノードの機能を担う計算機器であってもよい。
【０１５９】
図８に示すように、機器１２は、泛用計算機器の形で表される。機器１２のコンポーネントは、１つまたは複数のプロセッサまたは処理ユニット１６と、システムメモリ２８と、異なるシステムコンポーネント（システムメモリ２８および処理ユニット１６を含む）を接続するバス１８と、を含むことができるがこれらに限定されない。
【０１６０】
バス１８は、メモリバスまたはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、プロセッサまたは複数のバス構造のうちの任意のバス構造を使用するローカルバスを含む、いくつかの種類のバス構造のうちの１つまたは複数を示す。例を挙げると、これらのアーキテクチャは、インダストリスタンダードアーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＡＣ）バス、拡張ＩＳＡバス、ビデオエレクトロニクススタンダーズアソシエーション（ＶＥＳＡ）ローカルバス、および周辺機器コンポーネント相互接続（ＰＣＩ）バスを含むがこれらに限定されない。
【０１６１】
機器１２は、典型的には、様々なコンピュータシステムによって読み取り可能な媒体を含む。これらの媒体は、揮発性および不揮発性の媒体、リムーバブルメディアおよびノンリムーバブルメディアを含む、機器１２によってアクセスできる任意の利用可能な媒体であってもよい。
【０１６２】
システムメモリ２８は、例えば、ランダムアクセスメモリ（ＲＡＭ）３０および／またはキャッシュメモリ３２のような揮発性メモリの形態のコンピュータシステム読み可能な媒体を含むことができる。機器１２は、さらに、他のリムーバブル／ノンリムーバブルの、揮発性／不揮発性のコンピュータシステム記憶媒体を含むことができる。一例だけとして、記憶システム３４は、ノンリムーバブルの、不揮発性の磁気媒体（図８には図示せず、通常は「ハードディスクドライブ」と呼ばれる）の読み書きに使用できる。図８には示されていないが、  たとえば、「フロッピーディスク」などのようなリムーバブルかつ不揮発性のディスク対して読み書きするためのディスクドライブと、例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭまたは他の光メディアのようなリムーバブルかつ不揮発性の光ディスクに対して読み書きするための光ディスクドライブを提供することができる。これらの場合、各ドライブは、１つまたは複数のデータメディアインタフェースを介してバス１８に接続することができる。システムメモリ２８は、本出願の各実施例の機能を実行するように構成される１組（例えば、少なくとも１つ）のプログラムモジュールを有する少なくとも１つのプログラム製品を含むことができる。
【０１６３】
１組（少なくとも１つ）のプログラムモジュール４２を有するプログラム／ユーティリティ４０は、例えば、システムメモリ２８に記憶されることができ、このようなプログラムモジュール４２は、操作システム、一つまたは複数のアプリケーション、他のプログラムモジュール、およびプログラムデータを含むがこれらに限定されず、これらの例示におけるそれぞれまたはある組合せには、ネットワーク環境の実装が含まれ得る。プログラムモジュール４２は、通常、本出願に記載された実施例における機能および／または方法を実行する。
【０１６４】
機器１２は、例えば、キーボード、ポインティングデバイス、ディスプレイ２４などの１つまたは複数の外部機器１４と通信することもでき、ユーザが当該機器１２と対話できるようにする１つまたは複数の機器、および／または、１つまたは複数の他の計算機器と通信できるようにする、例えばネットワークカード、モデムなどのような何れかの機器とさらに通信することができる。このような通信は、入出力（Ｉ／Ｏ）インタフェース２２を介して行うことができる。また、機器１２は、ネットワークアダプタ２０を介して、１つまたは複数のネットワーク（例えば、ローカルエリアネットワーク（ＬＡＮ）、広域情報通信網（ＷＡＮ）、および／またはインターネットなどのパブリックネットワーク）とさらに通信することができる。図示するように、ネットワークアダプタ２０は、バス１８を介して機器１２の他のモジュールと通信する。図示しないが、機器１２を結びつけて、マイクロコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、ＲＡＩＤシステム、磁気テープドライブおよびデータバックアップ記憶システムなどを含むが、これらに限定されない他のハードウェアおよび／またはソフトウェアモジュールを使用することができることがわかるべきである。
【０１６５】
処理ユニット１６は、システムメモリ２８に記憶されたプログラムを実行することで、例えば、本願の実施例に提供されるデータ記憶方法を実現するなど、様々な機能アプリケーションやデータ処理を実行する。
【０１６６】
実施例九
本出願の実施例九は、プロセッサによって実行されるときに、上記の実施例に記載されているデータ記憶方法を実現することができるコンピュータプログラムが記憶されたコンピュータ読み取り可能な記憶媒体を提供する。当該コンピュータ読み取り可能な記憶媒体は、計算機器に配置されてもよく、ブロックチェーンノードに配置されてもよい。
【０１６７】
本出願の実施例に係るコンピュータ記憶媒体は、１つまたは複数のコンピュータ読み取り可能な媒体の任意の組み合わせを採用することができる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体またはコンピュータ読み取り可能な記憶媒体であってもよい。コンピュータ読み取り可能な記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線、または半導体のシステム、装置またはデバイス、あるいは任意以上の組み合わせとすることができるがこれに限定されない。コンピュータ読み取り可能な記憶媒体のより具体的な例（包括的ではないリスト）は、１つまたは複数のワイヤを有する電気的接続、ポータブルコンピュータディスク、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、消去可能なプログラマブルリードオンリーメモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ、ポータブルコンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または上記の任意の適切な組み合わせを含む。本明細書において、コンピュータ読み取り可能な記憶媒体は、任意の有形な媒体であってもよく、コマンド実行システム、装置又はデバイスによって使用されることができる、またはコマンド実行システム、装置又はデバイスと合わせて使用されることができるプログラムを含み、または記憶する。
【０１６８】
コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能なプログラムコードが伝搬されるベースバンドまたは搬送波の一部として伝搬されるデータ信号を含むことができる。このような伝播されたデータ信号は、電磁気信号、光信号、または上記のいずれかの適切な組み合わせを含むが、これらに限定されない様々な形態をとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体以外の、コマンド実行システム、装置、またはデバイスによって使用される、または組合せて使用されるプログラムを送信、伝播または転送することができる任意のコンピュータ読み取り可能な媒体であってもよい。
【０１６９】
コンピュータ読み取り可能な媒体に含まれるプログラムコードは、無線、電線、光ケーブル、ＲＦなどを含むがこれに限定されない、または上記の任意の適切な組み合わせを含む、任意の適切な媒体で伝送することができる。
【０１７０】
１種または多種のプログラミング言語またはその組合せで本出願の操作を実行するためのコンピュータプログラムコードを作成することができ、前記プログラミング言語は、例えば、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋のようなオブジェクト指向プログラミング言語に加えて、例えば、「ｃ」言語のような通常のプロセスベースプログラミング言語または類似したプログラミング言語を含む。プログラムコードは、完全にユーザコンピュータで実行されてもよく、部分的にユーザコンピュータで実行されてもよく、独立したソフトパッケージとして実行されてもよく、部分的にユーザコンピュータで実行されるとともに、部分的にリモートコンピュータで実行されてもよく、または完全にリモートコンピュータまたはサーバで実行されてもよい。リモートコンピュータに関する場合、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）または広域情報通信網（ＷＡＮ）を含む任意の種類のネットワークを介してユーザコンピュータに接続されてもよいし、例えば、インターネットサービスプロバイダーを利用してインタネットを介する接続で外部コンピュータに接続されてもよい。
【０１７１】
なお、上記の実施例により本出願をより詳細に説明したが、本出願は、上記の実施例に限定されるものではなく、本出願の着想を逸脱しない場合、より多くの他の等価実施例をさらに含むことができ、本出願の範囲は、添付の特許請求の範囲によって決定される。
【図１】
2021531564.tif 000003
【図２】
2021531564.tif 000004
【図３】
2021531564.tif 000005
【図４】
2021531564.tif 000006
【図５Ａ】
2021531564.tif 000007
【図５Ｂ】
2021531564.tif 000008
【図６】
2021531564.tif 000009
【図７】
2021531564.tif 000010
【図８】
2021531564.tif 000011
【手続補正書】
【提出日】令和3年1月8日(2021.1.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理要求を取得するステップと、
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、
新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、
記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、
ことを特徴とするデータ記憶方法。
【請求項２】
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップは、
前記データ処理要求に基づいて、前のバージョンのデータ対象を決定するステップと、
前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別を決定するステップと、を含み、ここに、前記現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である、
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するステップは、
前記データ処理要求における目標データのキー識別とバージョン識別に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するステップを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項４】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
前記データ処理要求は、目標データの書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに新しいキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューに前記目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューに目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別と現在のバージョン識別を書き込み、前記目標キー・バリューのバリューを空に設定するステップと、
前記データ処理要求は、既存のキー・バリューの読取操作であると、既存のキー・バリューを目標キー・バリューとして決定し、前記目標キー・バリューのバリューにおけるデータを読取りフィードバックするステップと、を含む
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
現在のバージョンのデータ対象で、前記データ処理要求に基づいて対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別を前記機能関数の入力パラメータとすることによって、前記データ処理要求を実行するステップを含む、
ことを特徴とする請求項３に記載の方法。
【請求項６】
前記データ処理要求に基づいて、現在のバージョン識別を決定するステップは、
前のバージョン識別を決定し、設定番号規則に従って現在のバージョン識別を生成するステップ、または
前のバージョン識別を決定し、前のバージョン識別のシリアル番号識別に基づいて、設定番号規則に従って現在のバージョン識別におけるシリアル番号識別および前記データ処理要求に基づいて決定されたバージョン附加識別を生成し、前記シリアル番号識別と前記現在のバージョン識別を構成するステップとを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項７】
前のバージョン識別を決定するステップは、
前記データ処理要求から前のバージョン識別を抽出するステップ、または、
前記データ処理要求における業務データ識別に基づいて前のバージョン識別を決定するステップを含み、ここに、前記業務データ識別は、ブロック識別またはトランザクション識別である、
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記バージョン附加識別は、ブロック識別またはトランザクション識別である、
ことを特徴とする請求項６に記載の方法。
【請求項９】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップは、
有効化制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を有効化にするように制御し、前記現在のバージョンのデータ対象における新たに生成された目標キー・バリューを記憶スペースに書き込むステップを含む、
ことを特徴とする請求項２に記載の方法。
【請求項１０】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップの前に、
失効制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を失効にするように制御するステップをさらに含む、
ことを特徴とする請求項２に記載の方法。
【請求項１１】
前記現在のバージョンのデータ対象を有効化にするように制御するステップの前に、
上層ソフトウエアから転送されたバージョン識別修正指示に基づいて、前記現在のバージョン識別を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別を更新するステップをさらに含む、
ことを特徴とする請求項９に記載の方法。
【請求項１２】
有効化制御コマンドを呼び出すステップは、
現在のバージョンの有効化条件を生成する、または上層ソフトウエアから送信された現在のバージョン有効化コマンドを受信するときに、前記有効化制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項９に記載の方法。
【請求項１３】
現在のバージョンの有効化条件を生成するステップは、
処理対象データのブロック識別が変更したことと、
処理対象データのトランザクション識別が変更したことと、のうち少なくとも１つを含む、
ことを特徴とする請求項１２に記載の方法。
【請求項１４】
失効制御コマンドを呼び出すステップは、
現在のバージョンの失効条件を生成する、または上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、失効制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記目標キー・バリューのバリューにおけるデータを処理するステップの後で、
新たに生成された目標キー・バリューに基づいて、キー識別とバージョン識別とのマッピング関係テーブルに、キー識別と現在のバージョン識別とのマッピング関係を追加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項１６】
前記方法は、ブロックチェーンノードに適用されると、前記方法は、
上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定するときに、他のノードから受信したブロックデータ、および前記ブロックデータのキー識別とバージョン識別とのマッピング関係テーブルを取得するステップと、
上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、取得した前記ブロックデータをローカルの記憶スペースに書き込むとともに、取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップと、
上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させるステップと、をさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップは、
取得した前記マッピングテーブルのローカルマッピング関係テーブルに対する増分キー識別とバージョン識別をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別とバージョン識別を保留するステップを含み、ここに、増分バージョン識別には、有効化ブロックバージョン識別が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別には、失効ブロックバージョン識別が含まれる、
ことを特徴とする請求項１６に記載の方法。
【請求項１８】
上層ソフトウエアによりキー識別とバージョン識別とのマッピング関係テーブルで、処理対象データのキー識別と有効化バージョン識別を決定するとともに、前記キー識別と有効化バージョン識別に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１９】
上層ソフトウエアによる新業務データの書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別に基づいて前記データ書き込み要求が依頼される前のバージョン識別として、前記データ書き込み要求に携帯するステップをさらに含み、
前記新業務データは、新しいブロックまたは新しいトランザクションデータである、
ことを特徴とする請求項１５に記載の方法。
【請求項２０】
前記記憶スペースは、ディスク記憶スペースであり、前記ディスク記憶スペースにおけるＫＶ記憶システムで用いられるインデックスは、順序付きテーブルまたはインデックスツリーである、
ことを特徴とする請求項１に記載の方法。
【請求項２１】
新たに生成された目標キー・バリューを記憶スペースに書き込む過程で、
バージョン識別とキー識別との逆インデックスにおいて、現在のバージョン識別に対応する新たに生成された目標キー・バリューのキー識別を増加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項２２】
データ処理要求を取得するように構成される処理要求取得モジュールと、
前記データ処理要求に基づいて、現在のバージョン識別を決定するように構成される現在識別決定モジュールと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュールと、
新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュールと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別とバージョン識別が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別が現在のバージョン識別である、
ことを特徴とするデータ記憶装置。
【請求項２３】
１つまたは複数のプロセッサと、
１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、
前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに請求項１〜２１のいずれかに記載のデータ記憶方法を実現する、
ことを特徴とする機器。
【請求項２４】
コンピュータプログラムが記憶されている記憶媒体であって、
前記コンピュータプログラムがプロセッサによって実行される場合、請求項１〜２１のいずれかに記載のデータ記憶方法が実現される、
ことを特徴とするコンピュータプログラムが記憶されている記憶媒体。
【請求項２５】
コンピュータプログラムであって、
前記コンピュータプログラムにおける命令が実行された場合に、請求項１〜２１のいずれかに記載のデータ記憶方法が実現される、
ことを特徴とするコンピュータプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
本出願の他の実施例は、１つまたは複数のプロセッサと、１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに本出願の何れかの実施例に記載のデータ記憶方法を実現させる、機器をさらに提供する。
本出願のもう一つの態様の実施例により提供されるコンピュータプログラムによれば、前記コンピュータプログラムにおける命令が実行された場合に、本出願の何れかの実施例に記載のデータ記憶方法が実行される。
【手続補正書】
【提出日】令和3年5月31日(2021.5.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理要求を取得するステップと、
前記データ処理要求に基づいて、現在のバージョン識別子を決定するステップと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、
新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、
記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である、
ことを特徴とするデータ記憶方法。
【請求項２】
前記データ処理要求に基づいて、現在のバージョン識別子を決定するステップは、
前記データ処理要求に基づいて、前のバージョンのデータ対象を決定するステップと、
前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別子を決定するステップと、を含み、ここに、前記現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である、
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するステップは、
前記データ処理要求における目標データのキー識別子とバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するステップを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項４】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
前記データ処理要求は、目標データの書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに新しいキー識別子と現在のバージョン識別子を書き込み、前記目標キー・バリューのバリューに前記目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、前記目標キー・バリューのバリューに目標データを書き込むステップと、
前記データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成し、前記目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、前記目標キー・バリューのバリューを空に設定するステップと、
前記データ処理要求は、既存のキー・バリューの読取操作であると、既存のキー・バリューを目標キー・バリューとして決定し、前記目標キー・バリューのバリューにおけるデータを読取りフィードバックするステップと、を含む
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップは、
現在のバージョンのデータ対象で、前記データ処理要求に基づいて対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別子を前記機能関数の入力パラメータとすることによって、前記データ処理要求を実行するステップを含む、
ことを特徴とする請求項３に記載の方法。
【請求項６】
前記データ処理要求に基づいて、現在のバージョン識別子を決定するステップは、
前のバージョン識別子を決定し、設定番号規則に従って現在のバージョン識別子を生成するステップ、または
前のバージョン識別子を決定し、前のバージョン識別子のシリアル番号識別子に基づいて、設定番号規則に従って現在のバージョン識別子におけるシリアル番号識別子および前記データ処理要求に基づいて決定されたバージョン附加識別子を生成し、前記シリアル番号識別子と前記現在のバージョン識別子を構成するステップとを含む、
ことを特徴とする請求項１または２に記載の方法。
【請求項７】
前のバージョン識別子を決定するステップは、
前記データ処理要求から前のバージョン識別子を抽出するステップ、または、
前記データ処理要求における業務データ識別子に基づいて前のバージョン識別子を決定するステップを含み、ここに、前記業務データ識別子は、ブロック識別子またはトランザクション識別子である、
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記バージョン附加識別子は、ブロック識別子またはトランザクション識別子である、
ことを特徴とする請求項６に記載の方法。
【請求項９】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップは、
有効化制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を有効化にするように制御し、前記現在のバージョンのデータ対象における新たに生成された目標キー・バリューを記憶スペースに書き込むステップを含む、
ことを特徴とする請求項２に記載の方法。
【請求項１０】
新たに生成された目標キー・バリューを記憶スペースに書き込むステップの前に、
失効制御コマンドを呼び出すことによって、前記現在のバージョンのデータ対象を失効にするように制御するステップをさらに含む、
ことを特徴とする請求項２に記載の方法。
【請求項１１】
前記現在のバージョンのデータ対象を有効化にするように制御するステップの前に、
上層ソフトウエアから転送されたバージョン識別子修正指示に基づいて、前記現在のバージョン識別子を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別子を更新するステップをさらに含む、
ことを特徴とする請求項９に記載の方法。
【請求項１２】
有効化制御コマンドを呼び出すステップは、
現在のバージョンの有効化条件を生成する、または上層ソフトウエアから送信された現在のバージョン有効化コマンドを受信するときに、前記有効化制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項９に記載の方法。
【請求項１３】
現在のバージョンの有効化条件を生成するステップは、
処理対象データのブロック識別子が変更したことと、
処理対象データのトランザクション識別子が変更したことと、のうち少なくとも１つを含む、
ことを特徴とする請求項１２に記載の方法。
【請求項１４】
失効制御コマンドを呼び出すステップは、
現在のバージョンの失効条件を生成する、または上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、失効制御コマンドを呼び出すステップを含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記目標キー・バリューのバリューにおけるデータを処理するステップの後で、
新たに生成された目標キー・バリューに基づいて、キー識別子とバージョン識別子とのマッピング関係テーブルに、キー識別子と現在のバージョン識別子とのマッピング関係を追加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項１６】
前記方法は、ブロックチェーンノードに適用されると、前記方法は、
上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定するときに、他のノードから受信したブロックデータ、および前記ブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルを取得するステップと、
上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、取得した前記ブロックデータをローカルの記憶スペースに書き込むとともに、取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップと、
上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別子によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させるステップと、をさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
取得した前記マッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップは、
取得した前記マッピングテーブルのローカルマッピング関係テーブルに対する増分キー識別子とバージョン識別子をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別子とバージョン識別子を保留するステップを含み、ここに、増分バージョン識別子には、有効化ブロックバージョン識別子が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別子には、失効ブロックバージョン識別子が含まれる、
ことを特徴とする請求項１６に記載の方法。
【請求項１８】
上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、処理対象データのキー識別子と有効化バージョン識別子を決定するとともに、前記キー識別子と有効化バージョン識別子に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１９】
上層ソフトウエアによる新業務データの書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別子に基づいて前記データ書き込み要求が依頼される前のバージョン識別子として、前記データ書き込み要求に携帯するステップをさらに含み、
前記新業務データは、新しいブロックまたは新しいトランザクションデータである、
ことを特徴とする請求項１５に記載の方法。
【請求項２０】
前記記憶スペースは、ディスク記憶スペースであり、前記ディスク記憶スペースにおけるＫＶ記憶システムで用いられるインデックスは、順序付きテーブルまたはインデックスツリーである、
ことを特徴とする請求項１に記載の方法。
【請求項２１】
新たに生成された目標キー・バリューを記憶スペースに書き込む過程で、
バージョン識別子とキー識別子との逆インデックスにおいて、現在のバージョン識別子に対応する新たに生成された目標キー・バリューのキー識別子を増加するステップをさらに含む、
ことを特徴とする請求項１に記載の方法。
【請求項２２】
データ処理要求を取得するように構成される処理要求取得モジュールと、
前記データ処理要求に基づいて、現在のバージョン識別子を決定するように構成される現在識別子決定モジュールと、
前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュールと、
新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュールと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である、
ことを特徴とするデータ記憶装置。
【請求項２３】
１つまたは複数のプロセッサと、
１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、
前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに請求項１〜２１のいずれかに記載のデータ記憶方法を実現する、
ことを特徴とする機器。
【請求項２４】
コンピュータプログラムが記憶されている記憶媒体であって、
前記コンピュータプログラムがプロセッサによって実行される場合、請求項１〜２１のいずれかに記載のデータ記憶方法が実現される、
ことを特徴とするコンピュータプログラムが記憶されている記憶媒体。
【請求項２５】
コンピュータプログラムであって、
前記コンピュータプログラムにおける命令が実行された場合に、請求項１〜２１のいずれかに記載のデータ記憶方法が実現される、
ことを特徴とするコンピュータプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１８年１２月２６日に中国特許庁に提出された、出願番号が２０１８１１６０５４４６．１である中国特許出願の優先権を主張し、その出願の全部の内容が引用によって本出願に援用される。
【０００２】
本出願の実施例は、コンピュータデータ記憶の技術に関し、例えば、データ記憶方法、装置、機器及び記憶媒体に関する。
【背景技術】
【０００３】
現在のブロックチェーンシステムで用いられている基礎データ記憶技術は、様々があり、そのうち、キー・バリュー（Ｋｅｙ  Ｖａｌｕｅ、ＫＶと簡略される）記憶システムが比較的に広く用いられている。ＫＶ記憶システムは、ブロックチェーンシステムの上層ソフトウェアの制御で、ブロックチェーンシステムのデータリード／ライトなどのアクセス処理をサポートする。
【０００４】
ＫＶ記憶システムでは、多くのＫＶを用いてブロックチェーンシステムに記憶される必要がある各種のデータをそれぞれ記憶し、一部のＫＶはブロックの生成に伴って修正する必要がある。例えば、ブロックチェーンネットワークでトランザクション要求を開始した後、ブロックチェーンネットワークにおけるノードがトランザクション要求におけるスマート契約を実行する必要があり、スマート契約の実行は既存のデータに基づかなければならないと同時に、一部の既存データを修正する必要がある。例えば、振込機能に関するスマート契約の場合に、入金口座と送金口座とのＫＶを読み取る必要があり、ここに、ＫＶのキー（ｋｅｙ）は口座名を記憶することができ、バリュー（ｖａｌｕｅ）は口座残高の数値を記憶することができ、スマート契約が実行されると、振込金額に応じて入金口座と送金口座のｖａｌｕｅ値が修正される。実際に、ブロック生成プロセスは大量のＫＶの変化を伴う。
【０００５】
現在、ブロックチェーンノードは、ＫＶ記憶システムにインデックスを作成してデータにアクセスしやすくするが、ＫＶの変化によってインデックスが大幅に変化してしまい、これは、通常、ＫＶ記憶システム自体が用いるインデックス方式によって決定される。ブロックチェーンシステムの上層ソフトウエアのデータ処理要求によって、ＫＶの追加、ＫＶの削除またはＫＶの修正などの調整を生じるので、それに応じてＫＶのインデックスを調整する必要がある。
【０００６】
ブロックチェーンの分岐により一部のブロックチェーンノードのローカルに記憶されているブロックチェーンデータがロールバックとやり直しを行う必要がある場合、ロールバック操作は、基礎ＫＶ記憶システムの記憶データを段階的に分岐点に復元してから、新しいブロックチェーンでやり直しコマンドを実行し、すなわち、すべてのトランザクションのビジネスロジックを再実行し、生成されたブロックデータをＫＶ記憶システムに再び挿入することは、莫大なリソースオーバーヘッドを招くことに違いない。
【０００７】
そのため、ブロックチェーンシステムのデータ処理の特徴から、既存のＫＶ記憶ジシステムを用いてブロックチェーンノードのデータ記憶をサポートする場合、性能が悪くなってしまう。
【発明の概要】
【０００８】
以下は、本文で詳しく説明する主題の概要である。この概要は、請求項の保護範囲を制限するためのものではない。
【０００９】
本出願の実施例は、ＫＶ記憶システムの記憶方式を最適化し、記憶システムの性能を改善するために、データ記憶方法、装置、機器及び記憶媒体を提供する。
【００１０】
本出願の実施例は、データ処理要求を取得するステップと、前記データ処理要求に基づいて、現在のバージョン識別子を決定するステップと、前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するステップと、新たに生成された目標キー・バリューを記憶スペースに書き込むステップと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である、データ記憶方法を提供する。
【００１１】
本出願の別の実施例は、データ処理要求を取得するように構成される処理要求取得モジュールと、前記データ処理要求に基づいて、現在のバージョン識別子を決定するように構成される現在識別子決定モジュールと、前記データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、前記目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュールと、新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュールと、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である、データ記憶装置をさらに提供する。
【００１２】
本出願の他の実施例は、１つまたは複数のプロセッサと、１つまたは複数のプログラムを記憶するように構成される記憶装置と、を含み、前記１つまたは複数のプログラムが前記１つまたは複数のプロセッサによって実行される場合、前記１つまたは複数のプロセッサに本出願の何れかの実施例に記載のデータ記憶方法を実現させる、機器をさらに提供する。
本出願のもう一つの態様の実施例により提供されるコンピュータプログラムによれば、前記コンピュータプログラムにおける命令が実行された場合に、本出願の何れかの実施例に記載のデータ記憶方法が実行される。
【００１３】
本出願の他の実施例は、コンピュータプログラムが記憶されている記憶媒体をさらに提供し、前記コンピュータプログラムがプロセッサによって実行される場合、本出願の何れかの実施例に記載のデータ記憶方法が実現される。
【００１４】
図面と詳細な説明を読んで理解した後、他の方面を理解することができる。
【図面の簡単な説明】
【００１５】
【図１】本出願の実施例一に提供されるデータ記憶方法のフローチャートである。
【図２】本出願の実施例二に提供されるデータ記憶方法のフローチャートである。
【図３】本出願の実施例三に提供されるデータ記憶方法のフローチャートである。
【図４】本出願の実施例四に提供されるデータ記憶方法のフローチャートである。
【図５Ａ】本出願の実施例五に提供されるデータ記憶方法のフローチャートである。
【図５Ｂ】本出願の実施例五に提供されるブロックチェーン分岐の概略図である。
【図６】本出願の実施例六に提供されるデータ記憶方法のフローチャートである。
【図７】本出願の実施例七に提供されるデータ記憶装置の構成概略図である。
【図８】本出願の実施例八に提供される機器の構成概略図である。
【発明を実施するための形態】
【００１６】
以下、本出願を図面と実施例を参照してさらに詳しく説明する。ここに記載の具体的な実施例は、本出願を説明するためのものに過ぎず、本出願を限定するものではないことを理解することができる。なお、説明を容易にするために、図面には、すべての構成ではなく、本出願に関連する部分のみが示されている。
【００１７】
実施例一
図１は、本出願の実施例一に提供されるデータ記憶方法のフローチャートであり、本実施例は、ＫＶ記憶システムを基礎記憶システムとすると、上層ソフトウェアから発行されたデータを処理する場合に適用されることができる。特に、当該ＫＶ記憶システムは、ブロックチェーンシステムのデータ記憶をサポートするときに、ブロックチェーンシステムのデータ処理特徴とより一致させることができる。当該方法は、ソフトウェアおよび／またはハードウェアの形で実現され得るとともに、ロード計算機器、特にブロックチェーンノードである計算機器に統合され得る、データ記憶装置によって実行されることができる。図１を参照し、当該方法は、以下のステップを具体的に含む。
【００１８】
Ｓ１１０において、データ処理要求を取得する。
【００１９】
本実施例において、データ処理要求とは、データを処理するための要求を指し、具体的には、データ処理要求は、上層ソフトウェアのタイミングが一定のデータ量に達したり、あるトリガメカニズムを受信したりするなど、データを処理する必要がある何れかのタイミングで、基礎記憶システムに送信される、処理対象データに対して書き込み、変更、読取または削除などのある処理操作を行うように基礎記憶システムに要求するものである。本出願の実施例は、特にブロックチェーンシステムのデータ処理に適用し、下記の実施例は、ブロックチェーンデータの処理を例に説明する。しかし、当業者は、本出願の実施例の技術構成がブロックチェーンシステムでの使用に限定されないことを理解することができる。
【００２０】
選択可能には、データ処理要求は、処理対象の目標データを含むことができ、目標データは、ブロックのデータ、トランザクションデータ、または他の業務データや管理データなどであってもよく、トランザクションデータは、ブロックチェーンシステムで開始されたトランザクション要求を処理するデータである。ブロックのデータは、ブロック内に記憶されたデータと、ブロックチェーンに依存するがブロックチェーンから独立してブロックチェーンノードローカルに記憶されたデータとを含むことができる。データ処理要求は、例えば、あるブロックを唯一に識別するための識別子、例えばブロックＩＤを指すブロック識別子、または、あるクラスまたはあるトランザクションデータを唯一に識別するための識別子を指すトランザクション識別子などのような目標データ識別子をさらに含むことができる。
【００２１】
Ｓ１２０において、データ処理要求に基づいて、現在のバージョン識別子を決定する。
【００２２】
本実施例において、バージョン識別子は、現在のデータ処理要求に関するデータに対する更新操作を識別するための唯一識別作用を果たす識別子である。
【００２３】
現在のバージョン識別子とは、今回のデータ処理要求で処理する必要のあるデータに使用されるバージョン識別子を指す。今回のデータ処理要求は、１つまたは複数であってもよい。１つのバージョン識別子は、１つのデータ処理要求に関するデータに適用してもよいし、１ロットのデータ処理要求に関するデータに適用してもよい。具体的には、異なるブロックで生成されたデータ処理要求は、異なるバージョン識別子を有することができ、つまり、同一のブロックの処理中に生成されたデータ処理要求に関するデータは、同一のバージョン識別子を有することができる。あるいは、１つのトランザクションデータの処理中に生成されたデータ処理要求に関するデータは、１つのバージョン識別子を有することもできる。ブロックまたはトランザクションデータの処理中に関するデータは、多くあり得、例えば、トランザクション要求のデータは、記憶する必要がある場合、トランザクション要求データは、書き込み要求に関するデータであり、あるトランザクション要求を実行するスマート契約によって、ある口座の口座残高が変化した場合、当該口座残高は、書き込み要求に関するデータである。
【００２４】
バージョン識別子は、ランダムに生成されてもよいし、例えば、流水番号や流水番号＋ブロック識別子／トランザクション識別子などのような設定規則に従って生成されてもよい。後続の照会、変更等の操作を容易にするために、本実施例において、設定規則に従ってバージョン識別子を生成することが好ましい。設定規則は、例えば、バージョン識別子を整数値とし、前のバージョン識別子を基礎に１をプラスすることによって新しいバージョン識別子を決定するものである。選択可能には、データ処理要求は、前のバージョン識別子を含むこともできる。このため、データ処理要求から前のバージョン識別子を抽出してから、前のバージョン識別子に基づいて、現在のバージョン識別子を生成することができる。
【００２５】
Ｓ１３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００２６】
本実施例において、キー・バリューのキーフィールドは、データのキー識別子とバージョン識別子を記憶するために用いられることができ、キー識別子は、例えば、ブロック識別子やトランザクション識別子などのようなデータの実際の意味を表すことができる識別子であってもよく、キー・バリューのバリューは、データ自体を記憶するために用いられることができる。目標キー・バリューは、データ処理要求の目標データを記憶するために用いられ、データ処理をサポートし、データ処理要求における目標データの位置する既存のキー・バリュー、または、新たに生成されたキー・バリューであってもよい。
【００２７】
データ処理要求は、目標データに対して読取操作を行うものであると、データ処理要求における目標データの位置する既存のキー・バリューを目標キー・バリューとすることができる。例示的に、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するステップは、データ処理要求における目標データのキー識別子とバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するステップを含むことができる。本実施例において、バージョン識別子とは、読み取る必要のあるデータのバージョン識別子を指し、前のバージョン識別子であってもよく、履歴のいずれのバージョン識別子であってもよい。具体的には、目標データのキー識別子とバージョン識別子をインデックスとして、既存のキー・バリューで検索し、一致する既存のキー・バリューを目標キー・バリューとすることができる。
【００２８】
データ処理要求は、目標データに対する書き込み操作、または既存のキー・バリューにおけるバリューに対する変更や削除であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。なお、本実施例において、データに対して削除や変更を行うことが必要である場合、新たに生成されたキー・バリューで操作し、既存のキー・バリューを保留することで、前の他のバージョン識別子のキー・バリューデータに切り替えて検索する必要があるときに、大量のキー・バリューのデータ復元が不要で、切り替え速度が速い。そのため、データを削除または変更する必要がある場合、さらにデータ処理要求における目標データのキー識別子とバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを決定してから、既存のキー・バリューおよび目標キー・バリューに基づいて、目標データに対して削除または変更操作を行う必要がある。
【００２９】
通常、上層ソフトウェアは、アクセス処理が必要な目標データを決定できるため、データ処理要求によってキー識別子とバージョン識別子に対応する情報を伝達することができる。
【００３０】
具体的には、データ処理要求に基づいて、現在のバージョン識別子を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定することができ、その後、データ処理要求の所定のデータの処理方式に基づいて、目標キー・バリューのバリューにおけるデータを処理する。
【００３１】
選択可能には、データ処理要求の所定のデータ処理方式、例えば、変更、照会、書き込みまたは削除などの方式によって、データを処理するポリシーは、異なるが、以下の実施例では、異なる処理方式に対応する処理ポリシーについて詳しく紹介する。
【００３２】
Ｓ１４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【００３３】
本実施例において、記憶スペースとは、目標キー・バリューを記憶するために必要な記憶媒体を指し、例えば、メモリ記憶スペースであってもよいし、ディスク記憶スペースであってもよいなど、大容量の任意の記憶機器であってもよい。ディスクの電源を切った後に保存されたデータは失われず、消去しない場合、永続的に保存され、上層ソフトウェアは、基礎記憶システムが取得したブロックのデータまたはトランザクションデータを永続的に保存する必要があるため、本実施例において、記憶スペースは、ディスク記憶スペースであることが好ましい。キー・バリューの管理や後続の照会などを容易にするために、１つのブロック内のデータに対応するキー・バリューや関連関係のあるキー・バリューを関連付けて記憶することができる。選択可能には、ディスク記憶スペースに用いられるＫＶ記憶システムのインデックスは、順序付きテーブルまたはインデックスツリーであってもよい。ここに、順序付きテーブルは、キー・バリューが増加または減少するように順序付けられているものであり、インデックスツリーとは、キー・バリューをツリー構造に並べるものを指し、インデックスツリーは、二分木であってもよく、かつ、インデックスツリーの右側に位置するキー・バリューのキー識別子が、インデックスツリーの左側に位置するキー・バリューのキー識別子よりも大きいなどであってもよい。
【００３４】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別子およびデータを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行とともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別子を目標キー・バリューのキーフィールドに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータの記憶を完成する。本方案において、後続のバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会することを容易にするために、データに対して書き込み、変更又は削除などの処理を行う必要がある場合、既存のキー・バリューを保持し、新たに生成されたキー・バリューで操作する。特に、ブロックチェーンシステムには、ブロックのロールバックとやり直しのニーズがあるため、例えば、分岐が生じた場合、ロールバックする必要があると、本出願の実施例に提供されるＫＶ記憶システムによれば、大量のキー・バリューのデータの復元を必要せずに、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができる。従来のブロックチェーンのデータ記憶方式に比べられ、バージョンの復元速度が向上し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００３５】
実施例二
図２は、本出願の実施例二に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ対象に基づいて実行する具体的な方案を提供する。図２を参照し、当該方法は、以下のステップを具体的に含む。
【００３６】
Ｓ２１０において、データ処理要求を取得する。
【００３７】
Ｓ２２０において、データ処理要求に基づいて、前のバージョンのデータ対象を決定する。
【００３８】
本実施例において、データ対象は、ハンドルまたはポインタとも呼ばれ、基礎記憶システムにより１つまたは１ロットのデータ処理要求を処理する仮想識別子であってもよく、当該仮想識別子は、プログラムの実行中にコンピュータ機器のハードウェアリソースとソフトウェアにより構築された仮想リソースを使いやすくするために用いられ、主に仮想識別子で記憶リソースに対応することができ、このデータ対象に対してある記憶システムおよび具体的な記憶スペースを用いる必要があることを表す。具体的には、あるデータ対象のメインプログラムが実行中に、対応する機能関数を呼び出してデータ処理要求におけるデータを処理することができる。当該データ対象のメインプログラムと機能関数の対象となる記憶システムは、同一である。
【００３９】
本出願の実施例において、データ対象は、バージョン識別子と１対１に対応し、異なるバージョン識別子に対応するバージョンのデータ対象は、異なる。選択可能には、本実施例において、データ対象の名称は、バージョン識別子を含むことができる。前のバージョンのデータ対象は、現在のバージョンのデータ対象を生成するために必要な古いバージョンのデータ対象であり、上層ソフトウェアによって決定され、実際には、上層ソフトウェアによって前のバージョンのバージョン識別子を決定することができる。本出願の実施例の各バージョンのデータ対象に対応する記憶システムは、すべてのキー・バリュー記憶システムであり、各バージョンのキー・バリューを含んでいる。
【００４０】
Ｓ２３０において、前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別子を決定し、ここに、現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である。
【００４１】
具体的には、前のバージョンのデータ対象の名称、例えば前のバージョン識別子を、データ対象のメインプログラムの入力パラメータとして、例えば、バージョン生成関数によって前のバージョン識別子に基づいて、現在のバージョン識別子を生成し、さらに現在のバージョンのデータ対象を生成する。
【００４２】
たとえば、バージョン生成関数がｔｒｅｅ．ｖｅｒｓｉｏｎ（）である場合、前のバージョンのデータ対象の名称である前のバージョン識別子は、ｏｌｄ＿ｖｅｒｓｉｏｎであり、ｃｔｘは、現在のバージョンのデータ対象の名称であり、即ち、現在のバージョン識別子をｃｔｘ＝  ｔｒｅｅ．ｖｅｒｓｉｏｎ（ｏｌｄ＿ｖｅｒｓｉｏｎ）と表すことができる。
【００４３】
選択可能には、データ処理要求は、現在のブロックの生成中に関するデータ処理要求であると、現在のバージョン識別子を生成するときに、前のバージョン識別子を前のブロックのバージョン識別子とすることができ、データ処理要求は、現在のトランザクションデータの生成中に関するデータ処理要求であると、当該データ処理要求に対して現在のバージョン識別子を生成するときに、前のバージョン識別子を、前のトランザクションデータのバージョン識別子とすることができる。
【００４４】
選択可能には、異なるデータ対象が操作する記憶スペースは、同じであるが、異なるデータ対象が同一の機能関数を呼び出すときに、当該機能関数に伝達されるパラメータは、異なり、選択可能には、機能関数に伝達されるパラメータには、バージョン識別子が含まれなければならず、ここに、バージョン識別子は、データ対象に対応する現在のバージョン識別子であり、目標データおよび目標データ識別子などをさらに含むことができる。たとえば、データ処理要求は、目標データの書き込み操作であると、現在のバージョンのデータ対象は、ｃｔｘ．ｉｎｓｅｒｔ（目標データ、目標データ識別子、ｎｅｗ＿ｖｅｒｓｉｏｎ）を呼び出すことができ、ここに、ｎｅｗ＿ｖｅｒｓｉｏｎは、現在のバージョンのデータ対象がｃｔｘ．ｉｎｓｅｒｔ（）関数を呼び出すときに伝達されるパラメータであり、現在のバージョンのデータ対象に対応する現在のバージョン識別子である。
【００４５】
また、異なるデータ対象が操作する記憶スペースは、同一であるため、前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するときにも、前のバージョンのデータ対象のバージョン識別子を導入する必要がなく、デフォルトでバージョン識別子を維持できる。
【００４６】
Ｓ２４０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００４７】
具体的には、データ処理要求に基づいて、現在のバージョン識別子を決定した後で、データ処理要求に基づいてデータを処理するための目標キー・バリューを決定し、その後、データ処理要求に基づいて、対応する機能関数を呼び出し、目標キー・バリューを処理する。
【００４８】
例示的に、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理するステップは、現在データ対象において、データ処理要求に基づいて、対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別子を機能関数の入力パラメータとすることによって、データ処理要求を実行するステップをさらに含むことができる。
【００４９】
具体的には、データ処理要求は、目標データに対して照会や読取操作を行うものであると、前のバージョンのデータ対象または履歴のいずれのバージョンのデータ対象を決定した後で、データ処理要求における目標データの位置する既存のキー・バリューを目標キー・バリューとすることができ、その後、前のバージョンのデータ対象または履歴のいずれのバージョンのデータ対象に基づいて、照会関数を呼び出し、目標キー・バリューにおけるキー（キー識別子および前のバージョン識別子または履歴のいずれのバージョン識別子）を照会関数の入力パラメータとするとともに、当該照会関数を実行し、目標キー・バリューのバリューから目標データを読取するとともにフィードバックする。
【００５０】
データ処理要求は、目標データに対する書込み操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて挿入関数を呼び出すとともに、目標データ、目標データ識別子及び現在のバージョン識別子等を挿入関数の入力パラメータとして、当該挿入関数を実行し、目標キー・バリューのキーフィールドには目標データ識別子（キー識別子として）と現在のバージョン識別子が記憶され、目標キー・バリューのバリューには目標データが記憶されているものを取得する。
【００５１】
データ処理要求は、既存のキー・バリューのバリューに対する変更操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて変更関数を呼び出すとともに、目標データ、既存のキー・バリューにおけるキー（キー識別子および前のバージョン識別子）及び現在のバージョン識別子等を変更関数の入力パラメータとして、当該変更関数を実行し、目標キー・バリューのキーフィールドには既存のキー・バリューのキー識別子と現在のバージョン識別子が記憶され、目標キー・バリューのバリューには目標データが記憶されるものを取得する。
【００５２】
データ処理要求は、既存のキー・バリューにおけるバリューに対する削除操作であると、新たに生成されたキー・バリューを目標キー・バリューとすることができる。その後、現在のバージョンのデータ対象を用いて削除関数を呼び出すとともに、目標データ、既存のキー・バリューにおけるキー（キー識別子および前のバージョン識別子）及び現在のバージョン識別子等を削除関数の入力パラメータとして、当該削除関数を実行し、目標キー・バリューのキーフィールドには既存のキー・バリューのキー識別子と現在のバージョン識別子が記憶され、目標キー・バリューのバリューが空であるものを取得する。
【００５３】
Ｓ２５０において、有効化制御コマンドを呼び出して、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象で新たに生成された目標キー・バリューを記憶スペースに書き込む。
【００５４】
ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【００５５】
有効化制御コマンドは、現在のバージョンのデータ対象を有効化にするように制御するために用いられ、即ち、現在のバージョンのデータ対象の処理する全てのデータ処理要求を有効化にするように制御し、さらに、現在のバージョン識別子に基づいて、生成された目標キー・バリューが有効となる。データ対象に基づくデータ処理要求に対する処理は、実際にキャッシュされたメモリ容器に応じて設定することができ、キャッシュ中で完成し、有効になったと確認された後で、これらのデータ処理要求によって更新されたキー・バリューを一括して永続化記憶スペースに記憶するようにしてもよい。新しいキー・バリューをメモリからディスクスペースにコピーしてもよく、新しいキー・バリューが既にディスクのキャッシュスペースにある場合、新しいキー・バリューを永続的な記憶に有効化にするように制御すればよい。
【００５６】
選択可能には、基礎記憶システムは、ステップＳ２４０を実行した後で、あらかじめ設定された時間帯を待った後で、自動的に有効化制御コマンドを呼び出すことができ、あるトリガ操作を受信すると、有効化コマンドを呼び出すなどでもよい。例示的に、有効化制御コマンドを呼び出すステップは、現在のバージョンの有効化条件が生成された場合、または上層ソフトウェアから送信された現在のバージョンの有効化コマンドが受信された場合、有効化制御コマンドを呼び出すステップを含むことができる。
【００５７】
ここに、現在のバージョンの有効化条件とは、現在のバージョンが有効になるために満たす必要のある条件を指し、上層ソフトウェアが基礎記憶システムに新しいデータ処理要求を発行したり、待ち時間が自動有効化条件に達したりするなどであってもよい。選択可能には、現在のバージョンの有効化条件を生成するには、１）処理対象データのブロック識別子が変更したことと、２）処理対象データのトランザクション識別子が変更したことと、３）現在時刻が有効時間間隔を満たすことなどとのうち少なくとも１つを含む。本実施例において、現在のバージョン有効化コマンドとは、上層ソフトウェアから送信された、現在のバージョンのデータ対象が有効になることを示すためのコマンドを指し、現在のバージョン識別子、またはデータ処理要求におけるブロック識別子またはトランザクション識別子などのようなデータ識別子を含むことができる。
【００５８】
具体的には、基礎記憶システムが上層ソフトウエアから発行された新しいデータ処理要求を受信すると、処理対象データのブロック識別子またはトランザクション識別子が変更したことを確定でき、前のブロックまたは前のトランザクションデータが処理済みであることを示すと、有効化制御コマンドを呼び出し、現在のデータ処理要求が実行されたタイムスタンプから現在のタイムスタンプまでの時間間隔が有効化時間間隔以上であると、自動的に有効化制御コマンドを呼び出してもよく、さらに、基礎記憶システムが上層ソフトウェアで発生した現在のバージョンの有効化コマンドを受信すると、有効化制御コマンドを呼び出すなどでもよい。その後、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象で新たに生成された目標キー・バリューを永続化記憶スペースに書き込む。
【００５９】
なお、本実施例において有効化制御コマンドに基づいて、キー・バリューまたはデータを記憶スペースに書き込む権限を限定し、記憶スペースの管理および制御により有利である。
【００６０】
基礎記憶システムが有効化制御コマンドを呼び出していないとき、もし上層ソフトウェアから送信されたバージョン識別子修正コマンドを受信すると、まずバージョン識別子修正コマンドに従って現在のバージョン識別子を修正するとともに、同期して現在のバージョンのデータ対象におけるキー・バリューのキーフィールドにおける現在のバージョン識別子を更新することができ、その後、現在のバージョンのデータ対象を有効化にするように制御する。例示的に、現在のバージョンのデータ対象を有効化にするように制御するステップの前に、上層ソフトウエアから伝送されたバージョン識別子に基づいて指示を修正し、現在のバージョン識別子を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別子を修正するステップをさらに含むことができる。
【００６１】
本実施例において、バージョン識別子修正コマンドとは、上層ソフトウェアに送信され、現在のバージョンのデータ対象で新たに生成されたキー・バリューのキーフィールドにおけるバージョン識別子を修正するためのコマンドを指す。バージョン識別子は、一般的にシリアル番号やその他の論理的な意味を持つ識別子、例えば、ブロック識別子やトランザクション識別子、あるいは時間識別子などが附加バージョン識別子として含むことができる。上層ソフトウェアは、これらの附加バージョン識別子を修正できるものが好ましい。
【００６２】
具体的には、バージョン識別子修正コマンドは、現在のバージョン識別子、修正前のブロック識別子またはトランザクション識別子、修正後のブロック識別子またはトランザクション識別子等を含むことができ、或いは、修正後のバージョン識別子をさらに含むことができる。選択可能には、バージョン識別子修正コマンドは、バージョン識別子を構成するブロック識別子またはトランザクション識別子等を修正するために用いられる。
【００６３】
具体的には、上層ソフトウエアは、基礎記憶システムに送信されたデータ処理要求に含まれる、例えばブロック識別子のような目標データ識別子が間違えれば、基礎記憶システムに修正前のブロック識別子と修正後のブロック識別子を含むバージョン識別子修正コマンドを送信することができ、基礎記憶システムは、当該バージョン修正コマンドを受信した後で、バージョン修正コマンドの指示に基づいて、修正後のブロック識別子で修正前のブロック識別子を置換し、さらに現在のバージョン識別子の修正を完成し、その後、同期して現在のバージョンのデータ対象におけるキー・バリューのキーフィールドにおける現在のバージョン識別子を更新し、現在のバージョン識別子のキー・バリューに基づいて修正が完成した場合、かつ、データ対象に基づいて、データ処理要求が完成した後で、有効化制御コマンドを呼び出し、現在のバージョンのデータ対象を有効化にするように制御する。
【００６４】
例示的に、新たに生成された目標キー・バリューを記憶スペースに書き込むステップの前に、失効制御コマンドを呼び出し、現在のバージョンのデータ対象を失効にするように制御するステップをさらに含むことができる。本実施例において、失効制御コマンドは、有効化制御コマンドに対応し、現在のバージョンのデータ対象を失効にするように制御するために用いられ、即ち、現在のバージョンのデータ対象に対応する現在のバージョン識別子を失効にし、さらに現在のバージョン識別子に基づいて生成された目標キー・バリューを失効にするように制御する。選択可能には、基礎記憶システムは、新たに生成された目標キー・バリューが永続化記憶スペースに書き込まれる前に、ローカル機器がダウンしたり停電したりすると、失効制御コマンドを自動的に呼び出し、さらにあるトリガ操作を受信すると、失効制御コマンドを呼び出してもよい。失効制御コマンドは、メモリにおける新しいキー・バリューを失効にすることができ、または、キャッシュのディスクスペースにおける新しいキー・バリューを削除することができる。例示的に、失効制御コマンドを呼び出すステップは、現在のバージョン失効条件が生成される場合、または、上層ソフトウエアから送信された現在のバージョン失効コマンドを受信する場合に、失効制御コマンドを呼び出すステップを含むことができる。
【００６５】
ここに、現在のバージョン失効条件とは、現在のバージョン失効を確定するために満たす必要がある条件を指し、ローカル機器のダウン、停電、または外的要因による攻撃などにより、新たに生成された目標キー・バリューの未処理完了などでもよい。現在のバージョン失効コマンドとは、上層ソフトウェアが送信した、現在のバージョンのデータ対象失効を示すためのコマンドを指し、現在のバージョン識別子、またはデータ処理要求における、例えば、ブロック識別子またはトランザクション識別子などのようなデータ識別子を含むことができる。
【００６６】
具体的には、基礎記憶システムは、上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、または、ローカル機器がダウンまたは停電するなどのときに、失効制御コマンドを呼び出し、現在のバージョンのデータ対象を失効にするように制御し、さらに、現在のバージョンのデータ対象にて新たに生成された目標キーを失効にするため、キャッシュで更新されたキー・バリューを直接破棄することができる。つまり、新たに生成された目標キー・バリューを永続化記憶スペースに書き込むステップ前に、基礎記憶システムが失効制御コマンドを呼び出すと、今回のデータ処理要求を終了し、上層ソフトウエアにデータ処理要求が失敗したという情報などをフィードバックすることができる。永続化記憶スペースは、通常ディスクである。
【００６７】
本出願の実施例に提供される技術構成により、データ処理要求を取得した後で、バージョンのデータ対象に基づいて、現在のバージョン識別子を決定する方案を提供し、現在のバージョン識別子を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行い、かつ、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別子を目標キー・バリューにおけるキーに記憶し、その後、有効化制御コマンドを呼び出し、現在のバージョンのデータ対象を有効化にするように制御し、現在のバージョンのデータ対象にて新たに生成された目標キー・バリューを記憶スペースに書き込む。本方案において、データに対して書き込み、変更または削除などの処理を行う必要があるとき、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作し、後続的にバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会するのを容易にするものである。特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がなく、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、従来のブロックチェーンのデータ記憶方式に比べられ、ブロックチェーンのデータ記憶に新しい着想を提供する。また、有効化制御コマンドに基づいて、キー・バリューまたはデータを記憶スペースに書き込む権限を限定し、記憶スペースの管理および制御により有利である。
【００６８】
実施例三
図３は、本出願の実施例三に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ処理要求に基づいて、現在のバージョン識別子を決定する方案をさらに提供する。図３を参照し、当該方法は、以下のステップを具体的に含む。
【００６９】
Ｓ３１０において、データ処理要求を取得する。
【００７０】
Ｓ３２０において、前のバージョン識別子を決定し、設定番号規則に従って現在のバージョン識別子を生成する。
【００７１】
或いは、Ｓ３２０の操作は、具体的には、前のバージョン識別子を決定し、前のバージョン識別子のシリアル番号識別子に基づいて、設定番号規則に従って現在のバージョン識別子におけるシリアル番号識別子を生成し、およびデータ処理要求に基づいて決定されたバージョン附加識別子がシリアル番号識別子と現在のバージョン識別子を構成してもよい。
【００７２】
本実施例において、シリアル番号識別子は、シリアル番号値であり、設定番号規則とは、予め設定された、バージョン識別子シリアル番号またはシリアル番号識別子の決定規則を指し、選択可能には、設定番号規則は、前のブロックの個数またはトランザクションデータの個数に１を加算または減算して番号値またはシリアル番号識別子としてもよく、データ処理要求における目標データは、ブロックのデータまたはトランザクションデータでもよく、また、一つのデータ処理要求における目標データが一つのバージョン識別子に対応するため、前のバージョン識別子に例えば１である予め設定された整数値を加算し、または１を減算して、現在のバージョン識別子を得ることができ、前のバージョン識別子のシリアル番号識別子に１を加算し、または１を減算して、現在のバージョン識別子におけるシリアル番号識別子を得ることができる。例示的に、バージョン附加識別子は、ブロック識別子またはトランザクション識別子である。
【００７３】
前のバージョン識別子は、現在のバージョン識別子を生成するために必要な古いバージョン識別子であり、前のバージョンのデータ対象の名称でもよい。データ処理要求には、処理対象の目標データ、目標データ識別子および前のバージョン識別子等が含まれてもよいため、データ処理要求から前のバージョン識別子を取得することができる。例示的に、前のバージョン識別子を決定するステップは、データ処理要求から前のバージョン識別子を抽出するステップ、またはデータ処理要求における業務データ識別子に基づいて前のバージョン識別子を決定するステップを含むことができる。
【００７４】
ここに、業務データは、処理対象の目標データであり、業務データ識別子は、ブロック識別子またはトランザクション識別子である。具体的には、データ処理要求から前のバージョン識別子を直接取得することができ、さらに根据データ処理要求における業務データ識別子である目標データ識別子に基づいて前のバージョンのブロック識別子またはトランザクション識別子をバージョン附加識別子として決定するとともに、目標データに基づいて、現在ブロックの個数またはトランザクションデータの個数を決定し、さらに、現在ブロックの個数またはトランザクションデータの個数に１を減算し、または１を加算して前のバージョン識別子シリアル番号を取得し、その後、バージョン附加識別子およびシリアル番号識別子に基づいて、前のバージョン識別子を決定することができる。
【００７５】
具体的には、前のバージョン識別子を決定した後で、前のバージョン識別子および設定番号規則に基づいて、現在のバージョン識別子を生成することができ、前のバージョン識別子のシリアル番号識別子および設定番号規則に基づいて、現在のバージョン識別子のシリアル番号識別子を生成するとともに、データ処理要求から目標データ識別子をバージョン附加識別子として抽出し、シリアル番号識別子およびバージョン附加識別子を現在のバージョン識別子とすることもできる。
【００７６】
Ｓ３３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【００７７】
Ｓ３４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【００７８】
本出願の実施例に提供される技術構成により、データ処理要求を取得した後で、設定番号規則に基づいて、現在のバージョン識別子を決定する方案を提供し、方案の柔軟性を増加し、現在のバージョン識別子を決定した後で、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行うとともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別子を目標キー・バリューのキーフィールドに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらに、データの記憶を完成する。本方案において、データに対して、書き込み、変更または削除等の処理を行う必要があるときに、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作し、後続的にバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会するのを容易にするものであり、特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより、前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がなく、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、従来のブロックチェーンのデータ記憶方式に比べられ、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００７９】
実施例四
図４は、本出願の実施例四に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理することをさらに解釈し説明する。図４を参照し、当該方法は、以下のステップを具体的に含む。
【００８０】
Ｓ４１０において、データ処理要求を取得する。
【００８１】
Ｓ４２０において、データ処理要求に基づいて、現在のバージョン識別子を決定する。
【００８２】
Ｓ４３０において、データ処理要求で指定された目標データに対する操作方式を判断する。データ処理要求は、目標データの書き込み操作であると、ステップＳ４４０を実行し、データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、ステップＳ４５０を実行し、データ処理要求は、既存のキー・バリューの削除操作であると、ステップＳ４６０を実行し、データ処理要求は、既存のキー・バリューの読取操作であると、ステップＳ４７０を実行する。
【００８３】
なお、一つのデータ処理要求による目標データに対する操作方式は、少なくとも書き込み操作、削除操作、読取操作および変更操作の１種に関する。
【００８４】
Ｓ４４０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに新しいキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューに目標データを書き込むとともに、ステップＳ４８０を実行する。
【００８５】
本実施例において、新しいキー識別子とは、既存のキー・バリューと区別されるキー識別子を指し、つまり、初めて出現するキー識別子である。
【００８６】
具体的には、データ処理要求は、目標データに対する書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求から、例えば、ブロック識別子またはトランザクション識別子等のような目標データ識別子を新しいキー識別子としてを取得し、その後、新しいキー識別子と現在のバージョン識別子を目標キー・バリューのキーフィールドに書き込み、目標データを目標キー・バリューのバリューに書き込む。
【００８７】
例えば、ある新しい口座は、初めて振込操作を実行し、目標データは、振込トランザクションデータ（振込金額）であり、キー識別子は、口座名称でもよく、目標データに対する処理は、振込トランザクションデータをキー・バリューのバリューに書き込むことである。
【００８８】
Ｓ４５０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューに目標データを書き込むとともに、ステップＳ４８０を実行する。
【００８９】
具体的には、データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別子と前のバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別子を目標キー・バリューのキー識別子とするとともに、当該キー識別子と現在のバージョン識別子を目標キー・バリューのキーフィールドに書き込み、目標データを目標キー・バリューのバリューに書き込む。
【００９０】
選択可能には、データ処理要求は、既存のキー・バリューのバリューデータを基に目標データを増加または減算するものであると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別子と前のバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別子を目標キー・バリューのキー識別子とするとともに、当該キー識別子と現在のバージョン識別子を目標キー・バリューのキーフィールドに書き込み、既存のキー・バリューのバリューデータを取得し、バリューデータで目標データを増加または減算した結果を目標キー・バリューのバリューに書き込むことができる。
【００９１】
なお、本実施例において、データ処理要求が既存のキー・バリューのバリューデータに対する変更であると確定したときに、一つのＫＶ記憶変更データを新規追加することにより、元のＫＶの基礎で修正することよりも、既存のキー・バリューを保留し、後続的にバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会するのを容易にする。
【００９２】
Ｓ４６０において、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューを空に設定するとともに、ステップＳ４８０を実行する。
【００９３】
具体的には、データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成するとともに、データ処理要求における目標データのキー識別子とバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを決定し、その後、既存のキー・バリューのキー識別子を目標キー・バリューのキー識別子とするとともに、当該キー識別子と現在のバージョン識別子を目標キー・バリューのキーフィールドに書き込み、目標キー・バリューのバリューを空に設定する。既存のキー・バリューは、依然として保留されるが、上層ソフトウエアでは、現在のバージョン識別子に対応するキー・バリューが有効であることを知るため、現在のバージョン識別子に基づいて関連データにアクセスすることができ、相対的に既存のキー・バリューが無効であることを確認でき、上層ソフトウエアにアクセスされなくなり、削除操作を行ったことに相当する。上層ソフトウエアが既に無効になった既存のキー・バリューを再利用する必要があるときに、データにアクセスするときに用いるバージョン識別子を変更すればよく、既存のキー・バリューに対するデータ制御を復元できる。
【００９４】
Ｓ４７０において、既存のキー・バリューを目標キー・バリューとして決定し、目標キー・バリューのバリューにおけるデータを読取しフィードバックするとともに、ステップＳ４８０を実行する。
【００９５】
具体的には、データ処理要求は、既存のキー・バリューの読取操作または照会操作であると、既存のキー・バリューを目標キー・バリューとするとともに、データ処理要求における目標キー・バリューのキー識別子とバージョン識別子に基づいて、目標キー・バリューの記憶アドレスを決定し、その後、記憶アドレスに基づいて目標キー・バリューの箇所に位置決めするとともに、目標キー・バリューのバリューからデータを読取るとともに、上層ソフトウエアにフィードバックすることができる。
【００９６】
Ｓ４８０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【００９７】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別子を決定した後で、データ処理要求の所定のデータ操作方式、例えば、書き込み操作、読取操作、削除操作または変更操作等に基づいて、対応する処理ポリシーを用いてデータ処理要求を実行するとともに、この過程に新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータの記憶を完成する。特に、データに対して書き込み、変更或削除処理を行う必要があるときに、一つのＫＶ記憶書き込み、変更または削除データを新規追加することにより、元のＫＶの基礎で上記の操作をすることよりも、既存のキー・バリューを保留し、後続的にバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会するのを容易にし、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【００９８】
実施例五
図５Ａは、本出願の実施例五に提供されるデータ記憶方法のフローチャートであり、本出願の実施例は、上記の実施例に加え、ブロックチェーンシステムに適用されるときに、分岐状況を処理する方式を提供し、分岐時にデータロールバックとやり直しを行う必要がある問題を効果的に解決し、当該方法は、ブロックチェーンノードに適用可能である。図５Ａを参照し、当該方法は、以下のステップを具体的に含む。
【００９９】
Ｓ５１０において、データ処理要求を取得する。
【０１００】
Ｓ５２０において、データ処理要求に基づいて、現在のバージョン識別子を決定する。
【０１０１】
Ｓ５３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【０１０２】
Ｓ５４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【０１０３】
Ｓ５５０において、新たに生成された目標キー・バリューに基づいて、キー識別子とバージョン識別子とのマッピング関係テーブルに、キー識別子と現在のバージョン識別子とのマッピング関係を追加する。
【０１０４】
本実施例において、基礎記憶システムは、キー識別子とバージョン識別子とのマッピング関係テーブルを予め構築し、上層ソフトウェアが照会するために用いられる。選択可能には、キー識別子とバージョン識別子とのマッピング関係テーブルにおいて、記憶システムにおける全てのキー・バリューのキー識別子がリストされており、各キー識別子は、１つまたは複数のバージョン識別子に対応することができ、バージョン識別子は、キー・バリューの更新に従って追加される。
【０１０５】
具体的には、新たに生成された目標キー・バリューを記憶スペースに書き込んだ後で、新たに生成された目標キー・バリューのキー識別子とバージョン識別子を対応付けてマッピング関係テーブルに記憶することができる。具体的には、新たに生成された目標キー・バリューのキー識別子をキー識別子とバージョン識別子とのマッピング関係テーブルに入力してマッチングし、マッチングが成功すると、当該目標キー・バリューのキー識別子が既に記憶されていることがわかり、当該キー識別子に関連付けられるバージョン識別子をマッピング関係テーブルにおける当該キー識別子の対応箇所に追加することができる。マッチングが失敗すると、当該目標キー・バリューのキー識別子が記憶されていないことがわかり、マッピング関係テーブルに一つのキー識別子とバージョン識別子とのインデックスペアを新規追加することができる。例えば、異なるブロックの処理中に、同一の口座に対して複数回の振込操作を発生した可能性があると、当該口座の残高は複数回変化する。すると、当該口座の残高を記憶するためのキー・バリューは、複数の異なるバージョン識別子を有する。
【０１０６】
上層ソフトウェアがバージョン識別子に対応する修正されたキー識別子（すなわち、キー識別子に関連付けられるバリュー修正後）を迅速に照会、統計および位置決めすために、基礎記憶システムは、バージョン識別子とキー識別子との逆インデックステーブルを構築することができ、即ち、一つのバージョン識別子は、複数のキー識別子に対応し、さらにバージョン識別子に基づいて、バージョン識別子に対応する修正されたキー識別子を迅速に取得できる。例えば、あるブロックの処理中、十つのキー・バリューの更新に関し、当該バージョン識別子に対応付けて、この十つのバリューの修正されたキー・バリューのキー識別子を記録する。例示的に、新たに生成された目標キー・バリューを記憶スペースに書き込む過程で、バージョン識別子とキー識別子との逆インデックスにおいて、現在のバージョン識別子に対応する新たに生成された目標キー・バリューのキー識別子を増加するステップをさらに含むことができる。
【０１０７】
Ｓ５６０において、上層ソフトウエアによりブロックロールバックとやり直しのニーズが発生したことを確定したときに、他のノードから受信したブロックデータ、およびブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルを取得する。
【０１０８】
本実施例において、ブロックロールバックとやり直しのニーズは、ブロックチェーンに分岐したときに、上層ソフトウエアに確定されたブロックチェーンノードローカルで記憶されたブロックチェーンデータに対してロールバックとやり直しを行う必要があることであってもよい。所謂分岐とは、あるブロックチェーンノードローカルで記憶されるブロックチェーンにおいて、最後のいくつかのブロックは、他のノードが生成するブロックと一致せず、他のノードのブロックを受け入れ、ローカルのブロックを破棄する必要があることを指す。図５Ｂに示すように、あるブロックチェーンノードローカルで記憶されるブロックチェーンは、Ａ、Ｂ、Ｃ、Ｄの四つのブロックを含み、合意メカニズムにより、Ｄブロックを破棄する必要があり、他のノードに提供されるＥ、Ｆの２つのブロックを受け入れるべきであると確定される。すると、Ｄブロックは、ロールバックする必要があり、ＥとＦブロックは、他のノードから取得したブロックデータに基づいてやり直しを行う必要があることに相当する。
【０１０９】
具体的には、ブロックチェーンノードは、上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定するときに、他のノードにブロックデータ取得要求を送信することによって、他のノードに必要なブロックデータ、およびブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルをフィードバックするように要求し、ブロックチェーンノードは、他のノードにフィードバックされるブロックデータ、およびブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルを受信することができる。
【０１１０】
Ｓ５７０において、上層ソフトウエアは、ローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、取得したブロックデータをローカルの記憶スペースに書き込むとともに、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加する。
【０１１１】
本実施例において、ローカルＫＶ記憶システムは、ブロックチェーンノードローカルの基礎記憶システムであり、データ書き込み要求とは、ブロックチェーンノードが上層ソフトウエアによるローカルＫＶ記憶システムに送信した、ローカルＫＶ記憶システムがデータをその記憶スペースに書き込むように要求するために用いられるものを指す。
【０１１２】
具体的には、ブロックチェーンノードは、他のノードにフィードバックされるブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルをローカルマッピング関係テーブルにおけるマッピング関係テーブルに追加することができる。ローカルマッピング関係テーブルにおけるバージョン識別子とキー識別子を削除する必要がなく、取得したマッピング関係テーブルにおける新規内容をローカルに追加すればよい。
【０１１３】
上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、ローカルＫＶ記憶システムがブロックデータをローカルの記憶スペースに書き込むように要求することができる。
【０１１４】
他のブロックチェーンノードに送信されたブロックデータとマッピング関係テーブルは、全量のデータを含んでもよく、例えば、ＥブロックとＦブロックの関するブロックデータとバージョン識別子のようなやり直しを必要とされるブロックのデータのみを含んでもよい。
【０１１５】
なお、ローカルＫＶ記憶システムに記憶されるキー・バリューの間に空間関連関係を有するため、あるキー・バリューを修正すると、大量の既に記憶されているキー・バリューのインデックスを調整しなければならない。ローカルＫＶ記憶システムが大量の既に記憶されているキー・バリューのインデックスを修正することによるリソースのオーバーヘッドおよび仕事量を減少するために、間違えたインデックスを修正せずに、正確なインデックスを追加することができる。例示的に、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加するステップは、取得したマッピングテーブルのローカルマッピング関係テーブルに対する、増分キー識別子とバージョン識別子をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別子とバージョン識別子を保留するステップを含むことができ、ここに、増分バージョン識別子には有効化ブロックバージョン識別子が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別子には失効ブロックバージョン識別子が含まれる。
【０１１６】
本実施例において、ブロックチェーンノードローカルのマッピング関係テーブルにおいて、ロールバックを必要とされるブロックに関連するブロックバージョン識別子は、失効ブロックバージョン識別子であり、それに対応して、他のノードから取得した必要なブロックに関連するブロックバージョン識別子は、有効化ブロックバージョン識別子である。具体的には、ブロックチェーンノードは、ローカルマッピング関係テーブルにおける既存のキー識別子とバージョン識別子を保留する場合、他のノードから取得したマッピングテーブルのローカルマッピング関係テーブルに対する有効化ブロックバージョン識別子とバージョン識別子をローカルマッピング関係テーブルに追加する。
【０１１７】
なお、本実施例において、上層ソフトウエアによって、ブロックロールバック和やり直しのニーズを発生したと確定したときに、ブロックロールバックとやり直し操作を本に実行するものではなく、ノードの維持するキー識別子とバージョン識別子とのマッピング関係テーブルに基づいて、他のノードに提供されるブロックデータとバージョン識別子を直接記憶するものである。
【０１１８】
Ｓ５８０において、上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別子によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させる。
【０１１９】
具体的には、ステップＳ５７０を実行した後で、上層ソフトウエアがブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロック識別子とバージョン識別子によって、ローカルＫＶ記憶システムにブロックデータの照会、削除、変更または書き込み等のデータ処理要求を開始させることができ、つまり、ローカルＫＶ記憶システムは、ステップＳ５１０からステップＳ５５０の操作を実行する。
【０１２０】
なお、ステップＳ５６０からステップＳ５８０の操作過程は、ステップＳ５５０の後で実行する必要がなく、ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別子とバージョン識別子とのマッピング関係テーブルを提供しただけでよく、つまり、ステップＳ５１０からＳ５５０の何れか１つのステップの後または前に実行してもよい。
【０１２１】
本出願の実施例に提供される技術構成により、上層ソフトウエアによってブロックロールバックとやり直しのニーズが発生したと確定したときに、他のノードからブロックデータおよびブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルを受信し、その後、上層ソフトウエアがローカルＫＶ記憶システムにデータ書き込み要求を開始させることによって、ローカルＫＶ記憶システムがブロックデータをローカルの記憶スペースに書き込むように要求すると同時に、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加し、さらに分岐ブロックの調整を完成することができ、従来のロールバックとやり直し方式に比べられ、本方案において、ブロックロールバックとやり直し操作を本に実行するものではなく、ノードの維持するキー識別子とバージョン識別子とのマッピング関係テーブルのみに基づいて、ブロックチェーンノードのブロックロールバックとやり直しを解決できる。ブロックチェーンＫＶ記憶システムのインデックス方式を最適化し、インデックスの占めるデータ量を減少するとともに、ブロックロールバックとやり直しに新しい着想を提供する。
【０１２２】
上記の例で言うと、ブロックチェーンノードは、他のノードからＥブロックとＦブロックの実行中に関するデータを直接受け取り、ブロックにおけるトランザクションデータも含み、トランザクション要求が実行された後で修正されたデータも含み、ブロックの実行中に関するデータは、全部同一のバージョン識別子を有する。従って、ブロックチェーンノードは、ＥブロックとＦブロックのバージョン識別子が有効であり、Ｄブロックのバージョン識別子が無効であると上層ソフトウエアによって確定されるだけで、後続的過程で、有効ブロックに対応するデータのみを処理し、無効ブロックに対応するデータを処理しなくなる。しかし、無効ブロックに対応するデータは、記憶スペースから削除されない。上記の操作過程において、無効ブロックのトランザクション要求をロールバックすることによって、既に記憶されたデータに対する影響を消去する必要がなく、有効ブロックのトランザクション要求をやり直しすることによって新しいデータを取得する必要もない。
【０１２３】
また、なお、同一のブロック内で複数のトランザクション要求に関すれば、同一の目標キー・バリューに対して操作を行う必要があるが、目標キー・バリューのバージョン識別子は、１番目のトランザクション要求を実行する際にのみ修正され、後続的に他のトランザクション要求を実行する際に、目標キー・バリューのバリューにおけるデータだけを修正し、バージョン識別子を修正しなくてもよい。例えば、一つのブロックの処理中、一つのトランザクション要求は、口座Ａから口座Ｂへ振込むことであり、他のトランザクション要求は、口座Ａから口座Ｃへ振込むことであり、口座Ａに対応する目標キー・バリューのバージョン識別子は、口座Ａから口座Ｂへの振込が実行された後で、現在のバージョン識別子と決定され、口座Ａから口座Ｃへの振込が実行された後で、口座Ａに対応する目標キー・バリューのバージョン識別子は、依然として現在のバージョン識別子であり、新しいキー・バリューを生成しない。しかし、同一の目標キー・バリューに対する操作は、全て同一のブロック内にあるため、バージョン識別子に基づいてブロックロールバック問題を解決することに影響しない。
【０１２４】
実施例六
図６は、本出願の実施例六に提供されるデータ記憶方法のフローチャートであり、本実施例は、上記の実施例に加え、さらに最適化されるものである。図６を参照し、当該方法は、以下のステップを具体的に含む。
【０１２５】
Ｓ６１０において、データ処理要求を取得する。
【０１２６】
Ｓ６２０において、データ処理要求に基づいて、現在のバージョン識別子を決定する。
【０１２７】
Ｓ６３０において、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理する。
【０１２８】
Ｓ６４０において、新たに生成された目標キー・バリューを記憶スペースに書き込み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【０１２９】
Ｓ６５０において、新たに生成された目標キー・バリューに基づいて、キー識別子とバージョン識別子とのマッピング関係テーブルに、キー識別子と現在のバージョン識別子とのマッピング関係を追加する。
【０１３０】
Ｓ６６０において、上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、処理対象データのキー識別子と有効化バージョン識別子を決定するとともに、キー識別子と有効化バージョン識別子に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成する。
【０１３１】
具体的には、ローカルＫＶ記憶システムは、上層ソフトウエアにキー識別子とバージョン識別子とのマッピング関係テーブルを提供し、ブロックチェーンノードは、あるデータを照会、削除または変更する必要があるときに、上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、処理対象データのキー識別子と有効化バージョン識別子を決定し、その後、キー識別子と有効化バージョン識別子に基づいて、データ変更要求、データ削除要求またはデータ照会要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにステップＳ６１０からステップＳ６５０の操作を実行させるとともに、ローカルＫＶ記憶システムにより、ブロックチェーンノードへ、例えば、読取ったデータなどをフィードバックするなどのような対応する結果をフィードバックする。
【０１３２】
なお、ステップＳ６６０の操作過程は、ステップＳ６５０の後で実行する必要がなく、ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別子とバージョン識別子とのマッピング関係テーブルを提供しただけでよく、つまり、ステップＳ６１０からＳ６５０の何れか１つのステップの後または前に実行してもよい。
【０１３３】
ローカルＫＶ記憶システムが既にその上層ソフトウエアにキー識別子とバージョン識別子とのマッピング関係テーブルを提供した場合、例示的に、上層ソフトウエアによる新業務データの書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別子に基づいてデータ書き込み要求が依頼される前のバージョン識別子として、データ書き込み要求に携帯するステップをさらに含むことができ、ここに、新業務データは、新しいブロックまたは新しいトランザクションデータである。
【０１３４】
具体的には、ブロックチェーンノードは、ローカルＫＶ記憶システムがデータを記憶する必要があるときに、上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、前の業務データのバージョン識別子を決定するとともに、当該バージョン識別子をデータ書き込み要求が依頼される前のバージョン識別子とし、その後、前のバージョン識別子、新業務データ及び新業務データ識別子に基づいてデータ書き込み要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにステップＳ６１０からステップＳ６４０の操作を実行させ、新業務データの書き込みを完成するとともに、キー識別子とバージョン識別子とのマッピング関係テーブルを更新すると同時に、上層ソフトウエアへ更新されたキー識別子とバージョン識別子とのマッピング関係テーブルをフィードバックするようにステップＳ６５０を実行することができる。
【０１３５】
本出願の実施例に提供される技術構成により、ブロックチェーンノードは、あるデータを照会、削除または変更する必要があるときに、上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、処理対象データのキー識別子と有効化バージョン識別子を決定し、その後、キー識別子と有効化バージョン識別子に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するとともに、当該要求を上層ソフトウエアによりローカルＫＶ記憶システムに送信することによって、ローカルＫＶ記憶システムにデータまたはキー・バリューを記憶スペースに書き込む操作を実行させる。
【０１３６】
実施例七
図７は、本出願の実施例七に提供されるデータ記憶装置の構成概略図であり、当該装置は、計算機器、特にブロックチェーンノードである計算機器に配置されることができ、本出願のいずれかの実施例に提供されるデータ記憶方法を実行することができ、実行方法に応じた機能モジュールと有益な効果を具備する。図７に示すように、当該装置は、
データ処理要求を取得するように構成される処理要求取得モジュール７１０と、
データ処理要求に基づいて、現在のバージョン識別子を決定するように構成される現在識別子決定モジュール７２０と、
データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータを処理するように構成されるデータ処理モジュール７３０と、
新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みモジュール７４０と、を含み、ここに、記憶スペースにおけるキー・バリューのキーフィールドにキー識別子とバージョン識別子が記憶されるとともに、新たに生成された目標キー・バリューのキーフィールドにおけるバージョン識別子が現在のバージョン識別子である。
【０１３７】
本出願の実施例に提供される技術構成により、データ処理要求に基づいて、現在のバージョン識別子およびデータを処理するための目標キー・バリューを決定するとともに、目標キー・バリューのバリューにおけるデータに対して、例えば、書き込み、変更、削除または読取などの処理を行うとともに、目標キー・バリューが新たに生成された目標キー・バリューである場合、現在のバージョン識別子を目標キー・バリューにおけるキーに記憶し、その後、新たに生成された目標キー・バリューを記憶スペースに書き込み、さらにデータを記憶する。本方案において、データに対して書き込み、変更または削除等の処理を行う必要があるときに、既存のキー・バリューを保留し、新たに生成されたキー・バリューで操作を行い、後続的にバージョン識別子に基づいて前の他のバージョン識別子のキー・バリューデータに迅速に切り替えて照会するのを容易にし、ブロックチェーンＫＶ記憶システムのインデックス方式を最適化した。特に、ブロックチェーンシステムには、ブロックロールバックとやり直しのニーズがあるため、例えば、分岐する際にロールバックする必要があれば、本出願の実施例に提供されるＫＶ記憶システムにより前の何れかのバージョンのキー・バリューデータに容易に切り替えることができ、大量のキー・バリューのデータ復元を行う必要がない。従来のブロックチェーンのデータ記憶方式に比べられ、バージョンの復元速度が向上し、ブロックチェーンのデータ記憶に新しい着想を提供する。
【０１３８】
例示的に、現在識別子決定モジュール７２０は、
データ処理要求に基づいて、前のバージョンのデータ対象を決定し、
前のバージョンのデータ対象に基づいて、現在のバージョンのデータ対象を生成するとともに、現在のバージョン識別子を決定するように構成され、ここに、現在のバージョンのデータ対象と前のバージョンのデータ対象とは、操作する記憶スペースが同一である。
【０１３９】
例示的に、データ処理モジュール７３０は、データ処理要求に基づいて、データを処理するための目標キー・バリューを決定するときに、
データ処理要求における目標データのキー識別子とバージョン識別子に基づいて、目標データの位置する既存のキー・バリューを目標キー・バリューとして決定するようにさらに構成される。
【０１４０】
例示的に、データ処理モジュール７３０は、
データ処理要求は、目標データの書き込み操作であると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに新しいキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューに目標データを書き込み、
データ処理要求は、既存のキー・バリューのバリューデータを目標データに変更するものであると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューに目標データを書き込み、
データ処理要求は、既存のキー・バリューの削除操作であると、新しいキー・バリューを目標キー・バリューとして生成し、目標キー・バリューのキーフィールドに既存のキー・バリューのキー識別子と現在のバージョン識別子を書き込み、目標キー・バリューのバリューを空に設定し、
データ処理要求は、既存のキー・バリューの読取操作であると、既存のキー・バリューを目標キー・バリューとして決定し、目標キー・バリューのバリューにおけるデータを読取りフィードバックするようにさらに構成される。
【０１４１】
例示的に、データ処理モジュール７３０は、
現在のバージョンのデータ対象で、データ処理要求に基づいて、対応するデータ操作の機能関数を呼び出し、現在のバージョンのデータ対象の現在のバージョン識別子を機能関数の入力パラメータとすることによって、データ処理要求を実行するようにさらに構成される。
【０１４２】
例示的に、現在識別子決定モジュール７２０は、
前のバージョン識別子を決定するように構成される前のバージョン識別子決定ユニットと、
設定番号規則に従って現在のバージョン識別子を生成するように構成される現在識別子決定ユニット、または
前のバージョン識別子決定ユニットにより前のバージョン識別子を決定した後で、前のバージョン識別子のシリアル番号識別子に基づいて、設定番号規則に従って現在のバージョン識別子におけるシリアル番号識別子およびデータ処理要求に基づいて決定されたバージョン附加識別子を生成し、シリアル番号識別子と前記現在のバージョン識別子を構成するように構成される現在識別子決定ユニットと、を含むことができる。
【０１４３】
例示的に、前のバージョン識別子決定ユニットは、
データ処理要求から前のバージョン識別子を抽出する、または、
データ処理要求における業務データ識別子に基づいて前のバージョン識別子を決定するように構成され、ここに、業務データ識別子は、ブロック識別子またはトランザクション識別子である。
【０１４４】
例示的に、バージョン附加識別子は、ブロック識別子またはトランザクション識別子である。
【０１４５】
例示的に、書き込みモジュール７４０は、
有効化制御コマンドを呼び出すことによって、現在のバージョンのデータ対象を有効化にするように制御するように構成される有効化コマンド呼び出しユニットと、
現在のバージョンのデータ対象で新たに生成された目標キー・バリューを記憶スペースに書き込むように構成される書き込みユニットと、を含むことができる。
【０１４６】
例示的に、上記の装置は、
新たに生成された目標キー・バリューを記憶スペースに書き込む前に、失効制御コマンドを呼び出すことによって、現在のバージョンのデータ対象を失効にするように制御するように構成される失効コマンド呼び出しモジュールをさらに含むことができる。
【０１４７】
例示的に、
現在のバージョンのデータ対象を有効化にするように制御する前に、上層ソフトウエアから転送されたバージョン識別子修正指示に基づいて、現在のバージョン識別子を修正するとともに、キー・バリューのキーフィールドにおける現在のバージョン識別子を更新するように構成される修正更新ユニットをさらに含むことができる。
【０１４８】
例示的に、有効化コマンド呼び出しユニットは、
現在のバージョンの有効化条件を生成する、または上層ソフトウエアから送信された現在のバージョン有効化コマンドを受信するときに、有効化制御コマンドを呼び出すように構成される。
【０１４９】
例示的に、現在のバージョンの有効化条件を生成することは、
処理対象データのブロック識別子が変更したことと、
処理対象データのトランザクション識別子が変更したことと、のうち少なくとも１つを含むことができる。
【０１５０】
例示的に、失効コマンド呼び出しモジュールは、
現在のバージョンの失効条件を生成する、または上層ソフトウエアから送信された現在のバージョン失効コマンドを受信するときに、失効制御コマンドを呼び出すようにさらに構成される。
【０１５１】
例示的に、上記の装置は、
目標キー・バリューのバリューにおけるデータを処理した後で、新たに生成された目標キー・バリューに基づいて、キー識別子とバージョン識別子とのマッピング関係テーブルに、キー識別子と現在のバージョン識別子とのマッピング関係を追加するように構成される追加モジュールをさらに含むことができる。
【０１５２】
例示的に、上記の装置は、
上層ソフトウエアによりブロックロールバックとやり直しのニーズを発生したと確定したときに、他のノードから受信したブロックデータおよびブロックデータのキー識別子とバージョン識別子とのマッピング関係テーブルを取得し、
上層ソフトウエアによりローカルＫＶ記憶システムにデータ書き込み要求を開始させ、取得したブロックデータをローカルの記憶スペースに書き込むとともに、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加し、
上層ソフトウエアによりブロックロールバックとやり直しのニーズに基づいて確定された有効化ブロックバージョン識別子によって、ローカルＫＶ記憶システムにブロックデータのデータ処理要求を開始させる
ように構成されるロールバックとやり直しモジュールをさらに含むことができる。
【０１５３】
例示的に、ロールバックとやり直しモジュールは、取得したマッピング関係テーブルをローカルのマッピング関係テーブルに追加するときに、
取得したマッピングテーブルのローカルマッピング関係テーブルに対する増分キー識別子とバージョン識別子をローカルマッピング関係テーブルに追加するとともに、ローカルマッピング関係テーブルにおける既存のキー識別子とバージョン識別子を保留するようにさらに構成され、ここに、増分バージョン識別子には、有効化ブロックバージョン識別子が含まれ、ローカルマッピング関係テーブルの既存のバージョン識別子には、失効ブロックバージョン識別子が含まれる。
【０１５４】
例示的に、上記の装置は、
上層ソフトウエアによりキー識別子とバージョン識別子とのマッピング関係テーブルで、処理対象データのキー識別子と有効化バージョン識別子を決定するとともに、キー識別子と有効化バージョン識別子に基づいてデータ変更要求、データ削除要求またはデータ照会要求を生成するように構成される要求生成モジュールをさらに含むことができる。
【０１５５】
例示的に、要求生成モジュールは、
上層ソフトウエアによる新業務データ書き込み時に、データ書き込み要求を生成するとともに、前の業務データのバージョン識別子をデータ書き込みが依頼される前のバージョン識別子として、データ書き込み要求に携帯するようにさらに構成され、ここに、新業務データは、新ブロックまたは新トランザクションデータである。
【０１５６】
例示的に、記憶スペースは、ディスク記憶スペースであり、磁盤記憶スペースにおけるＫＶ記憶システムに用いられるインデックスは、順序付きテーブルまたはインデックスツリーである。
【０１５７】
例示的に、上記の装置は、
新たに生成された目標キー・バリューが記憶スペースに書き込まれる過程で、バージョン識別子とキー識別子との逆インデックスで、現在のバージョン識別子に対応する新たに生成された目標キー・バリューのキー識別子を増加するように構成される増加モジュールをさらに含むことができる。
【０１５８】
実施例八
図８は、本出願の実施例八に提供される機器の構成概略図である。図８は、本出願の実施形態を実現するために適する例示的な機器１２のブロック図を示す。図８に示す機器１２は、一つの例示に過ぎず、本出願の実施例の機能と使用範囲を何ら制限するわけではない。機器１２は、典型的に計算機器でもよく、ブロックチェーンネットワークノードの機能を担う計算機器であってもよい。
【０１５９】
図８に示すように、機器１２は、泛用計算機器の形で表される。機器１２のコンポーネントは、１つまたは複数のプロセッサまたは処理ユニット１６と、システムメモリ２８と、異なるシステムコンポーネント（システムメモリ２８および処理ユニット１６を含む）を接続するバス１８と、を含むことができるがこれらに限定されない。
【０１６０】
バス１８は、メモリバスまたはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、プロセッサまたは複数のバス構造のうちの任意のバス構造を使用するローカルバスを含む、いくつかの種類のバス構造のうちの１つまたは複数を示す。例を挙げると、これらのアーキテクチャは、インダストリスタンダードアーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＡＣ）バス、拡張ＩＳＡバス、ビデオエレクトロニクススタンダーズアソシエーション（ＶＥＳＡ）ローカルバス、および周辺機器コンポーネント相互接続（ＰＣＩ）バスを含むがこれらに限定されない。
【０１６１】
機器１２は、典型的には、様々なコンピュータシステムによって読み取り可能な媒体を含む。これらの媒体は、揮発性および不揮発性の媒体、リムーバブルメディアおよびノンリムーバブルメディアを含む、機器１２によってアクセスできる任意の利用可能な媒体であってもよい。
【０１６２】
システムメモリ２８は、例えば、ランダムアクセスメモリ（ＲＡＭ）３０および／またはキャッシュメモリ３２のような揮発性メモリの形態のコンピュータシステム読み可能な媒体を含むことができる。機器１２は、さらに、他のリムーバブル／ノンリムーバブルの、揮発性／不揮発性のコンピュータシステム記憶媒体を含むことができる。一例だけとして、記憶システム３４は、ノンリムーバブルの、不揮発性の磁気媒体（図８には図示せず、通常は「ハードディスクドライブ」と呼ばれる）の読み書きに使用できる。図８には示されていないが、  たとえば、「フロッピーディスク」などのようなリムーバブルかつ不揮発性のディスク対して読み書きするためのディスクドライブと、例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭまたは他の光メディアのようなリムーバブルかつ不揮発性の光ディスクに対して読み書きするための光ディスクドライブを提供することができる。これらの場合、各ドライブは、１つまたは複数のデータメディアインタフェースを介してバス１８に接続することができる。システムメモリ２８は、本出願の各実施例の機能を実行するように構成される１組（例えば、少なくとも１つ）のプログラムモジュールを有する少なくとも１つのプログラム製品を含むことができる。
【０１６３】
１組（少なくとも１つ）のプログラムモジュール４２を有するプログラム／ユーティリティ４０は、例えば、システムメモリ２８に記憶されることができ、このようなプログラムモジュール４２は、操作システム、一つまたは複数のアプリケーション、他のプログラムモジュール、およびプログラムデータを含むがこれらに限定されず、これらの例示におけるそれぞれまたはある組合せには、ネットワーク環境の実装が含まれ得る。プログラムモジュール４２は、通常、本出願に記載された実施例における機能および／または方法を実行する。
【０１６４】
機器１２は、例えば、キーボード、ポインティングデバイス、ディスプレイ２４などの１つまたは複数の外部機器１４と通信することもでき、ユーザが当該機器１２と対話できるようにする１つまたは複数の機器、および／または、１つまたは複数の他の計算機器と通信できるようにする、例えばネットワークカード、モデムなどのような何れかの機器とさらに通信することができる。このような通信は、入出力（Ｉ／Ｏ）インタフェース２２を介して行うことができる。また、機器１２は、ネットワークアダプタ２０を介して、１つまたは複数のネットワーク（例えば、ローカルエリアネットワーク（ＬＡＮ）、広域情報通信網（ＷＡＮ）、および／またはインターネットなどのパブリックネットワーク）とさらに通信することができる。図示するように、ネットワークアダプタ２０は、バス１８を介して機器１２の他のモジュールと通信する。図示しないが、機器１２を結びつけて、マイクロコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、ＲＡＩＤシステム、磁気テープドライブおよびデータバックアップ記憶システムなどを含むが、これらに限定されない他のハードウェアおよび／またはソフトウェアモジュールを使用することができることがわかるべきである。
【０１６５】
処理ユニット１６は、システムメモリ２８に記憶されたプログラムを実行することで、例えば、本願の実施例に提供されるデータ記憶方法を実現するなど、様々な機能アプリケーションやデータ処理を実行する。
【０１６６】
実施例九
本出願の実施例九は、プロセッサによって実行されるときに、上記の実施例に記載されているデータ記憶方法を実現することができるコンピュータプログラムが記憶されたコンピュータ読み取り可能な記憶媒体を提供する。当該コンピュータ読み取り可能な記憶媒体は、計算機器に配置されてもよく、ブロックチェーンノードに配置されてもよい。
【０１６７】
本出願の実施例に係るコンピュータ記憶媒体は、１つまたは複数のコンピュータ読み取り可能な媒体の任意の組み合わせを採用することができる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体またはコンピュータ読み取り可能な記憶媒体であってもよい。コンピュータ読み取り可能な記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線、または半導体のシステム、装置またはデバイス、あるいは任意以上の組み合わせとすることができるがこれに限定されない。コンピュータ読み取り可能な記憶媒体のより具体的な例（包括的ではないリスト）は、１つまたは複数のワイヤを有する電気的接続、ポータブルコンピュータディスク、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、消去可能なプログラマブルリードオンリーメモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ、ポータブルコンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または上記の任意の適切な組み合わせを含む。本明細書において、コンピュータ読み取り可能な記憶媒体は、任意の有形な媒体であってもよく、コマンド実行システム、装置又はデバイスによって使用されることができる、またはコマンド実行システム、装置又はデバイスと合わせて使用されることができるプログラムを含み、または記憶する。
【０１６８】
コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能なプログラムコードが伝搬されるベースバンドまたは搬送波の一部として伝搬されるデータ信号を含むことができる。このような伝播されたデータ信号は、電磁気信号、光信号、または上記のいずれかの適切な組み合わせを含むが、これらに限定されない様々な形態をとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体以外の、コマンド実行システム、装置、またはデバイスによって使用される、または組合せて使用されるプログラムを送信、伝播または転送することができる任意のコンピュータ読み取り可能な媒体であってもよい。
【０１６９】
コンピュータ読み取り可能な媒体に含まれるプログラムコードは、無線、電線、光ケーブル、ＲＦなどを含むがこれに限定されない、または上記の任意の適切な組み合わせを含む、任意の適切な媒体で伝送することができる。
【０１７０】
１種または多種のプログラミング言語またはその組合せで本出願の操作を実行するためのコンピュータプログラムコードを作成することができ、前記プログラミング言語は、例えば、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋のようなオブジェクト指向プログラミング言語に加えて、例えば、「ｃ」言語のような通常のプロセスベースプログラミング言語または類似したプログラミング言語を含む。プログラムコードは、完全にユーザコンピュータで実行されてもよく、部分的にユーザコンピュータで実行されてもよく、独立したソフトパッケージとして実行されてもよく、部分的にユーザコンピュータで実行されるとともに、部分的にリモートコンピュータで実行されてもよく、または完全にリモートコンピュータまたはサーバで実行されてもよい。リモートコンピュータに関する場合、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）または広域情報通信網（ＷＡＮ）を含む任意の種類のネットワークを介してユーザコンピュータに接続されてもよいし、例えば、インターネットサービスプロバイダーを利用してインタネットを介する接続で外部コンピュータに接続されてもよい。
【０１７１】
なお、上記の実施例により本出願をより詳細に説明したが、本出願は、上記の実施例に限定されるものではなく、本出願の着想を逸脱しない場合、より多くの他の等価実施例をさらに含むことができ、本出願の範囲は、添付の特許請求の範囲によって決定される。
【国際調査報告】
2021531564.tif 000012
2021531564.tif 000013
2021531564.tif 000014
2021531564.tif 000015