(57)【要約】【課題】ブロックチェーン内のデータベース・ハッシュコードの遅延更新に関する技術を提供する。【解決手段】ブロックをブロックチェーンに追加するようにブロックチェーン・システム内のデータベースを更新するためのコンピュータ実装方法が、データベースを更新するための更新クエリを受信したときに、更新クエリをデータ項目としてデータベースに追加することと、データベースに格納されたデータ項目に基づいてハッシュ値を計算することであって、格納されたデータ項目が、更新クエリの追加されたデータ項目を含んでいる、計算することと、ハッシュ値を使用して新しいブロックをブロックチェーンに追加することとを含んでよい。【選択図】図１
2020531949.tif 000002
【特許請求の範囲】
【請求項１】
ブロックをブロックチェーンに追加するようにブロックチェーン・システム内の第１のデータベースを更新するためのコンピュータ実装方法であって、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を含んでいる、コンピュータ実装方法。
【請求項２】
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリの前記追加されたデータ項目に従って前記第２のデータベースを更新することと、
前記更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、
前記第２のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項３】
既定のタイミングで前記第１のデータベースを前記第２のデータベースに置き換えることをさらに含んでいる、請求項２に記載のコンピュータ実装方法。
【請求項４】
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースを前記第２のデータベースに置き換えることをさらに含んでいる、請求項２に記載のコンピュータ実装方法。
【請求項５】
前記ブロックチェーン・システムが、ネットワークを介して互いに接続された複数のノードを備えており、
前記ノードの各々が前記第１のデータベースおよび第２のデータベースを備えており、前記第２のデータベースが前記第１のデータベースのコピーであり、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースが前記第２のデータベースに置き換えられる、請求項１に記載のコンピュータ実装方法。
【請求項６】
第２の更新クエリの属性に従って、前記第２の更新クエリを前記データ項目として前記データベースに追加しないということを決定することと、
前記第２の更新クエリに従って前記第１のデータベースを更新することと、
前記第２の更新クエリに従って、前記更新された第１のデータベースに基づいて、追加されないハッシュ値を計算することと、
前記追加されないハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項７】
ブロックをブロックチェーンに追加するようにブロックチェーン・システム内の第１のデータベースを更新するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、プログラム命令が具現化されているコンピュータ可読記憶媒体を備えており、コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させる、コンピュータ・プログラム製品。
【請求項８】
コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリの前記追加されたデータ項目に従って前記第２のデータベースを更新することと、
前記更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、
前記第２のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに実行させる、請求項７に記載のコンピュータ・プログラム製品。
【請求項９】
コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
既定のタイミングで前記第１のデータベースを前記第２のデータベースに置き換えることをさらに実行させる、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースを前記第２のデータベースに置き換えることをさらに実行させる、請求項８に記載のコンピュータ・プログラム製品。
【請求項１１】
前記ブロックチェーン・システムが、ネットワークを介して互いに接続された複数のノードを備えており、
前記ノードの各々が前記第１のデータベースおよび第２のデータベースを備えており、前記第２のデータベースが前記第１のデータベースのコピーであり、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースが前記第２のデータベースに置き換えられる、請求項７に記載のコンピュータ・プログラム製品。
【請求項１２】
コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
前記第２の更新クエリの属性に従って、第２の更新クエリを前記データ項目として前記データベースに追加しないということを決定することと、
前記第２の更新クエリに従って前記第１のデータベースを更新することと、
前記第２の更新クエリに従って、前記更新された第１のデータベースに基づいて、追加されないハッシュ値を計算することと、
前記追加されないハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに実行させる、請求項７に記載のコンピュータ・プログラム製品。
【請求項１３】
ブロックチェーン・システムがブロックをブロックチェーンに追加するためのシステムであって、
プログラム命令が格納されたメモリと、
前記メモリと通信するプロセッサと
を備えており、前記システムが方法を実行するように構成されており、前記方法が、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を含んでいる、システム。
【請求項１４】
前記方法が、
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリの前記追加されたデータ項目に従って前記第２のデータベースを更新することと、
前記更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、
前記第２のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１３に記載のシステム。
【請求項１５】
前記方法が、前記第１のデータベースを既定のタイミングで前記第２のデータベースに置き換えることをさらに含んでいる、請求項１４に記載のシステム。
【請求項１６】
前記方法が、既定の数のブロックが前記ブロックチェーンに追加されたときに前記第１のデータベースを前記第２のデータベースに置き換えることをさらに含んでいる、請求項１４に記載のシステム。
【請求項１７】
前記方法が、
前記第２の更新クエリの属性に従って、第２の更新クエリを前記データ項目として前記データベースに追加しないということを決定することと、
前記第２の更新クエリに従って前記第１のデータベースを更新することと、
前記第２の更新クエリに従って、前記更新された第１のデータベースに基づいて、追加されないハッシュ値を計算することと、
前記追加されないハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１３に記載のシステム。
【請求項１８】
ブロックチェーン内の第１のデータベースを更新するためのコンピュータ・プログラム製品であって、前記ブロックチェーンが、ブロックチェーン・システムに含まれる複数のノードによって共有され、前記ノードがネットワークを介して互いに接続されており、前記ノードが、前記第１のデータベースの第１の更新に従って前記ブロックチェーンに追加されるブロックを生成し、前記ノードの各々が、前記第１のデータベースを更新するための第１の更新クエリを受信したときに、通常の更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するか、または遅延更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するかを決定し、前記コンピュータ・プログラム製品が、プログラム命令が具現化されたコンピュータ可読記憶媒体を備えており、コンピュータによって実行可能な前記プログラム命令が、前記コンピュータに、
各ノードが、前記通常の更新を使用して前記第１の更新クエリを前記データベースに適用するということを決定した場合、
前記第１の更新クエリに従って前記第１のデータベースを更新することと、
前記更新されたデータベースに基づいて通常のハッシュ値を計算することと、
前記通常のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させ、
各ノードが、前記遅延更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するということを決定した場合、
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリを前記第１のデータベースのデータ項目として前記データベースに追加することと、
前記第１の更新クエリが前記データ項目として追加される前記データベースに基づいて、遅延ハッシュ値を計算することと、
前記遅延ハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと、
前記第１のデータベースに追加された前記第１の更新クエリの前記データ項目に従って前記第２のデータベースを更新することと、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースを前記第２のデータベースに置き換えることと、
前記置き換えられるデータベースに基づいて置き換えられるハッシュ値を計算することと、
前記置き換えられるハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させる、コンピュータ・プログラム製品。
【請求項１９】
各ノードが第２の更新クエリを受信し、前記通常の更新を使用して前記第２の更新クエリを前記第１のデータベースに適用することを決定し、前記プログラム命令が、前記コンピュータに、
前記第１の更新クエリに従って前記第２のデータベースを更新する前に、前記第１の更新クエリおよび前記第２の更新クエリを前記第１のデータベースに適用することによって、前記第１のデータベースを更新することと、
前記第１の更新クエリおよび前記第２の更新クエリを使用して更新された前記第１のデータベースに基づいて、更新されたハッシュ値を計算することと、
前記第１の更新クエリおよび前記第２の更新クエリを前記第２のデータベースに適用することによって前記第２のデータベースを更新することと
をさらに実行させる、請求項１８に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はブロックチェーンに関し、より詳細には、ブロックチェーン内のデータベースの更新に関する。
【背景技術】
【０００２】
近年、ブロックチェーンに関して、さまざまな更新技術が開示されている。ブロックチェーン技術では、１つのブロックチェーンがネットワーク上で形成されるように、複数のブロックがチェーンのように互いに結合される。１つのブロックは、複数のトランザクション、および直前のブロック内のトランザクションのハッシュ値を含むことがある。トランザクションが、データベースを更新するための不可分の一連のプロセスを指すことに、注意する。さらに、ブロックに含まれるトランザクションは、正しい／正確なトランザクションであると見なされる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
データベースを更新するためのブロック・システムは、複数のノードを含むことがある。各ノードは、トランザクションを逐次的に処理することがある。特定のトランザクションにおいて（例えば、特定の会社の在庫を分割するために）多くのデータ項目が変更される場合、特定のトランザクション内のデータ項目の変更（更新）がすべてデータベースに適用されるまで、その後のトランザクションのプロセスが開始されないことがある。言い換えると、トランザクションが多数のデータ項目を変更する場合、データベースの状態の再計算の費用が高くなる。
【課題を解決するための手段】
【０００４】
本発明の実施形態によれば、ブロックをブロックチェーンに追加するようにブロックチェーン・システム内のデータベースを更新するためのコンピュータ実装方法が提供される。この方法は、データベースを更新するための更新クエリを受信したときに、更新クエリをデータ項目としてデータベースに追加することを含む。この方法は、データベースに格納されたデータ項目に基づいてハッシュ値を計算することを含む。格納されたデータ項目は、更新クエリの追加されたデータ項目を含む。この方法は、ハッシュ値を使用して新しいブロックをブロックチェーンに追加することを含む。この方法は、データベースを更新することに関連する待ち時間を短縮できる。
【０００５】
上記の方法は、データベースをコピーすることによって第２のデータベースを生成することと、更新クエリの追加されたデータ項目に従って第２のデータベースを更新することと、更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、第２のハッシュ値を使用して新しいブロックをブロックチェーンに追加することとをさらに含んでよい。この方法は、第２のデータベースを使用して、データベースを更新することに関連する待ち時間を短縮できる。
【０００６】
実施形態によれば、ブロックチェーン内のデータベースを更新するためのコンピュータ実装方法が提供される。ブロックチェーンは、ブロックチェーン・システムに含まれている複数のノード間で共有されてよい。それらのノードは、ネットワークを介して互いに接続されてよい。それらのノードは、データベースの更新に従って、ブロックチェーンに追加されるブロックを生成してよい。各ノードは、データベースを更新するための更新クエリを受信したときに、通常の更新を使用して更新クエリをデータベースに適用するか、または遅延更新を使用して更新クエリをデータベースに適用するかを決定する。各ノードが、通常の更新を使用して更新クエリをデータベースに適用することを決定した場合、更新クエリに従ってデータベースが更新されてよく、更新されたデータベースに基づいて通常のハッシュ値が計算されてよく、通常のハッシュ値を使用して新しいブロックがブロックチェーンに追加されてよい。各ノードが、遅延更新を使用して更新クエリをデータベースに適用することを決定した場合、データベースをコピーすることによって、第２のデータベースが生成されてよい。その結果、更新クエリがデータベースのデータ項目としてデータベースに追加されてよく、データ項目として更新クエリが追加されるデータベースに基づいて遅延ハッシュ値（deferred hash value）が計算されてよく、遅延ハッシュ値を使用して新しいブロックがブロックチェーンに追加されてよく、データベースに追加された更新クエリのデータ項目に従って、第２のデータベースが更新されてよい。既定の数のブロックがブロックチェーンに追加されるときに、データベースが第２のデータベースに置き換えられてよい。置き換えられるデータベースに基づいて、置き換えられるハッシュ値が計算されてよく、置き換えられるハッシュ値を使用して新しいブロックがブロックチェーンに追加されてよい。この方法は、データベースを更新することに関連する待ち時間を短縮できる。
【０００７】
上記の方法では、各ノードが第２の更新クエリを受信し、通常の更新を使用して第２の更新クエリをデータベースに適用することを決定した場合、更新クエリに従って第２のデータベースを更新する前に、更新クエリおよび第２の更新クエリをデータベースに適用することによって、データベースが更新されてよい。更新クエリおよび第２の更新クエリを使用して更新されたデータベースに基づいて、更新されたハッシュ値が計算されてよく、更新クエリおよび第２の更新クエリを第２のデータベースに適用することによって、第２のデータベースが更新されてよい。この方法は、第２の更新クエリに関してデータベースを更新することに関連する待ち時間を短縮できる。
【０００８】
実施形態では、ブロックをブロックチェーンに追加するようにブロックチェーン・システム内のデータベースを更新するためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、プログラム命令が具現化されているコンピュータ可読記憶媒体を含む。プログラム命令は、コンピュータによって実行可能であり、コンピュータに、データベースを更新するための更新クエリの受信時に更新クエリをデータ項目としてデータベースに追加することを含む方法を実行させてよい。この方法は、データベースに格納されたデータ項目に基づいてハッシュ値を計算することを含む。格納されたデータ項目は、更新クエリの追加されたデータ項目を含む。この方法は、ハッシュ値を使用して新しいブロックをブロックチェーンに追加することを含む。この方法は、データベースを更新することに関連する待ち時間を短縮できる。
【０００９】
上記の方法は、データベースをコピーすることによって第２のデータベースを生成することと、更新クエリの追加されたデータ項目に従って第２のデータベースを更新することと、更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、第２のハッシュ値を使用して新しいブロックをブロックチェーンに追加することとをさらに含んでよい。この方法は、第２のデータベースを使用して、データベースを更新することに関連する待ち時間を短縮できる。
【００１０】
実施形態によれば、ブロックチェーン・システムがブロックをブロックチェーンに追加するためのデバイスが提供される。このデバイスは、ブロックをブロックチェーンに追加するように更新されるデータベースを含む。このデバイスは、データベースを更新するための更新クエリを受信したときに、更新クエリをデータ項目としてデータベースに追加するための、更新クエリ追加部を含む。このデバイスは、データベースに格納されたデータ項目に基づいてハッシュ値を計算するための、計算部を含む。格納されたデータ項目は、更新クエリの追加されたデータ項目を含む。このデバイスは、ハッシュ値を使用して新しいブロックをブロックチェーンに追加するための、ブロック追加部を含む。このデバイスは、データベースを更新することに関連する待ち時間を短縮できる。
【００１１】
上記のデバイスは、データベースをコピーすることによって第２のデータベースを生成するための生成部と、更新クエリの追加されたデータ項目に従って第２のデータベースを更新するための更新部とを、さらに含んでよい。このデバイスでは、計算部は、更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算してよく、ブロック追加部は、第２のハッシュ値を使用して新しいブロックをブロックチェーンに追加してよい。このデバイスは、第２のデータベースを使用して、データベースを更新することに関連する待ち時間を短縮できる。
【００１２】
ここで、添付の図面を単に例として参照し、本発明の実施形態について説明する。
【図面の簡単な説明】
【００１３】
【図１】実施形態によるブロックチェーン・システムのブロック図である。
【図２】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図３】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図４】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図５】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図６】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図７】実施形態によるブロックチェーンを更新するためのプロセスを示す図である。
【図８】実施形態によるマスター・テーブルを更新するためのプロセスのフローチャートである。
【図９】実施形態によるバックグラウンド・テーブルを更新するためのプロセスのフローチャートである。
【図１０】実施形態によるデータ項目の値をバックグラウンド・テーブルに追加するためのプロセスのフローチャートである。
【図１１】実施形態によるマスター・テーブルおよびバックグラウンド・テーブル内のデータ項目の値を更新するためのプロセスのフローチャートである。
【図１２】実施形態による、フィルタを適用し、マスター・テーブルをバックグラウンド・テーブルに置き換えるためのプロセスのフローチャートである。
【図１３】実施形態による重い更新を適用するプロセスのフローチャートである。
【図１４】実施形態によるノードのハードウェア構成の例を示す図である。
【発明を実施するための形態】
【００１４】
以下では、添付の図面を参照して本開示の実施形態について詳細に説明する。
【００１５】
本開示が以下の実施形態に限定されるよう意図されておらず、本開示が、本開示の範囲内でさまざまな変更を伴って実装されてよいということに注意する。さらに、本明細書において使用される図面は、例示を目的としており、実際の寸法を示していないことがある。
【００１６】
図１は、実施形態によるブロックチェーン・システム１００のブロック図を示している。ブロックチェーン・システム１００は、ネットワーク１０５を介して互いに接続された複数のノード（例えば、デバイス）１０１を含んでよい。各ノード１０１は、メイン処理部１１１、バックグラウンド処理部１１３、ハッシュ・コード・カリキュレータ１１５、およびストレージ１１７を含んでよい。
【００１７】
メイン処理部１１１は、本明細書に記載されているように、データベースを更新し、ブロックをブロックチェーンに追加するためのクエリ（例えば、更新クエリ）を受信してよい。
【００１８】
バックグラウンド処理部１１３は、フィルタ２５３（図２を参照）に従って、バックグラウンド・テーブル２６１に対するプロセス（例えば、図２を参照して説明されるプロセス）を実行する。バックグラウンド処理部１１３は、請求される更新部の例である。
【００１９】
ハッシュ・コード・カリキュレータ１１５は、ブロックチェーン内のブロックに含まれるトランザクションのハッシュ・コード（例えば、ハッシュ値）を計算して設定する。ハッシュ・コード・カリキュレータ１１５は、請求される計算部の例である。
【００２０】
ストレージ１１７は、ブロックチェーンに関連付けられたデータを格納してよい。
【００２１】
実施形態例のブロックチェーン・システム１００では、各ノード１０１が、それ自身のデータベース（例えば、後で説明されるマスター・テーブル２５１）をそれ自身のストレージ１１７に含んでよく、他のノードと同じ順序でトランザクションを実行してよい。これによって、ノード１０１が各データベースを同じ状態で維持できるようにする。さらに、各ノード１０１は、ハッシュ・カリキュレータ１１５を介して、各トランザクションの実行用のデータベースの状態に基づいてハッシュ・コードを計算してよい。ノード１０１内の異なるハッシュ・コードを見つけることによって、ノード１０１のビザンチン故障が検出されることがある。
【００２２】
実施形態例では、ハッシュ・コードの計算のオーバーヘッドを減らすために、ストレージ１１７がデータ項目を、ツリー・ノード（例えば、ルート・ノードおよび複数の葉ノード、ならびにそれらを接続するエッジ）を含んでいるツリー構造に格納する。ハッシュ・コード・カリキュレータ１１５は、ツリー構造内のハッシュ・コードを計算してよい。より詳細には、データ項目が変更された場合、変更された項目（例えば、葉ノード）からルート・ノードまでのノードのみが計算／再計算される。
【００２３】
遅延更新では、データ項目がデータベースから読み取られるときに、そのデータ項目に適用されていない更新が適用される。つまり、更新クエリが怠惰に評価されるということである。しかし、ブロックチェーン技術では、トランザクションが終了したときに、更新されたデータ項目が読み取られ、データベースのハッシュ・コードを計算する。すなわち、すべての更新クエリをデータ項目に直ちに適用する必要がある。
【００２４】
実施形態例では、各ノード１０１が、遅延更新およびバックグラウンド更新（例えば、並列化された更新）の両方を実行してよい。言い換えると、各ノード１０１は、変更をデータ項目に適用し、ハッシュ・コードをバックグラウンドで再計算してよい。すべてのノード１０１が、ブロックチェーン内の特定のブロックから使用できる新しい（例えば、変更された）データ項目および新しいハッシュ・コードを作成する（後述される）。
【００２５】
図２〜７は、実施形態例に従うブロックチェーン２０１の更新プロセスの例である。図１および２〜７を参照して、ブロックチェーン２０１の更新プロセスの例が説明される。
【００２６】
実施形態例では、メイン処理部１１１が、受信されたクエリに基づいて、マスター・テーブル２５１を更新するプロセスを実行する。例えば、クエリは、マスター・テーブル２５１内のデータ項目を変更する。マスター・テーブル２５１は、ストレージ１１７に格納されたデータベースを表すか、またはストレージに格納されたデータベースに含まれてよい。言い換えると、マスター・テーブル２５１は、メイン処理部１１１によって処理されるデータであってよい。メイン処理部１１１は、受信されたクエリを解析する。すなわち、メイン処理部１１１は、受信されたクエリの特性を評価し、ブロック２１１をブロックチェーン２０１に追加する。マスター・テーブル２５１は、請求されるデータベースの例である。
【００２７】
評価（例えば、解析）の結果に基づいて、メイン処理部１１１は、対象のクエリが重い更新を要求するかどうかを判定してよい。重い更新とは、相対的に重い計算を必要とする更新（例えば、計算／再計算）のことを指す。例えば、重い更新は、マスター・テーブル２５１内の複数のデータ項目の更新を必要とする。重い更新を要求しないクエリは、請求される別の更新クエリの例である。
【００２８】
メイン処理部１１１は、解析の評価に基づいてフィルタ２５３を生成してよい。より詳細には、メイン処理部１１１は、対象のクエリが重い更新を要求する場合にフィルタ２５３を生成してよい。フィルタ２５３は、データ項目（例えば、マスター・テーブル２５１に含まれる値）に対する計算を定義してよい。さらに、メイン処理部１１１およびバックグラウンド処理部１１３は、フィルタ２５３に従って計算を実行してよい。メイン処理部１１１が、重い更新を要求する複数のクエリを受信した場合、メイン処理部１１１が複数のフィルタ２５３を生成してよいということに注意する。
【００２９】
メイン処理部１１１は、解析の評価に基づいてバックグラウンド・テーブル２６１を生成してもよい。バックグラウンド・テーブル２６１は、マスター・テーブル２５１のコピーであってよい。言い換えると、バックグラウンド・テーブル２６１は、バックグラウンド処理部１１３によって処理されるデータであってよい。バックグラウンド・テーブル２６１は、第２のデータベースの例である。
【００３０】
メイン処理部１１１は、解析の結果に基づいて、数値Ｎも決定する。数値Ｎは、新しいブロックをブロックチェーン２０１に追加するためのタイミング変数を表す。数値Ｎがクエリの１つまたは複数の特性に基づいて決定論的に指定されるということに注意する。
【００３１】
メイン処理部１１１は、請求されるクエリ追加部、ブロック追加部、生成部、置換部、決定部、または更新部、あるいはその組み合わせの例である。
【００３２】
前述したように、各ノード１０１は、変更をデータ項目に適用し、ハッシュ・コードをバックグラウンドで計算／再計算してよい。より詳細には、トランザクション（例えば、クエリ）が重い更新を要求する場合、メイン処理部１１１が、データ項目を直ちに更新する代わりに、フィルタ２５３をデータ項目としてマスター・テーブル２５１に追加する。ハッシュ・コード・カリキュレータ１１５は、フィルタ２５３を含むマスター・テーブル２５１に基づいてハッシュ・コードを計算／再計算し、その後、マスター・テーブル２５１のコピーを作成して、バックグラウンド・テーブル２６１を作成する。コピーオンライト手法を使用した論理的コピーが適用されてよい。バックグラウンド・テーブル２６１がフィルタ２５３を含まなくてよいということに注意する。
【００３３】
トランザクションのバックグラウンド処理では、ノード１０１が、異なるスレッドを使用して重い更新をバックグラウンド・テーブル２６１に適用してよい。
【００３４】
ブロックチェーン２０１内の特定のブロックで、マスター・テーブル２５１がバックグラウンド・テーブル２６１に置き換えられてよい。すべてのノード１０１が、ブロックチェーン２０１の同じ位置でマスター・テーブル２５１を置き換えるということに注意する。特定のブロックは、重い更新のブロックからＮブロック離れている第Ｎのブロックであってよい。このプロセスは、請求される遅延更新の例である。
【００３５】
すべてのノード１０１が中央処理装置（ＣＰＵ）９１（図１４の説明において説明されている）を含んでいるということに注意する。実施形態例は、各ノード１０１のＣＰＵ使用率が低く、重い更新がめったに発生しないということを仮定する。
【００３６】
以下では、ブロックチェーン２０１の更新プロセスについて詳細に説明する。この例は、マスター・テーブル２５１が、各オーナーが所有している局所的な在庫量を考慮して、さまざまなフランチャイズ・オーナーを含む複数の異なる会社にサービスを提供する物流倉庫または製造施設を管理するために使用されてよいということを仮定する。ただし、マスター・テーブル２５１は、任意の種類のデータ項目を表してよく、この例は、本開示の範囲を在庫管理に限定するよう意図されておらず、本開示の範囲を他のどの方法に限定することも意図されていない。この例は、トランザクション１（Ｔｘ１）、トランザクション２（Ｔｘ２）、およびトランザクション３（Ｔｘ３）に従って、この順序でマスター・テーブル２５１が連続的に更新されることをさらに仮定する。トランザクション２は重い更新であると仮定され、一方、トランザクション１、３は重い更新でないと仮定される。
【００３７】
図２に示されているように、ブロックチェーン２０１はブロック２１１および２１２を含んでよい。ブロック２１１および２１２で、いわゆるキー・バリュー型データストア（ＫＶＳ）を使用してデータが格納されてよい。実施形態では、マスター・テーブル２５１は、データ列「ｉｄ」、「ｃｏｍｐａｎｙ」、「ａｍｏｕｎｔ」、および「ｏｗｎｅｒ」を含んでよい。さらに、マスター・テーブル２５１は、ｉｄ１、ｉｄ２、ｉｄ３、およびｉｄ４のデータ項目（例えば、行、エントリ）を含んでいる。例えば、「ｉｄ＝１」のデータ項目は、「ｃｏｍｐａｎｙ＝Ａ」、「ａｍｏｕｎｔ＝１０００」、および「ｏｗｎｅｒ＝Ｓａｃｈｉ」を表している。
【００３８】
マスター・テーブル２５１は、最初に、トランザクション１（Ｔｘ１）（ＩＮＳＥＲＴ  ＶＡＬＵＥＳ  （５，  Ｃ，  １００，  Ｋｏｕ））に従って更新されてよい。メイン処理部１１１は、ｉｄ５のデータ項目をマスター・テーブル２５１に挿入する（矢印Ａ１を参照）。次に、ハッシュ・コード・カリキュレータ１１５は、更新されたマスター・テーブル２５１のハッシュ・コードを計算して、ハッシュ・コードｈ１を取得する。メイン処理部１１１は、取得されたハッシュ・コードｈ１を含んでいるブロック２１３をブロックチェーン２０１に追加してよい（Ａ２を参照）。このプロセスは、請求される通常の更新の例である。ハッシュ・コードｈ１は、請求される追加されないハッシュ・コードまたは通常のハッシュ・コードの例である。
【００３９】
図３に示されているように、トランザクション２（Ｔｘ２）（ＵＰＤＡＴＥ  ａｍｏｕｎｔ  ＳＥＴ  ａｍｏｕｎｔ＊１０  ＷＨＥＲＥ  ｃｏｍｐａｎｙ  ＝  ‘Ａ’）に従って、マスター・テーブル２５１が更新されてよい。メイン処理部１１１は、この時点では、トランザクション２が重い更新であるため、トランザクション２に従って計算を実行しなくてよい。言い換えると、メイン処理部１１１は、マスター・テーブル２５１のデータ項目を直ちに変更しなくてよい。マスター・テーブル２５１のデータ項目を変更する代わりに、メイン処理部１１１は、トランザクション２（例えば、受信されたクエリ）の属性に基づいてフィルタ２５３を生成してよい。次に、ハッシュ・コード・カリキュレータ１１５は、フィルタ２５３と共にマスター・テーブル２５１のハッシュ・コードを計算して、ハッシュ・コードｈ２を取得してよい。メイン処理部１１１は、取得されたハッシュ・コードｈ２を含んでいるブロック２１４をブロックチェーン２０１に追加してよい（Ｂ１を参照）。ハッシュ・コードｈ２は、請求される遅延ハッシュ・コード（deferred hash code）の例である。
【００４０】
この実施形態例では、ハッシュ・コード・カリキュレータ１１５がクエリと共にマスター・テーブル２５１のハッシュ・コードを計算できるように、重い更新（例えば、受信されたクエリＴｘ２）が、マスター・テーブル２５１に添付されたデータ項目（例えば、エントリ）として扱われる。
【００４１】
次に、バックグラウンド処理部１１３は、マスター・テーブル２５１に従って、バックグラウンド・テーブル２６１を生成してよい（矢印Ｂ２を参照）。この実施形態例では、バックグラウンド・テーブル２６１は、マスター・テーブル２５１のスナップショットである。さらに、バックグラウンド・テーブル２６１は、マスター・テーブル２５１のデータ列に加えて、「ａｐｐｌｉｅｄ」列２６２を含んでいる。「ａｐｐｌｉｅｄ」列２６２は、フィルタ２５３が対象のデータ項目に適用されたかどうかを表す。フィルタ２５３が対象のデータ項目に適用された場合、「ａｐｐｌｉｅｄ」列２６２内の対応するセルに、「１」が配置される。
【００４２】
図４に示されているように、バックグラウンド処理部１１３は、重い更新をバックグラウンド・テーブル２６１の各行に適用する（矢印Ｃ１、Ｃ２を参照）。言い換えると、フィルタ２５３が、段階的にバックグラウンド・テーブル２６１に適用される。例えば、バックグラウンド・テーブル２６１内のｉｄ１のデータ項目が、フィルタ２５３を使用して更新される。「ｉｄ＝１」のデータ項目が「ｃｏｍｐａｎｙ＝Ａ」のデータを表しているため、クエリＴｘ２の命令が「ｉｄ＝１」の行に適用される。「ｉｄ＝１」の行（例えば、データ項目）で、「ａｍｏｕｎｔ」が「１０００」から「１００００」に変更されており、この値は、クエリＴｘ２において指定されているように、「１０００」に「１０」を掛けることによって得られる。さらに、「１」がデータ項目「ｉｄ＝１」の「ａｐｐｌｉｅｄ」列２６２に配置されており、これによって、クエリＴｘ２がこのデータ項目に適用されたことを示す。
【００４３】
図５に示されているように、重い更新がバックグラウンド・テーブル２６１に適用されている間に、トランザクション３「Ｔｘ３：  ＳＥＬＥＣＴ  ａｍｏｕｎｔ  ＷＨＥＲＥ  ｉｄ  ＝  ３  ａｎｄ  ＵＰＤＡＴＥ  ｏｗｎｅｒ  ＳＥＴ  ‘Ｔａｋｅ’  ｗｈｅｒｅ  ｉｄ  ＝  ３」が開始してよい。この時点では、フィルタ２５３がバックグラウンド・テーブル２６１の「ｉｄ＝３」のデータ項目に適用されていないことに注意する。バックグラウンド処理部１１３は、フィルタ２５３およびバックグラウンド・テーブル２６１内の「ｉｄ＝３」のデータ項目の値（例えば、「ａｍｏｕｎｔ＝２００」）を取得して、フィルタ２５３を「ｉｄ＝３」のデータ項目の値に適用する。この例では、バックグラウンド処理部１１３は、フィルタ２５３を「ｉｄ＝３」に適用して、結果として「ａｍｏｕｎｔ＝２０００」を取得する。
【００４４】
図６に示されているように、メイン処理部１１１は、バックグラウンド処理部１１３によって得られた結果に従ってマスター・テーブル２５１を更新し、トランザクション３に従ってｏｗｎｅｒを「Ｙｏｓｈｉ」から「Ｔａｋｅ」に変更してよい（矢印Ｅ１を参照）。同様に、バックグラウンド処理部１１３は、この結果に従ってバックグラウンド・テーブル２６１を更新し、ｏｗｎｅｒを変更してよい（矢印Ｅ２を参照）。言い換えると、フィルタ２５３に従って、更新がマスター・テーブル２５１およびバックグラウンド・テーブル２６１の両方に適用される。次に、ハッシュ・コード・カリキュレータ１１５は、更新されたマスター・テーブル２５１のハッシュ・コードを計算して、ハッシュ・コードｈ３を取得してよい。メイン処理部１１１は、取得されたハッシュ・コードｈ３を含んでいるブロック２１５をブロックチェーン２０１に追加してよい（Ｅ３を参照）。ハッシュ・コードｈ３は、請求される更新されたハッシュ・コードの例である。
【００４５】
図７に示されているように、マスター・テーブル２５１に対する特定の更新の実行時に、メイン処理部１１１はブロック２１６をブロックチェーン２０１に追加してよい。ハッシュ・コードｈ２を含んでいるブロック２１４からＮ個のブロックがブロックチェーン２０１に追加された場合、メイン処理部１１１は、マスター・テーブル２５１をバックグラウンド・テーブル２６１に置き換えてよい。次に、ハッシュ・コード・カリキュレータ１１５は、更新されたマスター・テーブル２５１のハッシュ・コードを計算して、ハッシュ・コードｈｎ’を取得してよい。メイン処理部１１１は、取得されたハッシュ・コードｈｎ’を含んでいるブロック２１７をブロックチェーン２０１に追加してよい（矢印Ｆ１を参照）。ハッシュ・コードｈｎ’は、請求される第２のハッシュ・コードまたは置き換えられるハッシュ・コードの例である。
【００４６】
図１を参照して前述したように、ブロックチェーン・システム１００は、複数のノード１０１を含んでいる。すべてのノード１０１またはノード１０１のうちの少なくとも一部が、ブロック２１７を共通のタイミングで（例えば、同時に、または並行して）追加する。言い換えると、ノード１０１は、同じトリガーに基づいてブロックチェーン２０１を更新する。共通のタイミングは、請求される既定のタイミングの例である。
【００４７】
図８は、マスター・テーブル２５１を更新するためのプロセスのフローチャートである。メイン処理部１１１が、受信されたクエリが重い更新を要求するということを決定した場合に、このプロセスが開始してよい。
【００４８】
メイン処理部１１１は、最初に３０１で、重い更新クエリ用のフィルタ（例えば、図３〜６のフィルタ２５３）を作成する。次に、メイン処理部１１１は、３０２で、フィルタ（例えば、図３〜６のフィルタ２５３）をマスター・テーブル（例えば、図２〜７のマスター・テーブル）に追加する。次に、ハッシュ・コード・カリキュレータ１１５は、３０３で、マスター・テーブル（例えば、図２〜７のマスター・テーブル）およびフィルタ（例えば、図３〜６のフィルタ２５３）を使用してハッシュ・コードｈを計算する（例えば、再計算または更新する）。
【００４９】
図９は、バックグラウンド・テーブル（例えば、図３〜６のバックグラウンド・テーブル）を更新するためのプロセスのフローチャートである。メイン処理部１１１がフィルタ（例えば、図３〜６のフィルタ２５３）を生成し、バックグラウンド処理部１１３がバックグラウンド・テーブル（例えば、図３〜６のバックグラウンド・テーブル）を生成する場合に、このプロセスが開始するということに注意する。
【００５０】
バックグラウンド処理部１１３は、最初に４０１で、フィルタを取得する。次に、バックグラウンド処理部１１３は、４０２で、フィルタがバックグラウンド・テーブル内のすべてのデータ項目に適用されたかどうかを判定する。フィルタがすべてのデータ項目に適用されていない場合、バックグラウンド処理部１１３が、４０３で、フィルタに従って更新されていないデータ項目の値を取得する。次に、バックグラウンド処理部１１３は、４０４で、フィルタの属性に従って取得された値を更新する。次に、バックグラウンド処理部１１３は、４０５で、更新された値を使用してバックグラウンド・テーブル２６１を更新する。４０２でフィルタがすべてのデータ項目に適用された場合、ハッシュ・コード・カリキュレータ１１５が、４０６でバックグラウンド・テーブルのハッシュ・コードｈ’を計算する。次に、バックグラウンド処理部１１３は、４０７で、マスター・テーブルがバックグラウンド・テーブルに置き換えられるまで待機する。
【００５１】
図１０は、バックグラウンド・テーブル内のデータ項目の値を取得するためのプロセスのフローチャートである。フィルタがバックグラウンド・テーブルに適用されている間に、メイン処理部１１１がバックグラウンド・テーブルの値を取得するためのクエリを受信した場合に、このプロセスが開始してよいということに、注意する。言い換えると、複数のフィルタがマスター・テーブルに同時に添付された場合に、このプロセスが開始してよい。
【００５２】
バックグラウンド処理部１１３は、最初に５０１で、マスター・テーブルに添付されたフィルタをすべて取得する。次に、バックグラウンド処理部１１３は、５０２で、フィルタに従ってバックグラウンド・テーブルからデータ項目の値を取得する。バックグラウンド処理部１１３は、５０３で、適用されていないフィルタが存在するかどうかを判定してよい。適用されていないフィルタとは、バックグラウンド・テーブルに適用されていないフィルタのことを指す。５０３で、適用されていないフィルタが存在するということが決定された場合、バックグラウンド処理部１１３は、５０４で、適用されていないフィルタに従ってバックグラウンド・テーブル内のデータ項目の値を更新する。次に、バックグラウンド処理部１１３は、５０５で、更新された値を使用してバックグラウンド・テーブルを更新する。バックグラウンド処理部１１３は、５０６で値を返す。
【００５３】
図１１は、マスター・テーブルおよびそれに関連するバックグラウンド・テーブル内のデータ項目の値を更新するためのプロセスのフローチャートである。このプロセスは、フィルタがバックグラウンド・テーブルに適用されている間に、メイン処理部１１１がマスター・テーブルの値を更新するためのクエリを受信した場合に、開始してよい。
【００５４】
メイン処理部１１１は、最初に６０１で、マスター・テーブルの値を更新する。次に、ハッシュ・コード・カリキュレータ１１５は、６０２で、マスター・テーブルのハッシュ・コードｈを計算する。次に、バックグラウンド処理部１１３は、６０３で、バックグラウンド・テーブルの値を更新する。次に、ハッシュ・コード・カリキュレータ１１５は、６０４で、必要に応じてバックグラウンド・テーブルのハッシュ・コードｈ’を計算する。
【００５５】
図１２は、ブロック（例えば、図７のブロック２１７）を追加する前のプロセスのフローチャートである。第Ｎのブロックがブロックチェーンに追加される場合にこのプロセスが開始するということに注意する（図７の説明を参照）。
【００５６】
メイン処理部１１１は、最初に７０１で、第Ｎのブロックがブロックチェーンに追加される前に、フィルタがバックグラウンド・テーブルに適用されたかどうかを判定する。７０１で、フィルタが適用されたということが決定された場合、メイン処理部１１１は、７０２で、バックグラウンド・テーブル内のデータ項目の値がすべて更新されるまで待機する。次に、メイン処理部１１１は、７０３で、マスター・テーブルをバックグラウンド・テーブルに置き換える。次に、ハッシュ・コード・カリキュレータ１１５は、７０４で、ハッシュ・コードｈをハッシュ・コードｈ’に置き換える。
【００５７】
図１３を参照して、本発明の代替の実施形態について説明する。この代替の実施形態は、バックグラウンド処理部１１３がフィルタに従って計算を実行している（例えば、バックグラウンド処理部１１３が、前のクエリに従って前の重い更新をバックグラウンドで実行している）間に、メイン処理部１１１がクエリ（例えば、第２のクエリ）を受信するということを仮定する。
【００５８】
メイン処理部１１１は、最初に８０１で、第２のクエリを受信する。次に、メイン処理部１１１は、８０２で、受信されたクエリ（例えば、第２のクエリ）が重い更新を要求するかどうかを判定する。８０２で、受信されたクエリが重い更新を要求するということが決定された場合、メイン処理部１１１が、８０３で第２のフィルタを作成する。次に、メイン処理部１１１は、８０４で、バックグラウンド処理部１１３が前の重い更新をバックグラウンドで実行しているかどうかを判定する。８０４で、バックグラウンド処理部１１３が前の重い更新をバックグラウンドで実行しているということが決定された場合、バックグラウンド処理部１１３が、８０５で、前の重い更新が終了するまで待機する。８０６で、バックグラウンド処理部１１３が開始して、その後の重い更新（例えば、第２のクエリの更新）をバックグラウンドで実行する。
【００５９】
本開示の代替の実施形態として、マスター・テーブルおよびバックグラウンド・テーブルが、重い更新が適用された行を除く行を共有してよい。言い換えると、メイン処理部１１１は、コピーオンライト手法を使用してバックグラウンド・テーブルを生成してよい。
【００６０】
図１４を参照すると、実施形態例に従ってノード１０１（例えば、図１のノード１０１）のハードウェア構成の例が示されている。図に示されているように、ノードは、プロセッサの一例として機能する中央処理装置（ＣＰＵ）９１と、マザーボード（Ｍ／Ｂ）チップ・セット９３を介してＣＰＵ９１に接続され、メモリの一例として機能するメイン・メモリ９２と、同じＭ／Ｂチップ・セット９３を介してＣＰＵ９１に接続されたディスプレイ・ドライバ９４とを含んでよい。ネットワーク・インターフェイス９６、磁気ディスク・デバイス９７、音声ドライバ９８、またはキーボード／マウス９９、あるいはその組み合わせも、ブリッジ回路９５を介してＭ／Ｂチップ・セット９３に接続される。
【００６１】
図１４では、さまざまな階層的要素がバスを介して接続されている。例えば、ＣＰＵ９１とＭ／Ｂチップ・セット９３、およびＭ／Ｂチップ・セット９３とメイン・メモリ９２が、ＣＰＵのバスを介してそれぞれ接続されている。また、Ｍ／Ｂチップ・セット９３およびディスプレイ・ドライバ９４が、アクセラレーテッド・グラフィックス・ポート（ＡＧＰ）を介して接続されてよい。しかし、ディスプレイ・ドライバ９４がＰＣＩ  Ｅｘｐｒｅｓｓ互換ビデオ・カードを含んでいる場合、Ｍ／Ｂチップ・セット９３およびビデオ・カードは、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ネットワーク・インターフェイス９６がブリッジ回路９５に接続されている場合、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓが接続に使用されてよい。磁気ディスク・デバイス９７をブリッジ回路９５に接続するために、シリアルＡＴＡ（AT attachment）、並列伝送ＡＴＡ、またはＰＣＩ（peripheral components interconnect）が使用されてよい。キーボード／マウス９９をブリッジ回路９５に接続するために、ユニバーサル・シリアル・バス（ＵＳＢ）が使用されてよい。
【００６２】
メイン・メモリ９２に格納されたプログラムを実行するＣＰＵ９１は、図１のメイン処理部１１１、または図１のバックグラウンド処理部１１３、または図１のハッシュ・コード・カリキュレータ１１５、あるいはその組み合わせとして機能してよい。メイン・メモリ９２および磁気ディスク・デバイス９７は、図１のストレージ１１７として機能してよい。
【００６３】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に限定されない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
【００６４】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【００６５】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【００６６】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【００６７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【００６８】
本発明の態様は、本明細書において、本発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【００６９】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【００７０】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはるその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【００７１】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【符号の説明】
【００７２】
１００  ブロックチェーン・システム
１０１  ノード 
１０５  ネットワーク
１１１  メイン処理部
１１３  バックグラウンド処理部
１１５  ハッシュ・コード・カリキュレータ
１１７  ストレージ
【図１】
2020531949.tif 000003
【図２】
2020531949.tif 000004
【図３】
2020531949.tif 000005
【図４】
2020531949.tif 000006
【図５】
2020531949.tif 000007
【図６】
2020531949.tif 000008
【図７】
2020531949.tif 000009
【図８】
2020531949.tif 000010
【図９】
2020531949.tif 000011
【図１０】
2020531949.tif 000012
【図１１】
2020531949.tif 000013
【図１２】
2020531949.tif 000014
【図１３】
2020531949.tif 000015
【図１４】
2020531949.tif 000016
【手続補正書】
【提出日】令和2年4月20日(2020.4.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ブロックをブロックチェーンに追加するようにブロックチェーン・システム内の第１のデータベースを更新するためのコンピュータ実装方法であって、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を含んでいる、コンピュータ実装方法。
【請求項２】
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリの前記追加されたデータ項目に従って前記第２のデータベースを更新することと、
前記更新された第２のデータベースに格納されたデータ項目に基づいて第２のハッシュ値を計算することと、
前記第２のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項３】
既定のタイミングで前記第１のデータベースを前記第２のデータベースに置き換えることをさらに含んでいる、請求項２に記載のコンピュータ実装方法。
【請求項４】
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースを前記第２のデータベースに置き換えることをさらに含んでいる、請求項２に記載のコンピュータ実装方法。
【請求項５】
前記ブロックチェーン・システムが、ネットワークを介して互いに接続された複数のノードを備えており、
前記ノードの各々が前記第１のデータベースおよび第２のデータベースを備えており、前記第２のデータベースが前記第１のデータベースのコピーであり、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースが前記第２のデータベースに置き換えられる、請求項１に記載のコンピュータ実装方法。
【請求項６】
第２の更新クエリの属性に従って、前記第２の更新クエリを前記データ項目として前記データベースに追加しないということを決定することと、
前記第２の更新クエリに従って前記第１のデータベースを更新することと、
前記第２の更新クエリに従って、前記更新された第１のデータベースに基づいて、追加されないハッシュ値を計算することと、
前記追加されないハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
をさらに含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項７】
ブロックをブロックチェーンに追加するようにブロックチェーン・システム内の第１のデータベースを更新するためのコンピュータ・プログラムであって、コンピュータに、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させる、コンピュータ・プログラム。
【請求項８】
ブロックチェーン・システムがブロックをブロックチェーンに追加するためのシステムであって、
プログラム命令が格納されたメモリと、
前記メモリと通信するプロセッサと
を備えており、前記システムが方法を実行するように構成されており、前記方法が、
前記第１のデータベースを更新するための第１の更新クエリを受信したときに、前記第１の更新クエリをデータ項目として前記第１のデータベースに追加することと、
前記第１のデータベースに格納されたデータ項目に基づいて第１のハッシュ値を計算することであって、前記格納されたデータ項目が前記第１の更新クエリの前記追加されたデータ項目を含んでいる、前記計算することと、
前記第１のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を含んでいる、システム。
【請求項９】
ブロックチェーン内の第１のデータベースを更新するためのコンピュータ・プログラムであって、前記ブロックチェーンが、ブロックチェーン・システムに含まれる複数のノードによって共有され、前記ノードがネットワークを介して互いに接続されており、前記ノードが、前記第１のデータベースの第１の更新に従って前記ブロックチェーンに追加されるブロックを生成し、前記ノードの各々が、前記第１のデータベースを更新するための第１の更新クエリを受信したときに、通常の更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するか、または遅延更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するかを決定し、前記コンピュータ・プログラムが、コンピュータに、
各ノードが、前記通常の更新を使用して前記第１の更新クエリを前記データベースに適用するということを決定した場合、
前記第１の更新クエリに従って前記第１のデータベースを更新することと、
前記更新されたデータベースに基づいて通常のハッシュ値を計算することと、
前記通常のハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させ、
各ノードが、前記遅延更新を使用して前記第１の更新クエリを前記第１のデータベースに適用するということを決定した場合、
前記第１のデータベースをコピーすることによって第２のデータベースを生成することと、
前記第１の更新クエリを前記第１のデータベースのデータ項目として前記データベースに追加することと、
前記第１の更新クエリが前記データ項目として追加される前記データベースに基づいて、遅延ハッシュ値を計算することと、
前記遅延ハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと、
前記第１のデータベースに追加された前記第１の更新クエリの前記データ項目に従って前記第２のデータベースを更新することと、
既定の数のブロックが前記ブロックチェーンに追加されるときに、前記第１のデータベースを前記第２のデータベースに置き換えることと、
前記置き換えられるデータベースに基づいて置き換えられるハッシュ値を計算することと、
前記置き換えられるハッシュ値を使用して新しいブロックを前記ブロックチェーンに追加することと
を実行させる、コンピュータ・プログラム。
【請求項１０】
各ノードが第２の更新クエリを受信し、前記通常の更新を使用して前記第２の更新クエリを前記第１のデータベースに適用することを決定し、前記コンピュータに、
前記第１の更新クエリに従って前記第２のデータベースを更新する前に、前記第１の更新クエリおよび前記第２の更新クエリを前記第１のデータベースに適用することによって、前記第１のデータベースを更新することと、
前記第１の更新クエリおよび前記第２の更新クエリを使用して更新された前記第１のデータベースに基づいて、更新されたハッシュ値を計算することと、
前記第１の更新クエリおよび前記第２の更新クエリを前記第２のデータベースに適用することによって前記第２のデータベースを更新することと
をさらに実行させる、請求項９に記載のコンピュータ・プログラム。
【国際調査報告】
2020531949.tif 000017
2020531949.tif 000018