以下、本開示の目的、技術案及び利点をより明確にするために、本開示の実施形態を添付の図面を参照しながら詳細に説明する。
本開示の実施例に係るデータベースは、複数のデータテーブルを記憶しており、各データテーブルは、タプルを記憶するために用いられてもよく、1つのタプルは、データテーブルに記憶された1つ又は複数のデータ項目でもある。ここで、当該データベースは、MVCC(Multi-Version Concurrency Control、多版型同時制御)に基づくいずれかのタイプのデータベースであってもよい。本開示の実施例において、当該データベースのタイプは特に限定されない。なお、上記データベースにおけるデータは、状態属性に基づいて、現在状態、過渡状態及び履歴状態の3つの状態を含んでもよく、当該3つの状態を、まとめて「データの全状態」と呼び、全状態データと略称し、全状態データにおける様々な異なる状態属性は、ライフサイクルパス内のデータの状態を識別するために用いられることができる。
現在状態(Current State):タプルの最新バージョンのデータで、現在の段階にあるデータである。現在の段階にあるデータの状態を、現在状態と呼ぶ。
過渡状態(Transitional State):タプルの最新バージョンでも履歴状態バージョンでもなく、現在状態から履歴状態への遷移中であり、過渡状態にあるデータを、半減データと呼ぶ。
履歴状態(Historical state):タプルの履歴内の1つの状態であり、その値が古い値であり、現在の値ではない。履歴段階にあるデータの状態を、履歴状態と呼ぶ。1つのタプルの履歴状態は、複数であってもよく、データの状態遷移のプロセスを反映している。履歴状態にあるデータは、読み取りのみが可能で、修正又は削除することはできない。
なお、MVCCメカニズムでは、データの上記3つの状態が全て存在し、非MVCCメカニズムでは、データは履歴状態と現在状態のみ存在してもよい。MVCC又はブラックアウト同時アクセス制御メカニズムでは、トランザクションコミット後のデータの新しい値が現在状態にある。MVCCメカニズムを例とし、現在アクティブなトランザクションのリストの中で最も小さいトランザクションより前のトランザクションが生成したデータは、その状態が履歴状態にある。ブラックアウト同時アクセス制御メカニズムでは、トランザクションコミット後、コミット前のデータの値は履歴状態の値になり、即ちタプルの古い値は履歴状態にある。しかし読み取られたバージョンにはまだアクティブなトランザクション(最新の関連トランザクション以外)が使用されているが、最新の関連トランザクションがタプルの値を修正しているので、その最新値は既に現在状態にあり、読み取られた値は現在状態に対して既に履歴状態にあり、したがって、そのデータ状態は現在状態と履歴状態との間にあるので、過渡状態と呼ぶ。
例えば、MVCCメカニズムでは、Userテーブル(ユーザテーブル)のA口座残高が10元からチャージして20元になり、そして15元を消費して5元になり、この時金融B機関がデータを読み取ってチェックするトランザクションが行われてきたが、Aの後にさらに20元をチャージして25元になると、25元が現在状態データであり、Bが読み取っている5元が過渡状態になり、残りの2つの値20、10は歴史上存在した状態であり、いずれも履歴状態データである。
上記名詞解釈に基づいて、なお、MVCCメカニズムでは、異なるタプルが同じ主キー(key)を有することができ、この時、同じ主キーを有する各タプルは1つのタプル集合を構成することができ、当該タプル集合内の各タプルは、本質的には1つの全状態データを表すために用いられ、つまり、当該主キーを有する初期タプルを複数回修正(又は削除)するプロセスにおいて、修正(又は削除)時刻が異なるために生じた複数の異なるバージョンは、1つのタプル集合を構成することができる。したがって、1つのタプル集合の中には、現在状態データがタプル内に記載されているもの、過渡状態データがタプル内に記載されているもの、履歴状態データがタプル内に記載されているものがある。ここでのタプル集合とは抽象的で仮想的な集合概念を指し、同一のタプル集合内の各タプルは異なる物理マシンに記憶されてもよい。
さらに、なお、本開示の実施例において、タプルがデータ読み取り要求に対して可視的なものであるとは、当該タプルが当該データ読み取り要求に対応する読み取り用グローバルトランザクションに対して可視的なものであることを指し、つまり、タプルの可視及び不可視(タプルの可視性)はトランザクションに対するものであり、あるタプルがいくつかのトランザクションに対して可視的であり、いくつかのトランザクションに対して不可視的なものである可能性がある。
図1は、本開示の実施例に係るデータ読み取り方法の実施環境の概略図である。図1を参照すると、当該図1によって提供される実施環境は、分散データベースシステムであってもよく、当該システムは、ゲートウェイサーバ101、グローバルトランザクション識別子生成クラスタ102、分散ストレージクラスタ103及び分散協調システム104(例えばZooKeeper)を含んでもよい。
ここで、ゲートウェイサーバ101は、読み取り/書き込み要求を受信し、且つ読み取り/書き込み要求に対応する読み取り用トランザクション又は書き込み用トランザクションがグローバルトランザクションであるか否かに基づいて、分散データベースシステム全体におけるデータの読み取り/書き込みの整合性を確保するように、当該読み取り/書き込み要求に対応する読み取り用トランザクション又は書き込み用トランザクションのためにグローバルトランザクション識別子生成クラスタ102に一意のグローバルトランザクション識別子を申請する。
いくつかの実施例において、当該ゲートウェイサーバ101は、分散ストレージクラスタ103内のいずれかのノードデバイスと同一の物理マシンに統合されてもよく、つまり、読み取り操作に関与するあるノードデバイスをゲートウェイサーバ101として機能させる。
グローバルトランザクション識別子生成クラスタ102は、グローバルトランザクションを識別するためのグローバルトランザクション識別子、即ちgxidを生成するために用いられ、当該グローバルトランザクションは、複数のノードデバイスに関わるトランザクションを指してもよく、例えば読み取り用グローバルトランザクションは、複数のノードデバイスに記憶されたデータの読み取りに関わってもよく、また例えば、書き込み用グローバルトランザクションは複数のノードデバイスへのデータ書き込みに関わってもよい。一方、クラスタを使用する形式で当該グローバルトランザクション識別子の生成を実現することで、単一点障害を防止することができる。グローバルトランザクションが発生した場合、ゲートウェイサーバ101を介して当該グローバルトランザクション識別子生成クラスタ102にグローバル一意識別子値を申請してもよい。
いくつかの実施例において、当該グローバルトランザクション識別子生成クラスタ102は、各ゲートウェイサーバ101にグローバルなグローバルトランザクション識別子生成サービスを提供するように、物理的に独立してもよく、分散協調システム104(例えばZooKeeper)と統合されてもよい。
ここで、分散ストレージクラスタ103は、複数のノードデバイスを含んでもよく、且つ各ノードデバイスは、スタンドアロンデバイスであってもよく、マスターとバックアップ構造(即ち、1つのマスターと複数のバックアップクラスタ)を採用してもよい。図1に示すように、ノードデバイスが1つのマスターと2つのバックアップクラスタであることを例として図示し、各ノードデバイスに1つのマスターと2つのバックアップが含まれ、選択的に、各マスター又はバックアップにエージェント(agent)デバイスが対応して構成され、エージェントデバイスはマスター又はバックアップから物理的に独立してもよく、もちろん、エージェントデバイスはマスター又はバックアップのエージェントモジュールとしても機能してもよい。
分散協調システム104は、ゲートウェイサーバ101、グローバルトランザクション識別子生成クラスタ102又は分散ストレージクラスタ103を管理するために用いられてもよく、選択的に、技術者は、端末上のスケジューラ(scheduler)を介して当該分散協調システム104にアクセスしてもよく、それによってフロントエンドのスケジューラに基づいてバックエンドの分散協調システム104を制御し、各クラスタ又はサーバの管理を実現する。例えば、技術者は、スケジューラを介して、あるノードデバイスを分散ストレージクラスタ103から削除し、つまり、あるノードデバイスを無効にするように、ZooKeeperを制御してもよい。
上記図1は、軽量なグローバルトランザクション処理のアーキテクチャ図のみを提供し、分散データベースシステムである。分散データベースシステム全体は、論理的に大きなテーブルを共同で維持すると見なされてもよく、この大きなテーブルに記憶されたデータは、主キーを介して分散ストレージクラスタ103内の各ノードデバイスに分散され、各ノードデバイスに記憶されたデータは他のノードデバイスから独立しており、それによってノードデバイスによる論理的に大きなテーブルの水平方向の分割が可能になっている。上記システムにおいて各データベースにおける各データテーブルを水平に分割してから分散的に記憶することができるので、したがって、このようなシステムをイメージ的に「シャーディング」を有するアーキテクチャと呼んでもよい。
上記実施環境に基づいて、いくつかの実施例において、上記分散データベースシステムは、HTAC(hybrid transaction/analytical cluster、ハイブリッド型トランザクション/アナリティカルクラスタ)システムであってもよい。図2は、本開示の実施例に係るHTACシステムのアーキテクチャの概略図であり、図2を参照すると、HTACシステム内にTP(transaction processing、トランザクション処理)クラスタ201及びAP(analytical processing、分析処理)クラスタ202が含まれてもよい。
ここで、当該TPクラスタ201は、トランザクション処理サービスを提供するために用いられてもよく、TPクラスタ201に複数のTPノードデバイスが含まれてもよく、トランザクション処理プロセスにおいて、各TPノードデバイスは、現在状態データを処理するために用いられる。ここで、各TPノードデバイスは、スタンドアロンデバイスであってもよく、1つのマスターと複数のバックアップクラスタであってもよく、本開示の実施例は、TPノードデバイスのタイプを特に限定しない。
ここで、当該APクラスタ202は、履歴状態データを記憶し且つ履歴状態データの問い合わせ及び分析サービスを提供するために用いられてもよく、APクラスタ202に上記実施例におけるグローバルトランザクション識別子生成クラスタ102及び分散ストレージクラスタ103が含まれてもよい。分散ストレージクラスタ103に複数のAPノードデバイスが含まれてもよく、もちろん、各APノードデバイスは、スタンドアロンデバイスであってもよく、1つのマスターと複数のバックアップクラスタであってもよく、本開示の実施例は、APノードデバイスのタイプを特に限定しない。
上記アーキテクチャでは、各TPノードデバイスに対応するマスター又はバックアップのデータベースインスタンス集合を1つのSET(集合)と呼び、例えば、あるTPノードデバイスがスタンドアロンデバイスであれば、当該TPノードデバイスのSETは当該スタンドアロンデバイスのデータベースインスタンスのみであり、当該TPノードデバイスが1つのマスターと2つのバックアップクラスタであれば、当該TPノードデバイスのSETはマスターのデータベースインスタンス及び2つのバックアップのデータベースインスタンスの集合であり、この時クラウドデータベース(cloud database)の強力な同期技術に基づいてマスターのデータとバックアップのレプリカデータとの間の整合性を確保することができ、選択的に、各SETは、ビッグデータシナリオにおける業務処理の需要に対処するために、線形拡張を行ってもよい。
選択的に、各APノードデバイスは、TPクラスタ201によって生成された履歴状態データをローカルデータベースに記憶してもよく、記憶インタフェースを介して分散ファイルシステム203にアクセスしてもよく、それによって当該分散ファイルシステム203を介してTPクラスタ201によって生成された履歴状態データに無限記憶機能を提供することができ、例えば、当該分散ファイルシステム203は、HDFS(Hadoop distributed file system、Hadoop分散ファイルシステム)、Ceph(Linuxシステム下の分散ファイルシステム)、Alluxio(メモリベースの分散ファイルシステム)などであってもよい。
いくつかの実施例において、当該複数のTPノードデバイスがトランザクション処理サービスを提供することができるので、いずれかのトランザクションのコミットが完了すると、新しい現在状態データが生成されると同時に、当該現在状態データに対応する履歴状態データも生成され、履歴状態データが多くの記憶スペースを占有するが、履歴状態データがまた保存価値を有するので、当該複数のTPノードデバイスは、事前に定義された履歴状態データ移行ポリシーによって、生成された履歴状態データをAPクラスタ202に原子的に移行することができ、APクラスタ202内の各APノードデバイスは、ローカルアクチュエータ(local executor、LE)に基づいて履歴状態データのダンプを実現し、且つデータ移行毎のメタ情報をメタデータ(metadata、MD)マネージャに登録し、それによってAPクラスタ202がMDマネージャに基づいて蓄積されたデータのメタ情報を統計することを容易にする。
いくつかの実施例において、ユーザは、SQLルータ(structured query language router、SQL Router、SRと略称する)層で提供される問い合わせ文、問い合わせ操作のセマンティクス及びメタデータに基づいて、TPクラスタ201又はAPクラスタ202内に記憶されたいずれかのデータに問い合わせをルーティングすることができ、もちろん、TPクラスタ201は主に現在状態データに対する問い合わせサービスを提供し、APクラスタ202は主に履歴状態データに対する問い合わせサービスを提供する。
なお、本開示の実施例に係るHTACシステムにおいて、TPクラスタ201及びAPクラスタ202の前にそれぞれ上記実施例におけるゲートウェイサーバ101が構成されてもよく、且つ上記実施例における分散協調システム104はHTACシステム全体を管理するために用いられてもよく、つまり分散協調システム104によってTPクラスタ201又はAPクラスタ202のうちの少なくとも1つをスケジューリングする。
上記HTACシステムに基づいて、ノードデバイスに関わる数から見ると、TPクラスタ201又はAPクラスタ202のデータベース内で実行されるトランザクションは、2つに分類することができ、1つ目は、あるノードデバイス(TPノードデバイス又はAPノードデバイス)のみに関わるトランザクションであり、局所トランザクションと称し(ローカルトランザクションとも呼ばれる)、2つ目は、複数のノードデバイスに関わるトランザクション(ノード間のトランザクション)であり、グローバルトランザクションと称する。もちろん、トランザクションの操作タイプから見ると、上記トランザクションは読み取り用トランザクションと書き込み用トランザクションの2つに分類することもでき、読み取り操作は読み取り用トランザクションに対応し、書き込み操作は書き込み用トランザクションに対応する。
ある書き込み用グローバルトランザクションを実行することを例として説明し、HTACなどの分散データベースシステムは、当該書き込み用グローバルトランザクションに関わる全てのTPノードデバイスが書き込み操作を実行する時のデータの原子性及び整合性を確保するために、分散整合性アルゴリズムに基づいて当該書き込み用グローバルトランザクションを実行する必要がある。選択的に、当該分散整合性アルゴリズムは、2PC(two-phase commit、2相コミット)アルゴリズムであってもよく、XA(eXtended Architecture、X/Open組織分散トランザクション仕様)仕様(本質的には2PCアルゴリズムでもある)などであってもよい。
上記プロセスにおいて、分散データベースシステムにグローバルトランザクションマネージャが存在しないので、XA/2PC技術によって分散データベースシステムにおける書き込み用グローバルトランザクションのトランザクション整合性のみを解決することができるが、読み取り用グローバルトランザクションのトランザクション整合性を確保することができず、以下では、読み取り用グローバルトランザクションプロセスにおいて発生する可能性があるDRCC異常(Distributed Read Committed-Committing anomaly、分散読み取りコミッティドコミット中異常)について詳しく説明する。
ノードデバイス1からノードデバイス2への振替操作を完了するために、2つのノードデバイスで書き込み操作を実行する必要がある、ある書き込み用グローバルトランザクションTを仮定し、具体的には、当該書き込み用グローバルトランザクションTは、下記文によって実現されてもよい。
BEGIN GLOBAL; //1つのグローバルトランザクション識別子gxidを申請し、gxidが20であると仮定する
UPDATE user_account SET my_wallet= my_wallet -10 WHERE key=100; //ノードデバイス1、ローカルトランザクション識別子lxid18
UPDATE user_account SET my_wallet= my_wallet + 10 WHERE key=900; //ノードデバイス2、ローカルトランザクション識別子lxid22
COMMIT;
ノードデバイス1上のkeyが100のタプルは、そのタプルでのトランザクション識別子が{gxid,lxid}={20,18}のような2タプルである。
ノードデバイス2上のkeyが900のタプルは、そのタプルでのトランザクション識別子が{gxid,lxid}={20,22}のような2タプルである。
上記トランザクション識別子によって、異なるノードデバイスからのデータが同一のグローバルトランザクション操作のデータであるか否か、即ち同一のトランザクションに属するか否かを認識することができる。一方、ノードデバイス1の次のトランザクションがグローバルトランザクションであれば、トランザクション識別子は{gxid,lxid}={21,19}であり、さらに次のトランザクションが局所トランザクションであれば、トランザクション識別子は{gxid,lxid}={0,20}であり、さらに次のトランザクションがグローバルトランザクションであれば、トランザクション識別子は{gxid,lxid}={22,21}であり、このように類推する。
図3は、本開示の実施例に係るDRCC異常の概念図であり、図3を参照すると、上記書き込み用グローバルトランザクションTのコミットプロセスにおいて、ノードデバイス1及びノードデバイス2に関わる読み取り用グローバルトランザクションQが発生したと仮定する。読み取り用グローバルトランザクションQがノードデバイス1に進むと、ノードデバイス1上の書き込み用グローバルトランザクションTがコミット済み状態にあるので、読み取ったノードデバイス1上のkey=100のタプルXに対応する口座限度額が既に10元減算されているが(X-10を読み取った)、読み取り用グローバルトランザクションQがノードデバイス2に進むと、ノードデバイス2上の書き込み用グローバルトランザクションTがコミット中状態にあり、つまりノードデバイス2上の書き込み用グローバルトランザクションTがまだコミットを完了していないため、結果として読み取ったノードデバイス2上のkey=900のタプルYに対応する口座限度額がまだ10元増加していない(Yを読み取った)ので、読み取り用グローバルトランザクションQで読み取った数値に基づいて照合する場合、振替数値の不均衡を発見し、トランザクション読み取りの不整合現象が発生してしまい、分散データベースシステムが同時制御方法を採用しているために引き起こされる可能性があるこのような不整合現象を、即ちDRCC異常と呼ぶ。
例示的には、分散データベースシステムに基づいて金融課金業務を処理するいくつかのシナリオにおいて、例えば勘定照合業務の勘定照合操作(本質的には1つの読み取り用グローバルトランザクション)を実行する時に、勘定照合操作と振替操作(本質的には1つの書き込み用グローバルトランザクション)が同時に実行されると、DRCC異常が一般的に発生し、読み取られたタプルの状態が異なるので、勘定照合時に双方の口座残高の合計に異常が発見され、結果として総勘定元帳の金額が異常になり、つまり勘定照合業務全体の異常が発生する。
これに鑑みて、本開示の実施例は、分散データベースシステムに存在するDRCC異常を例とする読み取り用グローバルトランザクションの不整合問題を解決することができ、分散データベースシステムにおいて任意の時刻(又は任意の期間)で全状態データに対してグローバル読み取り操作を実行する時のトランザクション整合性を確保することができるデータ読み取り方法を提供し、下記実施例で詳しく説明する。
本開示の実施例は、上記HTACなどの分散データベースシステムに適用することができ、書き込み用グローバルトランザクション(即ち、ノード間の書き込み操作)を実行するプロセスにおいて、2PCアルゴリズムを例とする分散整合性アルゴリズムを改良することができ、協調ノードデバイスが当該書き込み用グローバルトランザクションに関わる各関与ノードデバイスからフィードバックされたコミット確認応答を受信すると、即ち当該書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定し、それによって書き込み用グローバルトランザクションの非中央化されたトランザクション状態管理を実現することができ、各グローバルトランザクションのグローバルトランザクション状態に基づいて、本開示の実施例に係るデータ読み取り方法を実行することを容易にする。
図4は、本開示の実施例に係るデータ書き込み方法の対話型フローチャートである。図4を参照すると、データ読み取り方法を説明する前に、まず、当該データ読み取り方法の実現前提として、データ書き込み方法を説明し、本開示の実施例のデータ書き込み方法は、下記ステップを含んでもよい。
401は、いずれかの書き込み用グローバルトランザクションについて、協調ノードデバイスが当該いずれかの書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ準備要求を送信する。
選択的に、当該いずれかの書き込み用グローバルトランザクションの開始ノードであるか否かに応じて、ノードデバイスを協調ノードデバイス(coordinator)と関与ノードデバイス(participants、又はcohort)に分けることができる。ここで、当該協調ノードデバイスは、当該いずれかの書き込み用グローバルトランザクションを開始するノードデバイスを指してもよく、当該関与ノードデバイスは、当該いずれかの書き込み用グローバルトランザクションに関わる、当該書き込み用グローバルトランザクションを開始するノードデバイス以外のノードデバイスを指してもよく、また、協調ノードデバイス又は関与ノードデバイスは固定されているわけではなく、つまり、同一のノードデバイスの場合、一部の書き込み用グローバルトランザクションにとって協調ノードデバイスであり、一部の書き込み用グローバルトランザクションにとって関与ノードデバイスである可能性がある。
いくつかの実施例において、分散データベースシステムに適用される場合、当該協調ノードデバイスはゲートウェイサーバであってもよく、この時協調ノードデバイスがゲートウェイサーバであることを例として説明し、上記ステップ401は、下記サブステップを含んでもよい。
4011は、いずれかの書き込み用トランザクションがノード間操作に関わる場合、ゲートウェイサーバは当該いずれかの書き込み用トランザクションを書き込み用グローバルトランザクションとして決定し、グローバルトランザクション識別子生成クラスタに生成要求を送信する。
上記ステップ4011において、データ書き込み業務の要求元(例えば振込を要求するある金融機関)は、端末上のアプリケーションクライアントを介してゲートウェイサーバにトランザクションの操作文を送信することができ、ゲートウェイサーバがいずれかのトランザクションの操作文(例えばSQL文、英語の正式名称:Structured Query Language、中国語の正式名称:構造化問い合わせ言語)を受信すると、ゲートウェイサーバは、データベースの高度なコンピューティング層として当該トランザクションの操作文を解析することができ、当該トランザクションの操作文に指定キーワードが含まれる場合、当該ゲートウェイサーバは、当該トランザクションをグローバルトランザクションとして決定することができる。
例えば、当該指定キーワードは、「GLOBAL」であってもよく、当該操作文の操作対象がデータベースシステムにおける全てのデータを含み、つまりデータベースシステムにおける全てのノードデバイスをカバーすることを指示するために用いられ、当該操作文に「GLOBAL」が含まれる場合、当該書き込み用トランザクションはノード間操作に関わり、当該トランザクションをグローバルトランザクションとして決定する。グローバルトランザクションに読み取り用グローバルトランザクション及び書き込み用グローバルトランザクションが含まれることができるので、本開示の実施例において書き込み用グローバルトランザクションのみを説明し、次の実施例では読み取り用グローバルトランザクションの読み取り方法について詳しく説明する。
もちろん、いくつかの実施例において、ゲートウェイサーバはさらに当該いずれかの書き込み用トランザクションの操作文に基づいて、書き込み対象のデータが同一のノードデバイス上にあるか否かを決定することができ、同一のノードデバイス上にないと決定した場合、当該いずれかの書き込み用トランザクションが書き込み用グローバルトランザクションであると決定する。具体的には、ゲートウェイサーバは、当該いずれかの書き込み用トランザクションの操作文の書き込み対象データの範囲及び当該範囲内のメタデータに基づいて、書き込み対象のデータが2つ以上のノードデバイスに記憶されているか否かを決定することができ、当該2つ以上のノードデバイスに記憶されていると決定した場合、当該いずれかの書き込み用トランザクションがノード間の操作に関わることを表し、当該いずれかの書き込み用トランザクションを書き込み用グローバルトランザクションとして決定する。例えば、メタデータにデータの現在のストレージデバイスが記載されているので、ゲートウェイサーバは、メタデータに基づいて、各トランザクションの各操作文(例えばSQL文)にアクセスされたノードデバイスを決定することができ、ゲートウェイサーバは、決定されたノードデバイスを記録し、アクセスされた異なるノードデバイスの数が2以上であると統計した場合、当該いずれかの書き込み用トランザクションを書き込み用グローバルトランザクションとして決定する。
上記ある書き込み用トランザクションが書き込み用グローバルトランザクションであるか否かを決定するプロセスは、指定キーワードに基づく認識及びゲートウェイサーバによる自動認識にまとめることができ、ある書き込み用トランザクションがノード間の操作に関わる場合、当該書き込み用トランザクションを書き込み用グローバルトランザクションとして決定する。ゲートウェイサーバは、ある書き込み用トランザクションが書き込み用グローバルトランザクションであると決定した後、グローバルトランザクション識別子を取得するための生成要求を生成し、グローバルトランザクション識別子生成クラスタに当該生成要求を送信することができる。
もちろん、いくつかの実施例において、トランザクションの操作文が単一のノードデバイスのみに関わる場合、局所トランザクションに属し、ローカルトランザクションとも称し、グローバルトランザクション識別子を申請する必要はなく、当該トランザクションに局所トランザクション識別子のみを割り当てればよい。
4012は、グローバルトランザクション識別子生成クラスタが当該生成要求を受信すると、グローバルトランザクション識別子生成クラスタは当該書き込み用グローバルトランザクションにトランザクション開始時刻及びグローバルトランザクション識別子を生成し、当該トランザクション開始時刻及びグローバルトランザクション識別子を当該ゲートウェイサーバに送信する。
ここで、グローバルトランザクション識別子生成クラスタは、単一点障害の発生を回避するためにマルチコピーメカニズムを採用することができ、例えば、当該グローバルトランザクション識別子生成クラスタは、3つのコピー、5つのコピー又はそれ以上のコピーを配備することができ、コピーの数が増加するにつれて、グローバルトランザクション識別子生成クラスタの信頼性を向上させ、グローバルトランザクション識別子生成クラスタのデータ損失が発生する可能性を低減することができる。
本開示の実施例において、当該グローバルトランザクション識別子生成クラスタによって生成されたグローバルトランザクション識別子の代入は、時間の経過とともに単調に増加し、これは本質的にはタイムスタンプであり、グローバルトランザクション識別子の代入の大きさは、当該書き込み用グローバルトランザクションの発生時間を表すことができ、グローバルトランザクション識別子の代入が大きいほど、その書き込み用グローバルトランザクションの発生時間は、コミット済みの書き込み用グローバルトランザクションにおける時系列が後になる。例えば、当該グローバルトランザクション識別子は、タイムスタンプを表すことができる数値タイプ又は時間タイプ又は文字タイプなどのいずれかの形式であってもよい。
4013は、当該トランザクション開始時刻及びグローバルトランザクション識別子を受信すると、ゲートウェイサーバは当該グローバルトランザクション識別子を当該書き込み用グローバルトランザクションのトランザクション識別子とし、ターゲットノードデバイスに当該書き込み用グローバルトランザクションのグローバルトランザクション識別子及びトランザクション開始時刻を記録するように通知し、且つターゲットノードデバイスに当該書き込み用グローバルトランザクションのグローバルトランザクション状態を実行中状態に設定するように通知する。
上記プロセスにおいて、当該ターゲットノードデバイスは、当該書き込み用グローバルトランザクションのグローバルトランザクション状態を記憶するために用いられ、当該ターゲットノードデバイスは、書き込み用グローバルトランザクションに関わるいずれかのノードデバイスであってもよく、例えば、当該ターゲットノードデバイスは、協調ノードデバイス(例えばゲートウェイサーバ)であり、もちろん、当該ターゲットノードデバイスは、いずれかの関与ノードデバイスであってもよい。
いくつかの実施例において、ゲートウェイサーバは、ランダム選択の方式によってターゲットノードデバイスを決定することができ、ゲートウェイサーバは、当該書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスからターゲットノードデバイスをランダムに選択する。
例えば、書き込み用グローバルトランザクションTが3つの関与ノードデバイスNa、Nb及びNcに対する書き込み操作に関わる場合、ゲートウェイサーバによってこれら3つの関与ノードデバイスのうちの1つをターゲットノードデバイスとしてランダムに選択し、その後当該ターゲットノードデバイスによって当該書き込み用グローバルトランザクションのグローバルトランザクション状態を保存し、且つ他の関与ノードデバイスと当該グローバルトランザクション状態を同期させる。
上記プロセスにおいて、各関与ノードデバイスからターゲットノードデバイスをランダムに指定するので、各関与ノードデバイス間のデータスキューの問題を回避し、各関与ノードデバイス間の負荷を均等化することができる。
いくつかの実施例において、ゲートウェイサーバは、指定ルールによってターゲットノードデバイスを決定することもでき、ゲートウェイサーバは、当該書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスのうち、最初にアクセスされた関与ノードデバイスを、当該ターゲットノードデバイスとして決定する。
例えば、書き込み用グローバルトランザクションTが3つの関与ノードデバイスNa、Nb及びNcに対する書き込み操作に関わる場合、ゲートウェイサーバによって最初にアクセスされた関与ノードデバイスNaをターゲットノードデバイスとして決定し、その後当該関与ノードデバイスNaによって当該書き込み用グローバルトランザクションのグローバルトランザクション状態を保存し、且つ他の関与ノードデバイスと当該グローバルトランザクション状態を同期させる。
上記プロセスにおいて、最初にアクセスされた関与ノードデバイスをターゲットノードデバイスとして決定するので、グローバルトランザクションのコミット状態をタイムリーに取得することができ、グローバルトランザクション状態を更新する時に生じる可能性がある遅延を低減する。
上記2つのターゲットノードデバイスの指定方式では、ランダムに選択しても指定ルールにしたがって選択しても、ゲートウェイサーバをターゲットノードデバイスとするような中央化された管理メカニズムに比べて、グローバルトランザクション状態をある関与ノードデバイスに委譲して維持することにより、分散データベースシステムがグローバルトランザクション状態を管理する時に非中央化された管理メカニズムを提示することができ、グローバルトランザクション状態管理メカニズムの最適化を実現することが分かる。このような非中央化された管理メカニズムに基づくため、その後に読み取り用グローバルトランザクションを実行する時に、読み取り用グローバルトランザクションのグローバルトランザクションスナップショットを確立するプロセスにおいて、各関与ノードデバイス間でグローバルトランザクション状態が同期されるので、ゲートウェイサーバに集中的なグローバルトランザクション状態を申請する必要がなくなり、ゲートウェイサーバにグローバルトランザクション状態を頻繁に取得することによるネットワークシグナリングオーバーヘッドを回避し、代わりにいずれかの同期後の関与ノードデバイスからグローバルトランザクション状態を取得することができ、読み取り用グローバルトランザクションの性能を向上させることができる。
ターゲットノードデバイスを決定した後、ゲートウェイサーバは、ターゲットノードデバイスに第1トランザクション状態更新コマンドを送信することができ、当該第1トランザクション状態更新コマンドに当該書き込み用グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻及び現在トランザクション状態が含まれてもよい。ここで、当該トランザクション開始時刻及びグローバルトランザクション識別子は、グローバルトランザクション識別子生成クラスタによって返され、当該現在トランザクション状態はつまり実行中状態である。さらに、ターゲットノードデバイスが当該第1トランザクション状態更新コマンドを受信すると、グローバルトランザクション識別子及びトランザクション開始時刻を記録し、且つグローバルトランザクション状態を実行中状態に設定する。
いくつかの実施例において、ターゲットノードデバイスにおいて、トランザクション状態タプルによって上記グローバルトランザクション識別子、グローバルトランザクション状態及びトランザクション開始時刻を維持することができる。つまり、ターゲットノードデバイスにおいて、各グローバルトランザクションは、1つのトランザクション状態タプルに対応することができ、当該トランザクション状態タプルは、当該各グローバルトランザクションのグローバルトランザクション識別子gxid、トランザクション開始時刻start_time、トランザクション完了時刻finish_time、グローバルトランザクション状態status又はノードデバイス識別子nodesのうちの少なくとも1つを含む。上記場合において、トランザクション状態タプルが上記5つ全てを含む場合、当該トランザクション状態タプルは、5タプル{gxid,start_time,finish_time,status,nodes}である。
ここで、gxidについては、上記ステップ4012で既に説明したので、ここでは説明を省略する。
ここで、start_timeはグローバルトランザクションの開始タイムスタンプを表し、start_timeは、グローバル順序増加が確保されている限り、論理クロック、物理クロック、又は混合論理クロックなどを採用することができ、グローバルトランザクションの開始時にトランザクションの開始時間を記録する。
ここで、finish_timeはグローバルトランザクションのコミット完了/ロールバック完了のタイムスタンプを表し、グローバル順序増加が確保されている限り、同様に論理クロック、物理クロック、又は混合論理クロックなどを採用することができ、グローバルトランザクションのコミット完了/ロールバック完了時にトランザクションの完了時間を記録する。
ここで、statusは、実行中、準備中、コミット中、コミット済み、ロールバック中及びロールバック済みの6つの状態を含む、グローバルトランザクションの現在状態を表し、以下では詳しく説明する。
実行中(running)状態:グローバルトランザクションが実行中であり、つまり上記ステップ4011~4013の段階であり、書き込み用グローバルトランザクションが既に実行を開始したが、協調ノードデバイスがまだデータ準備要求を送信していないことを表す。
準備中(preparing)状態:グローバルトランザクションが準備段階にあり、つまり下記ステップ4014の段階であり、協調ノードデバイスが既にデータ準備要求を送信したが、全ての関与ノードデバイスからフィードバックされた準備成功応答又は準備失敗応答を受信していないことを表す。
コミット中(committing)状態:グローバルトランザクションが既に準備段階を完了し、且つコミット段階にあり、つまり下記ステップ403の段階であり、協調ノードデバイスが既にコミットコマンドを送信したが、全ての関与ノードデバイスからフィードバックされたコミット成功応答を受信していないことを表す。
コミット済み(committed)状態:グローバルトランザクションが既にグローバルコミットを完了し、つまり全ての関与ノードデバイスが既にコミットを完了し、協調ノードデバイスが全ての関与ノードデバイスからフィードバックされたコミット成功応答を受信したことを表す。
ロールバック中(aborting)状態:グローバルトランザクションがロールバック段階にあり、つまりいずれかの関与ノードデバイスからフィードバックされた準備失敗応答を受信すると、協調ノードデバイスが全ての関与ノードデバイスにロールバックコマンドを送信するが、全ての関与ノードデバイスからフィードバックされたロールバック成功応答を受信していないことを表す。
ロールバック済み(aborted)状態:グローバルトランザクションが既にグローバルロールバックを完了し、つまり全ての関与ノードデバイスが既にロールバックを完了し、協調ノードデバイスが全ての関与ノードデバイスからフィードバックされたロールバック成功応答を受信したことを表す。
ここで、nodesは現在グローバルトランザクションに関わる各ノードデバイス(協調ノードデバイス及び関与ノードデバイスを含む)を表す。
上記で説明したトランザクション状態タプルに基づいて、ターゲットノードデバイスが第1トランザクション状態更新コマンドを受信すると、ローカルのトランザクション状態リストにおいて当該書き込み用グローバルトランザクションのために1つのトランザクション状態タプルを作成し、且つ第1トランザクション状態更新コマンドに含まれたグローバルトランザクション識別子及びトランザクション開始時刻を当該トランザクション状態タプルに記録し、グローバルトランザクション状態を実行中状態に設定することができる。選択的に、第1トランザクション状態更新コマンドにさらにノードデバイス識別子が含まれてもよく、それによってターゲットノードデバイスはトランザクション状態タプルにノードデバイス識別子を記録することができる。もちろん、当該書き込み用グローバルトランザクションがまだ完了していないので、トランザクション状態タプルでは一時的にトランザクション完了時刻を空に設定するか、又は初期値に設定することができる。
4014は、ゲートウェイサーバは当該書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ準備要求を送信し、ターゲットノードデバイスに当該書き込み用グローバルトランザクションのグローバルトランザクション状態を準備中状態に設定するように通知する。
図5は、本開示の実施例に係る従来のデータベースシステムのタプル構造の概略図であり、図5に示すように、データベースシステムの場合、従来のデータベースシステム(例えばMySQL/InnoBDなど)におけるタプル構造には、記録ヘッド、主キー、トランザクションID(transaction identification、つまりトランザクション識別子、通常は6バイト)、roll_ptr(当該主キーに対応する前のタプルへのポインタ、通常は7バイト)及び主キー以外の他の空白ではないフィールドが含まれてもよい。
図6は、本開示の実施例に係る分散データベースシステムのタプル構造の概略図であり、本開示の実施例における分散データベースシステムにおいて、MVCC技術をサポートする場合、データ準備要求で伝送されたタプルに対して構造調整を行うことができ、調整後のタプル構造を図6に示し、1つのタプルにシステムフィールド及びユーザフィールドが含まれ、システムフィールドにtrx_min(当該タプルを生成するトランザクション情報を表す)、trx_max(当該タプルを履歴状態タプルに修正するトランザクション情報を表す)、info_bit(当該タプルの操作状態を表す)及びroll_ptr(タプルに対応する主キーの前のタプルへのポインタ)が含まれてもよく、ユーザフィールドにcol.1~col.nのユーザによって定義された合計n個のデータ項目が含まれてもよい。ここで、nは1以上の任意の整数である。
上記調整後のタプル構造において、タプルに記録されたトランザクション情報(trx_min又はtrx_maxのいずれか)は、3タプル{gxid,lxid,node}で表すことができる。ここで、gxidはグローバルトランザクション識別子であり、lxidはローカルトランザクション識別子であり、nodeはトランザクション情報が現在どのノードデバイスに記憶されているかを表すために用いられ、それによって分散データベースシステムにおけるトランザクション情報の記憶位置を迅速に位置決めするために用いられる。ここで、ローカルトランザクション識別子及びグローバルトランザクション識別子の代入は、いずれも単調に増加することができる。
上記タプル構造に基づいて、上記ステップ4014において、ゲートウェイサーバは、グローバルトランザクション識別子生成クラスタからフィードバックされたグローバルトランザクション識別子を、タプル構造におけるtrx_minに対応する3タプルトランザクション情報におけるgxidに書き込み、且つ当該書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ準備要求を送信し、各関与ノードデバイスからの準備成功応答又は準備失敗応答のフィードバックを待つことができ、それによってフィードバックされた応答に基づいて当該グローバルトランザクションのコミットフローを開始する必要があるか否かを判断することができる。なお、当該データ準備要求は、書き込み用グローバルトランザクションが各関与ノードデバイスに対して要求する書き込み操作に基づいて決定され、異なる関与ノードデバイスは、通常異なるデータ準備要求に対応する。
ゲートウェイサーバが全ての関与ノードデバイスにデータ準備要求を送信した後、ターゲットノードデバイスに第2トランザクション状態更新コマンドを送信することができ、当該第2トランザクション状態更新コマンドにグローバルトランザクション識別子及び現在トランザクション状態(即ち、準備中状態)が含まれてもよく、ターゲットノードデバイスが第2トランザクション状態更新コマンドを受信すると、当該第2トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルにおいてグローバルトランザクション状態を実行中状態から準備中状態に設定する。
上記ステップ4011~4014において、協調ノードデバイスがゲートウェイサーバであることを例とし、協調ノードデバイスが各関与ノードデバイスにデータ準備要求を送信する前に、非中央化された管理メカニズムに基づいて、ターゲットノードデバイスでグローバルトランザクション状態(例えばトランザクション状態タプルの形式で維持する)をどのように維持するかを述べたが、なお、本開示の実施例は、書き込み用グローバルトランザクションを例として説明するものであるが、分散データベースシステムにおいて、書き込み用グローバルトランザクションに対してグローバルトランザクション状態を維持することができるだけでなく、読み取り用グローバルトランザクションに対してもグローバルトランザクション状態を維持することができ、それによって全てのグローバルトランザクションのグローバルトランザクション状態を完全に記録することができる。
いくつかの実施例において、分散データベースシステムにおける各ターゲットノードデバイスは、書き込み用グローバルトランザクションのグローバルトランザクション状態のみを永続的に維持し、読み取り用グローバルトランザクションのグローバルトランザクション状態をトランザクション実行中にのみ維持することができ、読み取り用グローバルトランザクションのコミット完了/ロールバック完了後、読み取り用グローバルトランザクションのグローバルトランザクション状態を削除する。この場合、データベースにおけるデータの状態を修正するのが書き込み用トランザクションのみであるので、それによって読み取り用グローバルトランザクションのグローバルトランザクション状態に対する永続的な維持が省略され、トランザクション実行中に一時的な維持を行うだけであり、各ターゲットノードデバイスのローカル記憶スペースを節約することができる。
402は、各関与ノードデバイスが当該データ準備要求を受信すると、当該いずれかの書き込み用グローバルトランザクションに対してデータ書き込みの準備操作を行い、準備が完了すると、各関与ノードデバイスは協調ノードデバイスに準備成功応答をフィードバックする。
複数の関与ノードデバイスのいずれかを例として説明し、当該関与ノードデバイスがデータ準備要求(prepare要求)を受信すると、当該書き込み用グローバルトランザクションの準備段階に進み、当該書き込み用グローバルトランザクションが書き込みを要求したデータに対して、当該データのUndo(ロールバック)情報及びRedo(やりなおし)情報をローカルクリティカルセクションのトランザクションログに書き込むが、当該トランザクションをコミットせず、Undo情報及びRedo情報の書き込みが成功すると、協調ノードデバイスに準備成功応答をフィードバックする。もちろん、いくつかの実施例において、Undo情報及びRedo情報の書き込みが失敗すると、協調ノードデバイスに準備失敗応答をフィードバックすることができる。
403は、当該複数の関与ノードデバイスのそれぞれからフィードバックされた準備成功応答を受信すると、協調ノードデバイスは当該複数の関与ノードデバイスにコミットコマンドを送信し、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定するように通知する。
上記プロセスにおいて、協調ノードデバイスが各関与ノードデバイスからフィードバックされた準備成功応答又は準備失敗応答を受信し、全ての関与ノードデバイスが準備成功応答を返した場合、グローバル準備成功と見なすことができ、協調ノードデバイスは上記ステップ403を実行することにより、全ての関与ノードデバイスにコミットコマンド(commitコマンド)を送信することができ、それによって2PCアルゴリズムのコミット段階に進み、同時にグローバルトランザクション識別子生成クラスタに1つのトランザクション完了時刻(finish_time、本質的にはタイムスタンプ)を申請し、ターゲットノードデバイスに第3トランザクション状態更新コマンドを送信し、当該第3トランザクション状態更新コマンドにグローバルトランザクション識別子、トランザクション完了時刻及び現在トランザクション状態(即ち、コミット済み状態)が含まれており、ターゲットノードデバイスが当該第3トランザクション状態更新コマンドを受信すると、当該第3トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルに当該第3トランザクション状態更新コマンドに含まれたトランザクション完了時刻を記録し、且つグローバルトランザクション状態を準備中状態からコミット済み状態に設定する。
いくつかの実施例において、当該複数の関与ノードデバイスのいずれかからフィードバックされた準備失敗応答を受信すると、協調ノードデバイスは当該複数の関与ノードデバイスにロールバックコマンド(abortコマンド)を送信し、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック中状態に設定するように通知することができ、当該複数の関与ノードデバイスのそれぞれからフィードバックされたロールバック完了応答を受信すると、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック済み状態に設定するように通知する。
上記プロセスにおいて、いずれか1つ又はそれ以上の関与ノードデバイスが準備失敗応答をフィードバックする限り、グローバル準備失敗と見なすことができ、協調ノードデバイスはロールバックコマンドを送信する上記操作を実行し、同時にターゲットノードデバイスに第4トランザクション状態更新コマンドを送信することができ、当該第4トランザクション状態更新コマンドにグローバルトランザクション識別子及び現在トランザクション状態(即ち、ロールバック中状態)が含まれており、ターゲットノードデバイスが当該第4トランザクション状態更新コマンドを受信すると、当該第4トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルにおいてグローバルトランザクション状態を準備中状態からロールバック中状態に設定する。
さらに、各関与ノードデバイスからのロールバック完了応答のフィードバックを待ち、全ての関与ノードデバイスがロールバック完了応答をフィードバックと、グローバルトランザクション識別子生成クラスタに1つのトランザクション完了時刻を申請し、ターゲットノードデバイスに第5トランザクション状態更新コマンドを送信し、当該第5トランザクション状態更新コマンドにグローバルトランザクション識別子、トランザクション完了時刻及び現在トランザクション状態(即ち、ロールバック済み状態)が含まれており、ターゲットノードデバイスが当該第5トランザクション状態更新コマンドを受信すると、当該第5トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルに当該第5トランザクション状態更新コマンドに含まれたトランザクション完了時刻を記録し、且つグローバルトランザクション状態をロールバック中状態からロールバック済み状態に設定する。
404は、いずれかの書き込み用グローバルトランザクションのコミットが完了すると、各関与ノードデバイスは当該いずれかの書き込み用グローバルトランザクションに対応するターゲットノードデバイスにデータ同期要求を送信し、当該ターゲットノードデバイスからフィードバックされたグローバルトランザクション状態を受信し、当該ターゲットノードデバイスは、当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態を記憶する。
上記プロセスにおいて、いずれかの関与ノードデバイスについて、当該関与ノードデバイスが1つの書き込み用グローバルトランザクションのコミットを完了するたびに、当該書き込み用グローバルトランザクションに対応するターゲットノードデバイスにデータ同期要求を送信し、ターゲットノードデバイスはトランザクション状態タプルを介してグローバルトランザクション状態を維持することができるので、ターゲットノードデバイスがデータ同期要求を受信すると、当該データ同期要求に基づいてローカルのトランザクション状態リストにおいて対応するトランザクション状態タプルを問い合わせ、当該関与ノードデバイスに当該トランザクション状態タプルを返し、当該関与ノードデバイスが当該トランザクション状態タプルを受信し、且つ当該トランザクション状態タプルを永続的に記憶することができ、例えばローカルディスクに記憶してもよく、クラウドデータベースに記憶してもよい。
上記ステップ404において、各関与ノードデバイスはトランザクションのコミットが完了すると、グローバルトランザクション状態のリアルタイム同期を直ちに実行し、グローバルトランザクション状態同期プロセスのネットワーク遅延を短縮することができ、これにより各関与ノードデバイスは完了したトランザクションのグローバルトランザクション状態を迅速且つリアルタイムに取得する。
いくつかの実施例において、各関与ノードデバイスは、トランザクションのコミット完了時に、グローバルトランザクション状態の同期を直ちに実行するのではなく、いずれかの関与ノードデバイスについて、現在実行されているトランザクションが当該いずれかの書き込み用グローバルトランザクションに対応する当該ターゲットノードデバイスに関わる場合、当該関与ノードデバイスと当該ターゲットノードデバイスとの間で増分同期を行い、又は、ターゲット時間長ごとに、当該関与ノードデバイスと当該ターゲットノードデバイスとの間で増分同期を行うことにより、グローバルトランザクション状態の遅延同期を実現することもできる。
前者の遅延同期の方式において、関与ノードデバイスがターゲットノードデバイスとの間で必要な通信が発生した場合、関与ノードデバイスは、現在実行されているトランザクション(読み取り又は書き込み)前のコミット済み、当該ターゲットノードデバイスに対応する書き込み用グローバルトランザクションのグローバルトランザクション状態をローカルに同期し、それに応じて、関与ノードデバイスが別の書き込み用グローバルトランザクションのターゲットノードデバイスである可能性もあるので、ターゲットノードデバイスも関与ノードデバイスに記憶されたグローバルトランザクション状態の一部をローカルに同期する。
つまり、関与ノードデバイスとターゲットノードデバイスとの間で必要な通信が発生した場合、両者間で同期対象のトランザクション状態タプルを相互に送信し、それによって関与ノードデバイスとターゲットノードデバイスとの間の一括且つ双方向のデータ同期を実現する。選択的に、同期が完了するたびに、チェックポイント(checkpoint)を設定することができ、それによって次回のデータ同期実行時に増分同期を行うことができ、このような同期方式では、グローバルトランザクション状態の増分同期が現在実行されているトランザクションとともに送信されるので、トランザクションのコミット段階で1回の追加の通信が発生することを回避することができ、同期プロセスにおけるグローバルトランザクション状態のネットワークシグナリングオーバーヘッドを低減する。
後者の遅延同期の方式において、関与ノードデバイスとターゲットノードデバイスとの間でターゲット時間長ごとに増分同期を行う。ここで、ターゲット時間長は0よりも大きい任意の数値であってもよく、当該ターゲット時間長は技術者によってスケジューラを介して設定することができ、増分同期の方式は前の方式と同様であり、ここでは説明を省略する。このようなタイミングポーリングの遅延同期方式により、グローバルトランザクション状態の増分同期を定期的にトリガすることができ、関与ノードデバイスとターゲットノードデバイスとの間で長時間必要な通信が発生しない場合、前のグローバルトランザクションのグローバルトランザクション状態がローカルに同期されない遅延が長すぎるという問題を回避することができる。
上記各方式において、トランザクションのグローバルコミット後、最初はターゲットノードデバイスにのみ当該書き込み用グローバルトランザクションのグローバルトランザクション状態が記憶されているので、各関与ノードデバイスに当該グローバルトランザクション状態を記憶させるために、リアルタイム同期によっても遅延同期によっても、各関与ノードデバイスは、当該グローバルトランザクション状態をローカルに同期することができ、つまり、既にグローバルにコミットされたトランザクションについて、同期メカニズムによって各関与ノードデバイスに上記既にグローバルにコミットされたトランザクションのグローバルトランザクション状態を記憶させることができる。それによってその後に読み取り用グローバルトランザクションを実行する時に、いずれかの関与ノードデバイスから当該グローバルトランザクション状態を取得することができ、局所の関与ノードデバイスのローカルでトランザクションの同時判断を高速化することができ、追加のネットワークシグナリングオーバーヘッドを回避する。
例えば、書き込み用グローバルトランザクションTが関与ノードデバイスNa、Nb、Nc、Ndに関わり、Naがターゲットノードデバイスであり、当該書き込み用グローバルトランザクションTがグローバルにコミットされると、ターゲットノードデバイスNaは書き込み用グローバルトランザクションTのトランザクション状態タプル(書き込み用グローバルトランザクションTのグローバルトランザクション状態を含む)を関与ノードデバイスNb、Nc及びNdに同期し、技術者はスケジューラに基づいてノードデバイス間の同期ポリシーを定義することができ、例えばパラメータ制御によってリアルタイム同期又は何らかの遅延同期などとして定義する。
なお、いずれかの関与ノードデバイスについて、当該関与ノードデバイスがあるグローバルトランザクションのグローバルトランザクション状態をローカルに同期した後、同期した直後のグローバルトランザクション状態が直ちに有効になり、当該有効になったグローバルトランザクション状態は直ちにトランザクションの同時判断に適用することができる。いくつかの実施例において、同時判断対象のトランザクションのグローバルトランザクション状態が、同期が完了していない状態(即ち、関連するグローバルトランザクション状態をローカルで問い合わせることができない)にある場合、当該関与ノードデバイスは遠隔同期対象のノードデバイスから当該トランザクションのグローバルトランザクション状態を取得する必要があり、次の実施例では同時判断対象のトランザクションが読み取り用グローバルトランザクションであることを例として詳細に説明する。
上記ステップ401~404において、書き込み用グローバルトランザクションがグローバルコミットを完了する前に、グローバルトランザクション状態の更新は、協調ノードデバイスによって一方向に、同期してターゲットノードデバイスにグローバルトランザクション状態を更新するように通知する一方向同期書き込みのプロセスであることが分かる。
上記全ての選択可能な技術案は、本開示の選択可能な実施例を形成するために任意の組み合わせを採用することができ、ここでは説明を省略する。
従来の2PCアルゴリズムでは、全ての関与ノードデバイスが協調ノードデバイスに準備成功応答をフィードバックすると、当該書き込み用グローバルトランザクションはコミット中(committing)状態に進み、全ての関与ノードデバイスが協調ノードデバイスにコミット完了応答をフィードバックすると、当該書き込み用グローバルトランザクションはコミット済み(committed)状態に進む。
一方、本開示の実施例において、従来の2PCアルゴリズムを改良し、全ての関与ノードデバイスが協調ノードデバイスに準備成功応答をフィードバックすると、協調ノードデバイスは、当該書き込み用グローバルトランザクションがコミット済み(committed)状態に進むと直接見なし、それによってターゲットノードデバイスに当該書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定するように通知し、各関与ノードデバイスにコミットコマンドを発行し、このようなアルゴリズム論理では、トランザクションの2PCコミット段階が完了した後、グローバルトランザクション状態を事前にコミット済み状態に設定することが可能であるので、トランザクションによって操作されるデータが既に各関与ノードデバイスに書き込まれ且つ永続的な記憶を実現する。上記改良方式により、2PCアルゴリズムのコミット段階を1つの非同期のプロセスに変換することができ、トランザクションのコミットフローを簡略化し、トランザクションの処理効率を向上させ、その後に読み取り用グローバルトランザクションのデータ整合性を確保することに有利である。
本開示の実施例に係る方法は、いずれかの書き込み用グローバルトランザクションについて、全ての関与ノードデバイスが協調ノードデバイスに準備成功応答をフィードバックすると、協調ノードデバイスはグローバルトランザクション識別子生成クラスタにトランザクション完了時刻を申請し、且つターゲットノードデバイスにトランザクション完了時刻を記録し、グローバルトランザクション状態をコミット済み状態に設定するように通知し、それによって2PCアルゴリズムのコミット段階を1つの非同期のプロセスに変換し、トランザクションのコミットフローを簡略化し、トランザクションの処理効率を向上させ、その後に読み取り用グローバルトランザクションのデータ整合性を確保することに有利である。
さらに、トランザクションがグローバルコミットを完了すると、ターゲットノードデバイスと各関与ノードデバイスとの間でグローバルトランザクション識別子の同期を行い、その後に読み取り用グローバルトランザクションを実行する時に、いずれかの関与ノードデバイスから当該グローバルトランザクション状態を取得することができ、局所の関与ノードデバイスのローカルでトランザクションの同時判断を高速化することができ、追加のネットワークシグナリングオーバーヘッドを回避する。
さらに、リアルタイム同期の場合には、グローバルトランザクション状態同期プロセスのネットワーク遅延を短縮することができ、これにより各関与ノードデバイスは完了したトランザクションのグローバルトランザクション状態を迅速且つリアルタイムに取得する。
さらに、遅延同期の場合には、必要な通信が発生した時に増分同期を行うと、トランザクションのコミット段階で1回の追加の通信が発生することを回避することができ、同期プロセスにおけるグローバルトランザクション状態のネットワークシグナリングオーバーヘッドを低減する。又は、ターゲット時間長ごとに増分同期を行うと、関与ノードデバイスとターゲットノードデバイスとの間で長時間必要な通信が発生しない場合、前のグローバルトランザクションのグローバルトランザクション状態がローカルに同期されない遅延が長すぎるという問題を回避することができる。
さらに、協調ノードデバイスは、各関与ノードデバイスから1つのターゲットノードデバイスを指定し、それによってグローバルトランザクション状態を当該ターゲットノードデバイスに委譲して維持することにより、分散データベースシステムがグローバルトランザクション状態を管理する時に非中央化された管理メカニズムを提示することができ、グローバルトランザクション状態管理メカニズムの最適化を実現し、その後に読み取り用グローバルトランザクションを実行する時に、読み取り用グローバルトランザクションのグローバルトランザクションスナップショットを確立するプロセスにおいて、ゲートウェイサーバにグローバルトランザクション状態を頻繁に取得することによるネットワークシグナリングオーバーヘッドを回避し、読み取り用グローバルトランザクションの性能を向上させることができる。
さらに、協調ノードデバイスは、各関与ノードデバイスからターゲットノードデバイスをランダムに指定し、各関与ノードデバイス間のデータスキューの問題を回避し、各関与ノードデバイス間の負荷を均等化することができる。又は、協調ノードデバイスは、最初にアクセスされた関与ノードデバイスをターゲットノードデバイスとして決定し、グローバルトランザクションのコミット状態をタイムリーに取得することができ、グローバルトランザクション状態を更新する時に生じる可能性がある遅延を低減する。
さらに、ターゲットノードデバイスでは、トランザクション状態タプルの方式でグローバルトランザクション状態を維持し、トランザクション状態タプルにグローバルトランザクション識別子、トランザクション開始時刻、トランザクション完了時刻、グローバルトランザクション状態又はノードデバイス識別子のうちの少なくとも1つを記録することにより、あるグローバルトランザクションの各種情報の統一的な管理が大幅に容易になり、グローバルトランザクションに対応する各種情報の記憶形式が最適化される。
上記実施例において、分散データベースシステムにおけるデータ書き込みプロセスを説明し、上記実施例における書き込み用グローバルトランザクションに対して実行される改良された2PCアルゴリズム、及び上記実施例における非中央化されたグローバルトランザクション状態の管理メカニズムに基づいて、これを前提として、本開示の実施例に係るデータ読み取り方法を詳細に説明する。
図7は、本開示の実施例に係るデータ読み取り方法の対話型フローチャートであり、図7を参照すると、本実施例は、下記ステップを含む。
701は、読み取り用グローバルトランザクションを取得すると、協調ノードデバイスは当該読み取り用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ読み取り要求を送信する。
ここで、ここでの協調ノードデバイスとは、当該読み取り用グローバルトランザクションを開始するノードデバイスを指し、例えば、当該協調ノードデバイスは、分散データベースシステムにおけるゲートウェイサーバであってもよい。ここでの関与ノードデバイスとは、当該読み取り用グローバルトランザクションを開始するノードデバイス以外の、当該読み取り用グローバルトランザクションに関わる、ノードデバイスを指してもよい。
なお、本開示の実施例における協調ノードデバイス又は関与ノードデバイスは、ある読み取り用グローバルトランザクションに対するアイデンティティの相違のみによって、区別して称するものであり、分散データベースシステムにおけるいずれかのノードデバイスは、協調ノードデバイス又は関与ノードデバイスになる可能性があり、異なるグローバルトランザクションは、異なる協調ノードデバイス又は関与ノードデバイスに対応し、同一のノードデバイスは、いくつかのトランザクションの協調ノードデバイスでもあり、別のいくつかのトランザクションの関与ノードデバイスでもある。また、本開示の実施例は、いずれかの読み取り用グローバルトランザクションを例として説明するので、したがって、本開示の実施例の協調ノードデバイスは上記実施例における協調ノードデバイスと必ずしも同一のノードデバイスであることは要求されず、関与ノードデバイスが必ずしも同じ複数のノードデバイスであることも要求されず、トランザクション自体の性質によって決定される。
上記ステップ701は、上記ステップ401と同様であり、つまり、当該ステップ701は、下記サブステップを実行することができる。
7011は、いずれかの読み取り用トランザクションがノード間の操作に関わる場合、協調ノードデバイスは当該いずれかの読み取り用トランザクションを読み取り用グローバルトランザクションとして決定し、グローバルトランザクション識別子生成クラスタに生成要求を送信する。
協調ノードデバイスがゲートウェイサーバであることを例とし、データ読み取り業務の要求元(例えば口座確認を要求するある金融機関)は、端末上のアプリケーションクライアントを介してゲートウェイサーバに読み取り用トランザクションの操作文を送信し、ゲートウェイサーバがいずれかの読み取り用トランザクションの操作文を受信すると、当該読み取り用トランザクションの操作文を解析し、当該読み取り用トランザクションの操作文が指定キーワードが含まれる場合、当該読み取り用トランザクションを読み取り用グローバルトランザクションとして決定する。例えば、当該指定キーワードは「GLOBAL」であってもよい。
選択的に、ゲートウェイサーバは、下記方式で読み取り用グローバルトランザクションを決定することもでき、ゲートウェイサーバが当該読み取り用トランザクションの操作文によって読み取られるデータの範囲及び当該範囲内のメタデータに基づいて、読み取られるデータが2つ以上のノードデバイスに記憶されているか否かを決定し、当該2つ以上のノードデバイスに記憶されていると決定した場合、当該読み取り用トランザクションがノード間の操作に関わることを表し、当該読み取り用トランザクションを読み取り用グローバルトランザクションとして決定する。
上記ステップ7011における生成要求の送信プロセスは、上記ステップ4011における生成要求の送信プロセスと同様であり、ここでは説明を省略する。
7012は、グローバルトランザクション識別子生成クラスタが当該生成要求を受信すると、グローバルトランザクション識別子生成クラスタは当該読み取り用グローバルトランザクションのためにトランザクション開始時刻及びグローバルトランザクション識別子を生成し、当該トランザクション開始時刻及びグローバルトランザクション識別子を当該協調ノードデバイスに送信する。
上記ステップ7012は、上記ステップ4012と同様であり、ここでは説明を省略する。
7013は、当該トランザクション開始時刻及びグローバルトランザクション識別子を受信すると、協調ノードデバイスは当該グローバルトランザクション識別子を当該読み取り用グローバルトランザクションのトランザクション識別子とし、ターゲットノードデバイスに当該読み取り用グローバルトランザクションのグローバルトランザクション識別子及びトランザクション開始時刻を記録するように通知し、且つターゲットノードデバイスに当該読み取り用グローバルトランザクションのグローバルトランザクション状態を実行中状態に設定するように通知する。
上記ステップ7013は、上記ステップ4013と同様であり、ここでは詳しく説明しない。
協調ノードデバイスがゲートウェイサーバであることを例とし、ゲートウェイサーバは、ランダム選択の方式によってターゲットノードデバイスを決定することができ、それによって各関与ノードデバイス間のデータスキューの問題を回避し、各関与ノードデバイス間の負荷を均等化する。又は、ゲートウェイサーバは、指定ルールによってターゲットノードデバイスを決定することもでき、例えば最初にアクセスされた関与ノードデバイスをターゲットノードデバイスとして決定し、それによってグローバルトランザクションのコミット状態をタイムリーに取得することができ、グローバルトランザクション状態を更新する時に生じる可能性がある遅延を低減する。
同様に、ターゲットノードデバイスでは、トランザクション状態タプルの方式で読み取り用グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻、トランザクション完了時刻、グローバルトランザクション状態又はノードデバイス識別子のうちの少なくとも1つを維持することもでき、あるグローバルトランザクションの各種情報の統一的な管理が大幅に容易になり、グローバルトランザクションに対応する各種情報の記憶形式が最適化される。
同様にターゲットノードデバイスを決定した後、ゲートウェイサーバは、ターゲットノードデバイスに第6トランザクション状態更新コマンドを送信することができ、当該第6トランザクション状態更新コマンドに当該読み取り用グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻及び現在トランザクション状態が含まれてもよい。ここで、当該トランザクション開始時刻及びグローバルトランザクション識別子はグローバルトランザクション識別子生成クラスタによって返され、当該現在トランザクション状態はつまり実行中状態である。
さらに、ターゲットノードデバイスは、当該第1トランザクション状態更新コマンドを受信すると、ローカルのトランザクション状態リストにおいて当該読み取り用グローバルトランザクションのために1つのトランザクション状態タプルを作成し、且つ第1トランザクション状態更新コマンドに含まれたグローバルトランザクション識別子及びトランザクション開始時刻を当該トランザクション状態タプルに記録し、グローバルトランザクション状態を実行中状態に設定する。
選択的に、第1トランザクション状態更新コマンドにさらにノードデバイス識別子が含まれてもよく、それによってターゲットノードデバイスはトランザクション状態タプルにノードデバイス識別子を記録することができる。もちろん、当該読み取り用グローバルトランザクションがまだ完了していないので、トランザクション状態タプルでは一時的にトランザクション完了時刻を空に設定するか、又は初期値に設定することができる。
7014は、協調ノードデバイスは、当該書き込み用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ準備要求を送信し、ターゲットノードデバイスに当該書き込み用グローバルトランザクションのグローバルトランザクション状態を準備中状態に設定するように通知する。
ここで、データ準備要求で伝送されたタプルは、図6に示すように調整されたタプル構造を有してもよい。
上記ステップ7014は、上記ステップ4014と同様であり、ここでは詳しく説明しない。
協調ノードデバイスがゲートウェイサーバであることを例とし、ゲートウェイサーバは、グローバルトランザクション識別子生成クラスタからフィードバックされたグローバルトランザクション識別子を、タプル構造におけるtrx_minに対応する3タプルトランザクション情報におけるgxidに書き込み、且つ当該読み取り用グローバルトランザクションに関わる複数の関与ノードデバイスにデータ準備要求を送信し、送信が完了すると、ターゲットノードデバイスに第7トランザクション状態更新コマンドを送信し、当該第7トランザクション状態更新コマンドにグローバルトランザクション識別子及び現在トランザクション状態(即ち、準備中状態)が含まれてもよく、ターゲットノードデバイスは、第7トランザクション状態更新コマンドを受信すると、当該第7トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルにおいてグローバルトランザクション状態を実行中状態から準備中状態に設定する。
702は、当該データ準備要求を受信すると、各関与ノードデバイスは、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定する。
ここで、当該読み取り条件は、読み取り対象のデータを指示するために用いられ、例えば、当該読み取り条件は、あるユーザテーブル(userテーブル)における全てのデータを読み取ることであってもよく、また例えば、当該読み取り条件は、ある主キー区間内のデータを読み取り、例えばkeyが[100,1000]範囲内にあるデータを読み取ることであってもよい。
上記プロセスにおいて、各関与ノードデバイスは、データ読み取り要求を解析し、読み取り条件を得て、それによってデータベースにおいて当該読み取り条件を満たす複数のタプルを問い合わせる。例えばHTACアーキテクチャにおいて、TPクラスタが現在状態データ又は過渡状態データに対応するタプルを維持し、APクラスタが履歴状態データに対応するタプルを維持し、協調ノードデバイスがそれぞれTPクラスタ及びAPクラスタの関与ノードデバイスにデータ読み取り要求を送信し、各クラスタの各関与ノードデバイスが上記読み取り条件を満たす複数のタプルをそれぞれ問い合わせる。
703は、当該複数のタプルのいずれかに記録されたグローバルトランザクション識別子について、各関与ノードデバイスはローカルのトランザクション状態リストから、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在するか否かを問い合わせる。
上記プロセスにおいて、図6に示すように、各タプル構造のシステムフィールドに2つのトランザクションのトランザクション情報が記録されており、1つは当該タプルを生成するトランザクション情報trx_minであり、1つは当該タプルを履歴状態タプルに修正するトランザクション情報trx_maxであり、各トランザクションのトランザクション情報はそれぞれ{gxid,lxid,node}のような3タプルで表されることが分かる。現在状態タプルにとって、まだ履歴状態タプルに修正されていないので、タプル構造におけるtrx_maxは一時的に空になる可能性があるが、各タプルに少なくとも1つのトランザクションのトランザクション情報が記録されている。
これに鑑みて、各タプルに記録された少なくとも1つのトランザクションのいずれかにとって、各関与ノードデバイスは、当該トランザクションのトランザクション情報から、当該トランザクションのグローバルトランザクション識別子を取得し、ローカルのトランザクション状態リストから、当該トランザクションのグローバルトランザクション識別子をインデックスとし、当該トランザクション状態リストにおけるいずれかのトランザクション状態タプルにヒットすることができるか否かを問い合わせることができ、下記ステップ704を実行する。
なお、当該トランザクションのグローバルトランザクション識別子が0である場合、当該トランザクションがグローバルトランザクションではないことを意味し、それによりグローバル読み取り操作で発生する可能性があるDRCC異常を引き起こさないので、下記各ステップを実行することなく、従来のスタンドアロンデータベースシステムの可視性判断アルゴリズムに直接したがって可視性判断を行えばよく、ここでは繰り返せず、本開示の実施例において、当該トランザクションがグローバルトランザクションである場合にのみ焦点を当てる。
704は、存在する場合、各関与ノードデバイスは、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態を取得し、存在しない場合、各関与ノードデバイスは、当該グローバルトランザクション識別子に対応する複数のノードデバイスに問い合わせ要求を送信し、当該複数のノードデバイスのいずれかからフィードバックされたグローバルトランザクション状態を受信する。
上記プロセスにおいて、当該トランザクション状態リストにおけるいずれかのトランザクション状態タプルにヒットすることができる場合、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在すると見なし、各関与ノードデバイスは、当該トランザクション状態タプルから、statusの現在値をグローバルトランザクション状態として取得する。
もちろん、当該トランザクション状態リストにおけるいずれかのトランザクション状態タプルにヒットすることができない場合、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在しないと見なし、各関与ノードデバイスは、当該トランザクションのトランザクション情報3タプル{gxid,lxid,node}から、nodeに記載されたノードデバイスを当該グローバルトランザクション識別子に対応する複数のノードデバイスとして決定し、当該グローバルトランザクション識別子が含まれている問い合わせ要求を、当該複数のノードデバイスに送信することができる。当該複数のノードデバイスが当該問い合わせ要求を受信すると、同様の問い合わせプロセスを実行し、当該グローバルトランザクション識別子をインデックスとし、ローカルのトランザクション状態リストにおいていずれかのトランザクション状態タプルにヒットすることができるか否かを問い合わせ、ヒットした場合、問い合わせ要求の送信者に当該トランザクション状態タプルを返し、ヒットすることができなかった場合、問い合わせ要求の送信者に問い合わせ失敗応答をフィードバックするか、または、何もフィードバックしない。
好ましい一実施形態では、各ノードデバイスのローカルのトランザクション状態リストにおいて、グローバルトランザクション識別子の小さい順に順序付けて記憶することができ、したがってトランザクション状態リストにおける問い合わせ効率を向上させるために、問い合わせの時に二分探索などのアルゴリズムによって問い合わせることができる。
各関与ノードデバイスにとって、ローカルのトランザクション状態リストに対応するトランザクション状態タプルが存在しないので、上記結果が生じる可能性がある場合が2つあり、1つは当該グローバルトランザクション識別子が指示するグローバルトランザクションがまだグローバルにコミットされていない場合であり、もう1つは当該グローバルトランザクション識別子が指示するグローバルトランザクションが既にグローバルコミットを完了したが、現在の関与ノードデバイスがまだデータ同期を完了していない場合である。したがって、各ノードデバイスに問い合わせ要求を送信することにより、当該グローバルトランザクション識別子に対応するグローバルトランザクションが上記2つの場合のいずれに属するかを判断することができる。
さらに、各関与ノードデバイスにとって、全てのノードデバイスからのグローバルトランザクション状態(又はトランザクション状態タプル)のフィードバックを待つ必要がなくなり、その代わりに、いずれかのノードデバイスがグローバルトランザクション状態をフィードバックするのであれば、下記ステップ705を実行することができる。これは、いずれかのノードデバイスがグローバルトランザクション状態をフィードバックすることができると、当該トランザクションが既にグローバルコミットを完了し且つ当該ノードデバイスでデータ同期を行ったことを証明し、後続の他のノードデバイスがグローバルトランザクション状態をフィードバックすることを待つ必要がないからである。
いくつかの実施例において、トランザクションがまだグローバルにコミットされていない場合もあり、この時トランザクションに対応するターゲットノードデバイスのみが関与ノードデバイスにグローバルトランザクション状態を返し、他のノードデバイスがグローバルトランザクション状態を返さず(グローバルにコミットされるまでデータ同期を実行しない)、依然として下記ステップ705を実行する。
いくつかの実施例において、全てのノードデバイスがグローバルトランザクション状態を返さない場合、各ノードデバイスは、あるノードデバイスがグローバルトランザクション状態をフィードバックするまで、当該読み取り用グローバルトランザクションを再起動する必要がある。
上記プロセスにおいて、関与ノードデバイスが複数のノードデバイスに問い合わせ要求をブロードキャスト(又はマルチキャスト)し、それによってグローバルトランザクションのグローバルトランザクション状態を取得し、あるノードデバイスのダウンタイムによる障害を回避することができ、もちろん、いくつかの実施例において、関与ノードデバイスは、各グローバルトランザクションのターゲットノードデバイスのみに問い合わせ要求を送信することもでき、ターゲットノードデバイスがダウンタイムした場合、全てのノードデバイスに問い合わせ要求をブロードキャストする操作を実行する。
上記ステップ703~704において、あるグローバルトランザクションを例として説明し、各関与ノードデバイスは、各タプルに記録された各グローバルトランザクションに上記ステップ703~704を繰り返し実行し、それによって非中央化されたグローバルトランザクション状態の管理メカニズムで、当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得することができる。
上記ステップ703~704において、各関与ノードデバイスは、分散データベースシステムにおける1つ又は複数のノードデバイスからグローバルトランザクション状態を取得し、頻繁なネットワークシグナリングオーバーヘッドを回避することができることが分かり、いくつかの実施例において、ゲートウェイサーバによって各グローバルトランザクションのグローバルトランザクション状態を集中的に記憶することもでき、このような中央化された管理メカニズムでグローバルトランザクション状態の取得プロセスの簡略化を実現することができる。
705は、各関与ノードデバイスは当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得する。
上記プロセスにおいて、データ読み取り要求に1つの指定時刻が含まれてもよく、1つの指定期間が含まれてもよい。データ読み取り要求に指定時刻が含まれる場合、当該データ読み取り要求は、当該指定時刻が整合性を満たすタプルを問い合わせるために用いられ、例えばデータ読み取り要求においてSYSTEM_TIME AS OF time_exprで当該指定時刻を識別する。データ読み取り要求に指定期間が含まれる場合、当該データ読み取り要求は、開始時刻から終了時刻までの期間において整合性を満たすタプルを問い合わせるために用いられ、例えばデータ読み取り要求においてSYSTEM_TIME BETWEEN time_expr AND time_expr2で、開始時刻time_exprからtime_expr2までの期間を識別する。
本開示の実施例において、指定時刻又は指定期間の2つの場合において、グローバルコミット時刻(commit_Ts)をどのように取得するかについてそれぞれ説明する。なお、ここで取得したcommit_Tsは、可視性判断アルゴリズムでタプル可視性を判断するための数値であり、グローバルトランザクションのグローバルトランザクション状態に基づいて、異なる場合にはcommit_Tsに異なる代入を行い、各グローバルトランザクションは1つのcommit_Tsに一意に対応する。
1、当該データ読み取り要求に指定時刻が含まれる場合、当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、各関与ノードデバイスのいずれかは下記方式でグローバルコミット時刻を取得することができる。
(1)当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態がコミット済み状態又はコミット中状態である場合、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻よりも大きい時、関与ノードデバイスは当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定し、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻以下である時、関与ノードデバイスは当該いずれかのグローバルトランザクションのグローバルコミット時刻を当該トランザクション完了時刻に設定する。
上記プロセスにおいて、例えば、データ読み取り要求に含まれた指定時刻をTsで表すと仮定し、当該関与ノードデバイスは、当該グローバルトランザクションのトランザクション状態タプルを取得した後、当該トランザクション状態タプル{gxid,start_time,finish_time,status,nodes}内のstatusの現在値がcommitted状態又はcommitting状態であると決定し、当該関与ノードデバイスはfinish_time>Tsであるか否かを判断する。
ここで判断論理を実行するのは、statusの現在値が現在時刻に対するグローバルトランザクション状態がコミット済み状態であることを表すだけであり、指定時刻Tsは必ずしも現在時刻(Ts≦現在時刻)ではないので、実行時刻Tsにおいて当該グローバルトランザクションがどのようなグローバルトランザクション状態にあるかを判断する必要があるからである。
finish_time>Tsであれば、当該グローバルトランザクションが指定時刻Tsにおいて、実際にはrunning状態又はpreparing状態にあることを意味し、したがって指定時刻Tsにおいて当該グローバルトランザクションがまだグローバルにコミットされておらず、当該関与ノードデバイスはcommit_TsをTs+nに設定する。ここで、nは任意の正の数である。
逆に、finish_time≦Tsであれば、当該グローバルトランザクションが指定時刻Tsにおいて、実際にはcommitting状態又はcommitted状態にあることを意味し、前の実施例において2PCアルゴリズムを改良し、つまり書き込み用グローバルトランザクションのcommitting段階で抽出してグローバルコミットが完了したことを確認したので、finish_time≦Tsであれば、当該グローバルトランザクションが指定時刻Tsにおいてグローバルコミットを完了したと見なし、commit_Tsをfinish_timeに設定する。
(2)当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態が実行中状態又は準備中状態である場合、関与ノードデバイスは当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定する。
上記例における仮定に基づいて、トランザクション状態タプル{gxid,start_time,finish_time,status,nodes}内のstatusの現在値がrunning状態又はpreparing状態である場合、当該グローバルトランザクションが現在時刻で全てrunning状態又はpreparing状態にあることを意味し、したがって指定時刻Tsにおいてグローバルコミットが完了していないに違いなく、関与ノードデバイスはcommit_TsをTs+nに直接設定する。ここで、nは任意の正の数である。
(3)当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態がロールバック済み状態又はロールバック中状態である場合、関与ノードデバイスは当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定する。
上記例における仮定に基づいて、トランザクション状態タプル{gxid,start_time,finish_time,status,nodes}内のstatusの現在値がaborting状態又はaborted状態である場合、当該関与ノードデバイスは同様にfinish_time>Tsであるか否かを判断する。ここで、判断論理を実行する理由は上記(1)と同様であり、ここでは説明を省略する。
finish_time>Tsであれば、当該グローバルトランザクションが指定時刻Tsにおいて、実際にはrunning状態又はpreparing状態又はaborting状態にあることを意味し、したがって指定時刻Tsにおいて当該グローバルトランザクションがまだグローバルにコミットされておらず、当該関与ノードデバイスはcommit_TsをTs+nに設定する。ここで、nは任意の正の数である。
逆に、finish_time≦Tsであれば、当該グローバルトランザクションが指定時刻Tsにおいて、実際にはaborted状態にあり、つまり当該グローバルトランザクションが指定時刻Tsにおいてグローバルロールバックを完了したことを意味し、依然としてcommit_TsをTs+nに設定する。ここで、nは任意の正の数である。
以上の分析から分かるように、上記(2)及び(3)は、指定時刻における当該グローバルトランザクションのグローバルトランザクション状態が実行中状態、準備中状態、ロールバック済み状態又はロールバック中状態のいずれかである場合、関与ノードデバイスは当該グローバルトランザクションのグローバルコミット時刻を、指定時刻にいずれかの正の数を加算した数値に設定することにまとめることができる。
上記(1)~(3)に記載の方式では、statusが取り得る値の6つの状態全てについて、commit_Tsにどのように代入するかを説明している。分散データベースシステムにおいて、ある書き込み用グローバルトランザクションがグローバルにコミットされていない場合、当該書き込み用グローバルトランザクションのグローバルトランザクション状態が読み取り用グローバルトランザクションの実行中に更新される可能性があり、それによってDRCC異常を引き起こすが、上記いずれかの方式により、分散データベースシステムにおいて指定時刻Tsで整合性条件を満たすグローバルトランザクション状態を見つけ、且つcommit_Tsに代入することでこのような指定時刻Tsで整合性条件を満たすグローバルトランザクション状態を定量化することができ、後続の可視性判断アルゴリズムが数値の大きさを直接比較することによってタプルの可視性を判断するようにし、つまりグローバル読み取り操作のトランザクション整合性を確保することができる。
2、当該データ読み取り要求に指定期間が含まれる場合、当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、各関与ノードデバイスのいずれかは当該指定期間の開始時刻及び終了時刻に基づいて、それぞれの対応するグローバルコミット時刻を取得する操作をそれぞれ実行する。
選択的に、当該関与ノードデバイスは、当該指定期間の開始時刻に基づいて、当該開始時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行し、当該指定期間の終了時刻に基づいて、当該終了時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行することができる。
具体的には、取得開始時刻におけるグローバルコミット時刻において、指定期間の開始時刻を上記プロセスにおける「指定時刻Ts」と見なすことができ、それによって上記(1)~(3)で提供される方式を実行することにより、当該開始時刻におけるcommit_Tsの代入を取得し、同様に、指定期間の終了時刻を上記プロセスにおける「指定時刻Ts」と見なし、それによって上記(1)~(3)で提供される方式を実行することにより、当該終了時刻におけるcommit_Tsの代入を取得する。
上記場合において、各トランザクションのグローバルトランザクション状態が有向変化プロセスであるので、指定期間全体内におけるcommit_Tsを取得する複雑な操作を、指定期間の開始時刻におけるcommit_Ts及び終了時刻におけるcommit_Tsを取得する簡単な操作に変換することができ、指定期間の開始時刻及び終了時刻におけるトランザクションのcommit_Tsを判断することにより、当該指定期間内における整合性条件を満たすトランザクションのグローバルトランザクション状態を識別し、当該指定期間内における整合性条件を満たすグローバルトランザクション状態を定量化することができ、後続の可視性判断アルゴリズムが数値の大きさを直接比較することによってタプルの可視性を判断するようにし、つまりグローバル読み取り操作のトランザクション整合性を確保することができる。
上記2つの場合において、それぞれ時点(指定時刻)でデータを読み取り及び期間(指定期間)でデータを読み取る角度から、各関与ノードデバイスがどのようにグローバルトランザクション状態に基づいてグローバルコミット時刻を取得し、グローバルコミット時刻によって整合性条件を満たすグローバルトランザクション状態を定量化するかを説明し、分散データベースシステムでのトランザクション状態抽出アルゴリズムを提供することに相当し、当該トランザクション状態抽出アルゴリズムに基づいてある時点又はある期間でのグローバルトランザクション状態(commit_Tsの代入で表される)を抽出することができ、さらに、各関与ノードデバイスは下記ステップ706を実行し、非中央化された全時間状態可視性判断アルゴリズムを利用することにより、複数のタプルからターゲットタプルを判断する。
706は、各関与ノードデバイスは当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、当該複数のタプルからターゲットタプルを決定し、当該ターゲットタプルは当該データ読み取り要求に対して可視的なものである。
ここで、タプルがデータ読み取り要求に対して可視的なものであるとは、当該タプルが当該データ読み取り要求に対応する読み取り用グローバルトランザクションに対して可視的なものであることを指し、つまり、タプルの可視性はトランザクションに対するものであり、つまり、あるタプルがいくつかのトランザクションに対して可視的であり、いくつかのトランザクションに対して不可視的なものである可能性がある。したがって、当該ターゲットタプルとは、上記ステップ701におけるデータ読み取り要求に対して可視的なものであるタプルを指す。
本開示の実施例において、指定時刻又は指定期間の2つの場合において、各関与ノードデバイスのいずれかがいずれかのタプルの可視性をどのように判断するかについて、それぞれ説明する。
1、当該データ読み取り要求に指定時刻が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも大きい時、当該関与ノードデバイスは当該いずれかのタプルを1つのターゲットタプルとして決定する。
上記プロセスにおいて、あるタプルがある指定時刻に対して可視的なものであることは、当該指定時刻が当該タプルの有効時間範囲内に収まることを要求することに相当し、つまり、いずれかのタプルにとって、当該タプルが指定時刻Tsに対して可視的なものであることを判断するには、(1)当該タプルを生成するトランザクションが指定時刻に対して既にグローバルにコミットされていること、(2)当該タプルを修正するトランザクションが指定時刻に対してまだグローバルにコミットされていないことの2つの条件を満たす必要がある。
上記ステップ705において、各タプルに対応する各トランザクションのcommit_Tsに対して既に代入を完了しているので、上記2つの条件はそれに応じて下記2つの不等式に変換することができる。
条件(1):v.trx_min.commit_ts<Ts、即ち当該タプルを生成するトランザクションのグローバルコミット時刻が指定時刻Tsよりも小さいことを確保し、それによって当該タプルを生成するトランザクションが指定時刻に対して既にグローバルにコミットされていることを確保する。
条件(2):v.trx_max.commit_ts>Ts、即ち当該タプルを修正するトランザクションのグローバルコミット時刻が指定時刻Tsよりも大きいことを確保し、それによって当該タプルを修正するトランザクションが指定時刻に対してまだグローバルにコミットされていないことを確保する。
上記プロセスにおいて、当該タプルを生成するトランザクションtrx_minのcommit_Ts及び当該タプルを修正するトランザクションtrx_maxのcommit_Tsが上記2つの不等式からなる不等式群を同時に満たす場合、タプルvが指定時刻Tsに対して可視的なものであると見なし、当該タプルvをターゲットタプルとして決定することができる。つまり、各関与ノードデバイスは指定時刻及びタプル上の各トランザクションのトランザクション情報に基づいて、タプルがターゲットタプルであるか否かを判断する。
2、当該データ読み取り要求に指定期間が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定期間の終了時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定期間の開始時刻よりも大きい時、当該関与ノードデバイスは当該いずれかのタプルを1つのターゲットタプルとして決定する。
上記プロセスにおいて、あるタプルがある指定期間に対して可視的なものであることは、当該指定期間が当該タプルの有効時間範囲と交差することができること(交差が存在すること)を要求することに相当し、つまり、いずれかのタプルにとって、当該タプルが指定期間Ts1~Ts2に対して可視的なものであることを判断するには、(1)当該タプルを生成するトランザクションが指定期間の終了時刻Ts2に対して既にグローバルにコミットされていること、(2)当該タプルを修正するトランザクションが指定期間の開始時刻Ts1に対してまだグローバルにコミットされていないことの2つの条件を満たす必要がある。
上記ステップ705において、各タプルに対応する各トランザクションのcommit_Tsに対して既に代入を完了しているので、上記2つの条件はそれに応じて下記2つの不等式に変換することができる。
条件(1):v.trx_min.commit_ts<Ts2、即ち当該タプルを生成するトランザクションのグローバルコミット時刻が指定期間の終了時刻Ts2よりも小さいことを確保し、それによって当該タプルを生成するトランザクションが指定期間の終了時刻Ts2に対して既にグローバルにコミットされていることを確保する。
条件(2):v.trx_max.commit_ts>Ts1、即ち当該タプルを修正するトランザクションのグローバルコミット時刻が指定期間の開始時刻Ts1よりも大きいことを確保し、それによって当該タプルを修正するトランザクションが指定期間の開始時刻Ts1がまだグローバルにコミットされていないことを確保する。
上記プロセスにおいて、当該タプルを生成するトランザクションtrx_minのcommit_Ts及び当該タプルを修正するトランザクションtrx_maxのcommit_Tsが上記2つの不等式からなる不等式群を同時に満たす場合、タプルvが指定期間Ts1~Ts2に対して可視的なものであると見なし、当該タプルvをターゲットタプルとして決定することができる。つまり、各関与ノードデバイスは指定期間及びタプル上の各トランザクションのトランザクション情報に基づいて、タプルがターゲットタプルであるか否かを判断する。
上記2つの場合において、それぞれ時点(指定時刻)でデータを読み取り及び期間(指定期間)でデータを読み取る角度から、各関与ノードデバイスがどのようにタプルに対応する2つのトランザクションのグローバルコミット時刻commit_Tsに基づいてタプル可視性を判断するか、つまり複数のタプルからターゲットタプルを決定するかについて説明する。したがって、分散データベースシステムでの全時間状態可視性判断アルゴリズムを提供することに相当し、当該全時間状態可視性判断アルゴリズムは分散データベースシステムのいずれかのノードデバイスに作用することができ、且つ当該ノードデバイスが読み取ったタプルがグローバルのトランザクション整合性を満たすことを確保し、DRCC異常の発生を回避することができる。
さらに、上記全時間状態可視性判断アルゴリズムは下記擬似コードで記述することができる。
Algorithm 1:v.visible(Ts,Ts1,Ts2,T)
Input :Ts:Timestamp
Input :Ts1,Ts2:Time interval
Input :T:Query type
Output:visibility
if T = AS_OF then
if(v.trx_min.commit_ts<Ts ∧ v.trx_max.commit_ts>Ts)then
return visible;
if T = BETWEEN_AND then
if(v.trx_min.commit_ts<Ts2 ∧ v.trx_max.commit_ts>Ts1)then
return visible;
return unvisible;
なお、本開示の実施例において、各時点の取り得る値の範囲は、Ts≦現在時刻、Ts2≦現在時刻、Ts1<Ts2である。
上記ステップ705~706において、指定時刻で読み取る場合、指定時刻の取り得る値に応じて、全時間状態データの整合性読み取り操作を下記2つのポリシーに区分することができる。
現在整合読み取りポリシー:ノード間の読み取り用グローバルトランザクションは当該読み取り用グローバルトランザクションのトランザクション開始時刻を要求される整合性ポイントとして指定し、つまりTs=start_timeであり、それによって上記ステップ705で提供されたトランザクション状態抽出アルゴリズム及び上記ステップ706で提供された全時間状態可視性判断アルゴリズムに基づいて、「現在時点」でデータを読み取ることができ、それぞれ分散データベースシステムにおける各ノードデバイス上の可視タプル(即ち、ターゲットタプル)を取得し、グローバルなデータ読み取りプロセスがトランザクション整合性を満たすことを確保する。
履歴整合読み取りポリシー:ノード間の読み取り用グローバルトランザクションは当該読み取り用グローバルトランザクションのトランザクション開始時刻よりも前のある時点を要求される整合性ポイントとして指定し、つまりTs<start_timeであり、それによって上記ステップ705で提供されたトランザクション状態抽出アルゴリズム及び上記ステップ706で提供された全時間状態可視性判断アルゴリズムに基づいて、「履歴時点」でデータを読み取ることができ、それぞれ分散データベースシステムにおける各ノードデバイス上の履歴可視タプル(即ち、ターゲットタプル)を取得し、つまり歴史上整合性ポイントを満たすタプル集合を見つけ、グローバルなデータ読み取りプロセスがトランザクション整合性を満たすことを確保する。
707は、各関与ノードデバイスは協調ノードデバイスにターゲットタプルを出力する。
上記プロセスにおいて、分散データベースシステム全体は各グローバルトランザクションのグローバルトランザクション状態に対して、非中央化された管理メカニズムを採用しているので、読み取り用グローバルトランザクションを実行する時に、各関与ノードデバイスは直接ローカルで非中央化されたトランザクション状態抽出アルゴリズム及び全時間状態可視性判断アルゴリズムを実行し、直接ローカルでターゲットタプルを判断して出力することができ、それによって1回の通信で済み、協調ノードデバイスは直接各関与ノードデバイスから整合性条件を満たすターゲットタプルを取得することができ、集中的なグローバルトランザクション状態を煩雑に取得する必要がなく、さらに複数回の通信によってターゲットタプルを判断し、データベースシステム全体の応答遅延を短縮し、読み取り用グローバルトランザクションのネットワークシグナリングオーバーヘッドを節約することができる。
708は、当該複数の関与ノードデバイスのそれぞれからフィードバックされたターゲットタプルを受信すると、協調ノードデバイスは当該読み取り用グローバルトランザクションをコミットし、当該ターゲットタプルは各関与ノードデバイスによって複数のグローバルトランザクションのグローバルコミット時刻に基づいて、複数のタプルから決定される。
上記ステップ708における読み取り用グローバルトランザクションのコミットフローは、上記実施例のステップ403における書き込み用グローバルトランザクションのコミットフローと同様であり、ここでは詳しく説明しない。
つまり、全ての関与ノードデバイスからフィードバックされたターゲットタプルを受信すると、協調ノードデバイスは全ての関与ノードデバイスにコミットコマンドを送信し、同時にグローバルトランザクション識別子生成クラスタに1つのトランザクション完了時刻を申請し、ターゲットノードデバイスに第8トランザクション状態更新コマンドを送信し、当該第8トランザクション状態更新コマンドにグローバルトランザクション識別子、トランザクション完了時刻及び現在トランザクション状態(即ち、コミット済み状態)が含まれており、ターゲットノードデバイスが当該第8トランザクション状態更新コマンドを受信すると、当該第8トランザクション状態更新コマンドに応答して、グローバルトランザクション識別子に基づいて、トランザクション状態リストから当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、当該トランザクション状態タプルに当該第8トランザクション状態更新コマンドに含まれたトランザクション完了時刻を記録し、且つグローバルトランザクション状態を準備中状態からコミット済み状態に設定する。
もちろん、ある関与ノードデバイスに異常が発生した場合(例えばローカルでグローバルトランザクション状態を取得せず、問い合わせ要求をブロードキャストした後にグローバルトランザクション状態をフィードバックするノードデバイスがない場合)、協調ノードデバイスに当該読み取り用グローバルトランザクションを再起動するように通知する必要があるので、協調ノードデバイスによって各関与ノードデバイスにロールバックコマンドを送信し、且つ上記ステップ403と同様の2PCアルゴリズムのロールバックフローを実行し、ここでは説明を省略する。ロールバックが完了すると、協調ノードデバイスは上記ステップ701~708で実行された操作を再実行する。
709は、当該読み取り用グローバルトランザクションのコミットが完了すると、協調ノードデバイスは当該各関与ノードデバイスからフィードバックされたターゲットタプルを送信する。
上記プロセスにおいて、全ての関与ノードデバイスが読み取り用グローバルトランザクションのコミットを完了すると、協調ノードデバイスは各関与ノードデバイスが送信したターゲットタプルを集計し、ユーザ(データ読み取り業務の要求元)端末に集計した全てのターゲットタプルを送信する。
いくつかの実施例において、ターゲットタプルの送信が完了すると、当該読み取り用グローバルトランザクションのグローバルトランザクション識別子が含まれている削除コマンドを、協調ノードデバイスは各関与ノードデバイスに送信することもでき、当該削除コマンドは当該読み取り用グローバルトランザクションのグローバルトランザクション状態の削除を指示するために用いられ、各関与ノードデバイスが当該削除コマンドを受信すると、当該読み取り用グローバルトランザクションのグローバルトランザクション識別子に基づいて、ローカルのトランザクション状態リストにおいて当該グローバルトランザクション識別子に対応するトランザクション状態タプルを問い合わせ、問い合わせたトランザクション状態タプルを削除することができ、それによって読み取り用グローバルトランザクションのグローバルトランザクション状態の永続的な維持を省略することができ、読み取り用グローバルトランザクションの実行中に一時的な維持を行うだけで、各関与ノードデバイスのローカル記憶スペースを節約する。
別の場合において、上記ステップ707~709を実行する代わりに、各関与ノードデバイスが1つのターゲットタプルを判断するたびに、当該ターゲットタプルをユーザに対応する端末に直接リアルタイムで出力することができ、この場合、読み取り用グローバルトランザクションは各関与ノードデバイスのダウンタイムの影響を受ける。例えば、ある関与ノードデバイスが一部のデータを読み取った後にダウンタイムが発生した場合、当該関与ノードデバイスは回復後に、ユーザに対応する端末にフィードバックされたターゲットタプルが無効であることを通知する必要がある。
上記全ての選択可能な技術案は、本開示の選択可能な実施例を形成するために任意の組み合わせを採用することができ、ここでは説明を省略する。
本開示の実施例に係る方法は、データ読み取り要求を受信すると、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定し、データベースシステムに各グローバルトランザクションのグローバルトランザクション状態が維持されているので、それによって当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得し、これらの取得したグローバルトランザクション状態はデータ読み取り要求にとって整合性条件を満たすグローバルトランザクション状態であり、それによって当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得し、つまり異なるグローバルトランザクション状態で、グローバルコミット時刻に異なる代入を行うことは、整合性条件を満たす各グローバルトランザクション状態を定量化することに相当し、それによって当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、各タプルに対して可視性判断を行い、当該複数のタプルからターゲットタプルを決定することができ、当該ターゲットタプルは当該データ読み取り要求に対して可視的なものである。データベースシステムにグローバルトランザクション状態が維持されているため、整合性条件を満たすグローバルトランザクション状態を見つけた後、可視性判断を容易に行うことができる。したがって、異なるグローバルトランザクション状態に異なるグローバルコミット時刻を与え、それによって直接グローバルコミットに基づいてタプルの可視性を判断し、DRCC異常の発生を回避し、データ読み取りプロセスにおいて読み取ったデータがトランザクション整合の状態にあることを確保し、つまりデータベースシステムにおけるグローバル読み取り操作のトランザクション整合性を確保する。
さらに、データ読み取り要求に指定時刻が含まれる場合、グローバルトランザクション状態が6つの状態にある場合、それぞれグローバルコミット時刻への代入論理を提供し、このような代入論理により、グローバルコミット時刻に正確に数値で整合性条件を満たすグローバルトランザクション状態を描画することができ、後続の可視性判断アルゴリズムの処理論理を簡略化する。
さらに、データ読み取り要求に指定期間が含まれる場合、当該指定期間の開始時刻及び終了時刻に基づいて、それぞれの対応するグローバルコミット時刻を取得する操作をそれぞれ実行し、各トランザクションのグローバルトランザクション状態が有向変化プロセスであるので、それによって上記方式によって指定期間全体内におけるグローバルコミット時刻を取得する複雑な操作を、指定期間の開始時刻におけるグローバルコミット時刻及び終了時刻におけるグローバルコミット時刻を取得する簡単な操作に変換することができ、ある指定期間内におけるグローバルコミット時刻を取得する複雑さを簡略化する。
さらに、データ読み取り要求に指定時刻が含まれる場合、指定時刻、各タプルを生成するトランザクションのグローバルコミット時刻、各タプルを修正するトランザクションのグローバルコミット時刻に基づいて、有効時間範囲内に指定時刻を含む各ターゲットタプルを正確に判断することができ、タプル可視性判断の精度を確保する。
さらに、データ読み取り要求に指定期間が含まれる場合、指定期間、各タプルを生成するトランザクションのグローバルコミット時刻、各タプルを修正するトランザクションのグローバルコミット時刻に基づいて、有効時間範囲が指定期間と交差する各ターゲットタプルを正確に判断することができ、タプル可視性判断の精度を確保する。
さらに、グローバルトランザクション状態を取得する時に、まずローカルトランザクション状態リストにおいて問い合わせを行い、対応するグローバルトランザクション状態をローカルで問い合わせることができない場合、他のノードデバイスに問い合わせ要求を送信し、いずれかのノードデバイスがグローバルトランザクション状態をフィードバックする限り、グローバルコミット時刻を取得する次のフローに進むことができ、これは上記実施例の非中央化されたグローバルトランザクション状態の管理メカニズムで、グローバルトランザクション状態を取得するプロセスにおいて、頻繁なネットワークシグナリングオーバーヘッドを回避することができる。全てのノードデバイスからのグローバルトランザクション状態のフィードバックを待つ必要がないのは、実施例のデータ同期メカニズムに基づいて、いずれかのノードデバイスがグローバルトランザクション状態をフィードバックすることができれば、当該トランザクションが既にグローバルコミットを完了し且つ当該ノードデバイスでデータ同期を行ったことを証明し、後続の他のノードデバイスがグローバルトランザクション状態をフィードバックすることを待つ必要がないからである。よって、データ読み取りプロセスの応答時間長を短縮することができる。
図8は、本開示の実施例に係るトランザクション整合性ポイントの概略図であり、図8を参照すると、HTACシステムにr1、r2、r3(三者は異なるノードデバイスに分散することができる)の3つのデータ項目が存在すると仮定し、以下では時刻t0~時刻t4の間に経験した整合性状態を分析する。
初期タプルr10、r20、r30は整合性状態にあり、図中では初期タプルを白丸で表し、時刻t0の整合性状態を実線で表す。
ある書き込み用グローバルトランザクションが発生すると、タプルのデータ状態が変化し(現在状態から過渡状態又は履歴状態に変化する)、例えば書き込み用グローバルトランザクションT1は時刻t1にグローバルにコミットされ、タプルr10を修正し、1つの対応する第1タプルr11を生成し、図中では第1タプルを黒丸で表し、時刻t1の整合性状態を長い破線で表す。
その後、書き込み用グローバルトランザクションT2は時刻t2にグローバルにコミットされ、タプルr20及びr30を修正し、2つの対応する第2タプルr22及びr32を生成し、図中では第2タプルを斜線丸で表し、時刻t2の整合性状態を短い破線で表す。
その後、書き込み用グローバルトランザクションT3は時刻t3にコミットされ、タプルr11及びr32を修正し、2つの対応する第3タプルr13及びr33を生成し、図中では第3タプルを格子円で表し、時刻t3の整合性状態を一点鎖線で表す。
その後、書き込み用グローバルトランザクションT4は時刻t4にコミットされ、タプルr22を修正し、対応する第4タプルr24を生成し、図中では第4タプルをドット丸で表し、時刻t4の整合性状態を点線で表す。
T1~T4のような一連の書き込み用グローバルトランザクションの操作を経て、全時間状態データの次元で観察すると、図に示す実線、長い破線、短い破線、一点鎖線、点線の合計5つの整合性状態が生成され、各曲線は1つの整合性状態を表すことができる。そして、t1.5、t3.5などの履歴時刻の履歴状態タプルを問い合わせる必要がある場合、本開示の実施例に係るデータ読み取り方法を適用するだけで、トランザクション状態抽出アルゴリズム及び全時間状態可視性判断アルゴリズムの制約に基づいて、図中の曲線で示す整合性状態に適合する履歴状態タプルのうち、今回の読み取り用グローバルトランザクションに対して可視的なものであるターゲットタプルを見つけることができる。
以下ではDRCC異常について分析を行い、本開示のデータ読み取り方法が上記DRCC異常の発生を回避することができることを検証する。
図3と併せて、2つのノードデバイスに関わる書き込み用トランザクションを例とし、書き込み用グローバルトランザクションTがノードデバイスAでタプルx(n)に対して書き込み操作を実行し、且つ新たなタプルx(n+1)を生成し、ノードデバイスBでタプルy(n)に対して書き込み操作を実行し、且つ新たなタプルy(n+1)を生成すると仮定し、以下ではタプルx(n)及びy(n)が可視的なものであるか否かについて分類検討する。
まず、データ読み取り要求に指定時刻が含まれる場合、タプルx(n)及びy(n)にとって、タプルを生成する各トランザクション(必ずしも同一のトランザクションではない)がそれぞれ可視性判断条件を満たすと仮定し、つまりタプルx(n)を生成するトランザクションのグローバルコミット時刻が指定時刻よりも小さく、且つタプルy(n)を生成するトランザクションのグローバルコミット時刻が指定時刻よりも小さく、それでは続いてタプルx(n)及びy(n)を修正するトランザクションを判断し、タプルx(n)及びy(n)を修正するトランザクションはいずれも同一の書き込み用グローバルトランザクションTであり、したがって書き込み用グローバルトランザクションTのグローバルコミット時刻の代入状況を判断することで、全時間状態可視性判断アルゴリズムと組み合わせて、出力したタプルが読み取り操作のトランザクション整合性を満たすか否かを検証する。
1、指定時刻において、ノードデバイスA及びノードデバイスBがいずれも既に書き込み用グローバルトランザクションTに対してコミットを完了した場合、グローバルトランザクション状態はcommitted状態である。それではトランザクション完了時刻は必ず指定時刻よりも小さく、グローバルコミット時刻はトランザクション完了時刻に設定され、それではグローバルコミット時刻も指定時刻よりも小さく、全時間状態可視性判断アルゴリズムと組み合わせて、x(n)及びy(n)がグローバル読み取り操作に対して必ず不可視的なものであると判断する。したがって、ノードデバイスA及びノードデバイスBはいずれもコミットされた最新のタプルを出力し、つまりそれぞれx(n+1)及びy(n+1)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
2、指定時刻において、ノードデバイスAで既に書き込み用グローバルトランザクションTに対してコミットを完了したが、ノードデバイスBでまだ書き込み用グローバルトランザクションTに対してコミットを完了していない場合(即ち、従来のアルゴリズムでDRCC異常が発生した場合)、グローバルトランザクション状態はcommitting状態である。ノードデバイスAがコミットすることができるので、指定時刻が必ずグローバル準備完了後であることを証明し、且つ協調ノードデバイスが既にコミットコマンドを発行し、本開示では2PCアルゴリズムが改良されているので、グローバル準備完了後、協調ノードデバイスはターゲットノードデバイスに直接グローバルトランザクション状態をcommitted状態に設定するように通知し、且つトランザクション状態タプルに既に1つのトランザクション完了時刻を記録し、それではトランザクション完了時刻と指定時刻との間の大小関係を比較するだけで、当該書き込み用グローバルトランザクションTのグローバルコミット時刻を得ることができ、それによって全時間状態可視性判断アルゴリズムと組み合わせて、タプルx(n)及びy(n)がデータ読み取り要求に対して可視的なものであるか否かを得ることができる。
この時、当該グローバルコミット時刻が指定時刻よりも大きく、x(n)及びy(n)がいずれも可視的なものであると判断し、ノードデバイスA及びノードデバイスBがそれぞれx(n)及びy(n)を出力するか、当該グローバルコミット時刻が指定時刻よりも小さく、x(n)及びy(n)がいずれも不可視的なものであると判断し、ノードデバイスA及びノードデバイスBがそれぞれx(n+1)及びy(n+1)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
3、指定時刻において、ノードデバイスA及びノードデバイスBがいずれも既に書き込み用グローバルトランザクションTに対してロールバックを完了した場合、グローバルトランザクション状態はaborted状態であり、それではグローバルコミット時刻を、指定時刻にいずれかの正の数を加算した数値に設定し、結果としてグローバルコミット時刻が指定時刻よりも大きく、全時間状態可視性判断アルゴリズムと組み合わせて、x(n)及びy(n)がいずれも可視的なものであると判断する。したがって、ノードデバイスA及びノードデバイスBはそれぞれx(n)及びy(n)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
4、指定時刻において、ノードデバイスAが既に書き込み用グローバルトランザクションTに対してロールバックを完了したが、ノードデバイスBがまだ書き込み用グローバルトランザクションTに対してロールバックを完了していない場合、グローバルトランザクション状態はaborting状態であり、それではグローバルコミット時刻を、指定時刻にいずれかの正の数を加算した数値に設定し、結果としてグローバルコミット時刻が指定時刻よりも大きく、全時間状態可視性判断アルゴリズムと組み合せて、x(n)及びy(n)がいずれも可視的なものであると判断する。したがって、ノードデバイスA及びノードデバイスBはそれぞれx(n)及びy(n)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
5、指定時刻において、ノードデバイスA及びノードデバイスBがいずれも既に書き込み用グローバルトランザクションTに対して準備を完了した場合、本開示が事前にグローバルトランザクション状態をcommitted状態に設定するので、トランザクション状態タプルにも既に1つのトランザクション完了時刻が記録されており、同様にトランザクション完了時刻と指定時刻との間の大小関係を比較することで、当該書き込み用グローバルトランザクションTのグローバルコミット時刻を得ることができ、それによって全時間状態可視性判断アルゴリズムと組み合わせることで、タプルx(n)及びy(n)がデータ読み取り要求に対して可視的なものであるか否かを得ることができる。
この時、当該グローバルコミット時刻が指定時刻よりも大きく、x(n)及びy(n)がいずれも可視的なものであると判断し、ノードデバイスA及びノードデバイスBがそれぞれx(n)及びy(n)を出力するか、当該グローバルコミット時刻が指定時刻よりも小さく、x(n)及びy(n)がいずれも不可視的なものであると判断し、ノードデバイスA及びノードデバイスBがそれぞれx(n+1)及びy(n+1)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
6、指定時刻において、ノードデバイスAが既に書き込み用グローバルトランザクションTに対して準備を完了したが、ノードデバイスBがまだ書き込み用グローバルトランザクションTに対して準備を完了していない場合、グローバルトランザクション状態はpreparing状態であり、グローバルコミット時刻を、指定時刻にいずれかの正の数を加算した数値に設定し、結果としてグローバルコミット時刻が指定時刻よりも大きく、全時間状態可視性判断アルゴリズムと組み合わせて、x(n)及びy(n)がいずれも可視的なものであると判断する。したがって、ノードデバイスA及びノードデバイスBはそれぞれx(n)及びy(n)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
7、指定時刻において、ノードデバイスA及びノードデバイスBがいずれもまだ書き込み用グローバルトランザクションTに対して準備を開始していない場合、グローバルトランザクション状態はrunning状態であり、それではグローバルコミット時刻を、指定時刻にいずれかの正の数を加算した数値に設定し、結果としてグローバルコミット時刻が指定時刻よりも大きく、全時間状態可視性判断アルゴリズムと組み合わせて、x(n)及びy(n)がいずれも可視的なものであると判断する。したがって、x(n+1)及びy(n+1)は必ず読み取れず、ノードデバイスA及びノードデバイスBはそれぞれx(n)及びy(n)を出力し、この時グローバル読み取り操作のトランザクション整合性を満たす。
上記プロセスにおいて、起こりうる全ての状況について分類検討を行ったところ、本開示のデータ読み取り方法は、全ての状況におけるグローバル読み取り操作のトランザクション整合性を満たすことができることが分かり、もちろん、以上はデータ読み取り要求に指定時刻が含まれることについて分析したが、データ読み取り要求に指定期間が含まれる場合、それぞれ指定期間の開始時刻及び終了時刻を「指定時刻」と見なし、それぞれ全時間状態可視性判断アルゴリズムを実行するので、指定時刻においてトランザクション整合性を満たせば、指定期間においても必ずトランザクション整合性を確保することができ、それによって本開示におけるデータ読み取り方法の正確性、信頼性及び安定性を検証することができる。
例示的には、HTACシステムに適用されるシナリオでは、TPクラスタは通常現在状態タプル及び過渡状態タプルを記憶し、一方、APクラスタは履歴状態タプルを記憶し、それではTPクラスタ及びAPクラスタの前にゲートウェイサーバをHTACシステムの協調ノードデバイスとして設置することができ、ゲートウェイサーバはデータ読み取り要求に関わる各関与ノードデバイスと通信接続を確立し、それぞれTPクラスタ及びAPクラスタ内の各関与ノードデバイスにデータ読み取り要求を発行する。
TPクラスタ又はAPクラスタ内のいずれかの関与ノードデバイスにも本開示の実施例に係るデータ読み取り方法を適用することができ、各関与ノードデバイス間のスナップショットアイソレーションメカニズムに基づく共通の整合性ポイントを見つけ、且つゲートウェイサーバに読み取り用トランザクションに対して可視的なものであるターゲットタプルを出力し、ゲートウェイサーバは各ターゲットタプルをまとめた後に読み取り用トランザクションのコミットフローを開始し、且つ読み取り業務の要求元端末にターゲットタプルを出力することにより、TPクラスタ及びAPクラスタ内の全時間状態データを同時に読み取るトランザクション整合性を確保し、クラスタ間、ノード間でグローバル読み取り操作を実行するトランザクションレベルでの整合性を実現する。
もちろん、読み取り用グローバルトランザクションの開始時に、スケジューラは1つのノードデバイスを協調ノードデバイスとしてランダムに割り当て、非中央化されたグローバル読み取り操作を実現し、軽量で、非中央化されたトランザクション処理メカニズム(読み取り用又は書き込み用のトランザクション処理フローが改良されている)を構築し、ネットワークシグナリングオーバーヘッドを節約し、読み取り用トランザクションの性能を最適化し、データ読み取りの効率を向上させ、単一点のパフォーマンスボトルネックを回避する。
本開示の実施例において、提供されるトランザクション状態抽出アルゴリズム及び全時間状態可視性判断アルゴリズムは非中央化された全時間状態データ整合性読み取りアルゴリズムを構成することができ、分散データベースシステムにおける全時間状態データの整合性読み取り性能を確保することができ、MVCCメカニズムでの可視性判断アルゴリズムを拡張し、分散データベースシステムにおいて、任意の時点で整合性状態に適合するデータ読み取り能力を有するようにする。
図9は、本開示の実施例に係るデータ読み取り装置の概略構造図であり、図9を参照すると、当該装置は、
データ読み取り要求を受信すると、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定する第1決定モジュール901と、
当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得する第1取得モジュール902と、
当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得する第2取得モジュール903と、
当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、当該複数のタプルからターゲットタプルを決定する第2決定モジュール904であって、当該ターゲットタプルは当該データ読み取り要求に対して可視的なものである第2決定モジュール904と、を含む。
本開示の実施例に係る装置は、データ読み取り要求を受信すると、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定し、データベースシステムに各グローバルトランザクションのグローバルトランザクション状態が維持されているので、それによって当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得し、これらの取得したグローバルトランザクション状態はデータ読み取り要求にとって整合性条件を満たすグローバルトランザクション状態であり、それによって当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得し、つまり異なるグローバルトランザクション状態で、グローバルコミット時刻に異なる代入を行うことは、整合性条件を満たす各グローバルトランザクション状態を定量化することに相当し、それによって当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、各タプルに対して可視性判断を行い、当該複数のタプルからターゲットタプルを決定することができ、当該ターゲットタプルは当該データ読み取り要求に対して可視的なものである。データベースシステムにグローバルトランザクション状態が維持されているため、整合性条件を満たすグローバルトランザクション状態を見つけた後、可視性判断を容易に行うことができる。したがって、異なるグローバルトランザクション状態に異なるグローバルコミット時刻を与え、それによって直接グローバルコミットに基づいてタプルの可視性を判断し、DRCC異常の発生を回避し、データ読み取りプロセスで読み取ったデータがトランザクション整合の状態にあることを確保し、つまりデータベースシステムにおけるグローバル読み取り操作のトランザクション整合性を確保する。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該第2取得モジュール903は、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態がコミット済み状態又はコミット中状態である場合、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻よりも大きい時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定し、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻以下である時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を当該トランザクション完了時刻に設定する。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該第2取得モジュール903は、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態が実行中状態、準備中状態、ロールバック済み状態又はロールバック中状態のいずれかである場合、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定する。
好ましい一実施形態では、当該データ読み取り要求に指定期間が含まれる場合、当該第2取得モジュール903は、
当該指定期間の開始時刻に基づいて、当該開始時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行し、
当該指定期間の終了時刻に基づいて、当該終了時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行する。
好ましい一実施形態では、当該第2決定モジュール904は、
当該データ読み取り要求に指定時刻が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定する。
好ましい一実施形態では、当該第2決定モジュール904は、
当該データ読み取り要求に指定期間が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定期間の終了時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定期間の開始時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定する。
好ましい一実施形態では、当該第1取得モジュール902は、
当該複数のタプルのいずれかに記録されたグローバルトランザクション識別子について、ローカルのトランザクション状態リストから、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在するか否かを問い合わせ、
存在する場合、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態を取得し、
存在しない場合、当該グローバルトランザクション識別子に対応する複数のノードデバイスに問い合わせ要求を送信し、当該複数のノードデバイスのいずれかからフィードバックされたグローバルトランザクション状態を受信する。
好ましい一実施形態では、各グローバルトランザクションは1つのトランザクション状態タプルに対応し、当該トランザクション状態タプルは当該各グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻、トランザクション完了時刻、グローバルトランザクション状態又はノードデバイス識別子のうちの少なくとも1つを含む。
好ましい一実施形態では、図9の装置構成に基づいて、当該装置は、さらに、
いずれかの書き込み用グローバルトランザクションのコミットが完了すると、当該いずれかの書き込み用グローバルトランザクションに対応するターゲットノードデバイスにデータ同期要求を送信し、当該ターゲットノードデバイスからフィードバックされたグローバルトランザクション状態を受信し、当該ターゲットノードデバイスは当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態を記憶するために用いられ、又は、
現在実行されているトランザクションが当該いずれかの書き込み用グローバルトランザクションに対応する当該ターゲットノードデバイスに関わる場合、当該ターゲットノードデバイスとの間で増分同期を行い、又は、
ターゲット時間長ごとに、当該ターゲットノードデバイスとの間で増分同期を行うことを含む。
なお、上記実施例に係るデータ読み取り装置はデータを読み取る時、上記各機能モジュールの区分のみを例に挙げて説明したが、実際の適用において、必要に応じて上記機能を異なる機能モジュールに割り当てて完了させ、即ちコンピュータ装置の内部構造を異なる機能モジュールに区分することで、上記機能の全部又は一部を完了する。また、上記実施例に係るデータ読み取り装置はデータ読み取り方法の実施例と同一の構想であり、その具体的な実現プロセスの詳細はデータ読み取り方法の実施例を参照されたく、ここでは説明を省略する。
図10は、本開示の実施例に係るデータ読み取り装置の概略構造図であり、図10を参照すると、当該装置は、
読み取り用グローバルトランザクションを取得すると、当該読み取り用グローバルトランザクションに関わる複数のノードデバイスにデータ読み取り要求を送信する送信モジュール1001と、
当該複数のノードデバイスのそれぞれからフィードバックされたターゲットタプルを受信すると、当該読み取り用グローバルトランザクションをコミットするコミットモジュール1002であって、当該ターゲットタプルは、当該データ読み取り要求に対して可視的であり、複数のグローバルトランザクションのグローバルコミット時刻に基づいて、各ノードデバイスが複数のタプルから決定されるものであるコミットモジュール1002と、を含み、
当該送信モジュール1001は、さらに、当該読み取り用グローバルトランザクションのコミットが完了すると、当該各ノードデバイスからフィードバックされたターゲットタプルを送信する。
本開示の実施例に係る装置は、読み取り用グローバルトランザクションを取得すると、複数のノードデバイスにデータ読み取り要求を送信し、各ノードデバイスからフィードバックされたターゲットタプルを受信すると、読み取り用グローバルトランザクションをコミットし、ターゲットタプルが各ノードデバイスによってグローバルコミット時刻に基づいて決定されるので、各ノードデバイスからフィードバックされたターゲットタプルは整合性読み取り条件を満たす可視タプルであり、したがって読み取り用グローバルトランザクションのコミットが完了すると、各ターゲットタプルを送信し、それによってDRCC異常を回避することができ、データ読み取りプロセスで読み取ったデータがトランザクション整合の状態にあることを確保し、つまりデータベースシステムにおけるグローバル読み取り操作のトランザクション整合性を確保する。
好ましい一実施形態では、図10の装置構成に基づいて、当該装置は、さらに、
いずれかの書き込み用グローバルトランザクションについて、当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスにデータ準備要求を送信し、
当該複数のノードデバイスのそれぞれからフィードバックされた準備成功応答を受信すると、当該複数のノードデバイスにコミットコマンドを送信し、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定するように通知し、
当該複数のノードデバイスのいずれかからフィードバックされた準備失敗応答を受信すると、当該複数のノードデバイスにロールバックコマンドを送信し、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック中状態に設定するように通知し、当該複数のノードデバイスのそれぞれからフィードバックされたロールバック完了応答を受信すると、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック済み状態に設定するように通知することを含む。
好ましい一実施形態では、図10の装置構成に基づいて、当該装置は、さらに、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスから当該ターゲットノードデバイスをランダムに選択し、又は、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスのうち、最初にアクセスされたノードデバイスを、当該ターゲットノードデバイスとして決定することを含む。
なお、上記実施例に係るデータ読み取り装置はデータを読み取る時、上記各機能モジュールの区分のみを例に挙げて説明したが、実際の適用において、必要に応じて上記機能を異なる機能モジュールに割り当てて完了させ、即ちコンピュータ装置の内部構造を異なる機能モジュールに区分することで、上記機能の全部又は一部を完了する。また、上記実施例に係るデータ読み取り装置はデータ読み取り方法の実施例と同一の構想であり、その具体的な実現プロセスの詳細はデータ読み取り方法の実施例を参照されたく、ここでは説明を省略する。
図11は、本開示の実施例に係るコンピュータ装置の概略構造図であり、図11を参照すると、当該コンピュータ装置は、上記各実施例に係る協調ノードデバイス又は関与ノードデバイスであってもよい。当該コンピュータ装置1100は、構成又は性能に応じて大きく異なることがあり、1つ又はそれ以上のプロセッサ(central processing units、CPU)1101及び1つ又はそれ以上のメモリ1102を含んでもよい。ここで、当該メモリ1102に少なくとも1つのプログラムコードが記憶されており、当該少なくとも1つのプログラムコードは、上記各実施例に係るデータ読み取り方法を実現するように、当該プロセッサ1101によってロードされて実行される。もちろん、当該コンピュータ装置は、入出力のために有線又は無線のネットワークインタフェース、キーボード及び入出力インタフェースなどの部材をさらに有してもよく、当該コンピュータ装置は装置の機能を実現する他の部材をさらに含んでもよく、ここでは説明を省略する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、
データ読み取り要求を受信すると、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定すること、
当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得すること、
当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得すること、及び
当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、当該複数のタプルから、当該データ読み取り要求に対して可視的なターゲットタプルを決定することを実現するように、当該1つ又は複数のプロセッサによってロードされて実行される。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態がコミット済み状態又はコミット中状態である場合、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻よりも大きい時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定し、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻以下である時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を当該トランザクション完了時刻に設定することを実行する。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態が実行中状態、準備中状態、ロールバック済み状態又はロールバック中状態のいずれかである場合、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定することを実行する。
好ましい一実施形態では、当該データ読み取り要求に指定期間が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該指定期間の開始時刻に基づいて、当該開始時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行すること、及び
当該指定期間の終了時刻に基づいて、当該終了時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該データ読み取り要求に指定時刻が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該データ読み取り要求に指定期間が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定期間の終了時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定期間の開始時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに記録されたグローバルトランザクション識別子について、ローカルのトランザクション状態リストから、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在するか否かを問い合わせること、
存在する場合、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態を取得すること、及び
存在しない場合、当該グローバルトランザクション識別子に対応する複数のノードデバイスに問い合わせ要求を送信し、当該複数のノードデバイスのいずれかからフィードバックされたグローバルトランザクション状態を受信することを実行する。
好ましい一実施形態では、各グローバルトランザクションは1つのトランザクション状態タプルに対応し、当該トランザクション状態タプルは当該各グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻、トランザクション完了時刻、グローバルトランザクション状態又はノードデバイス識別子のうちの少なくとも1つを含む。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
いずれかの書き込み用グローバルトランザクションのコミットが完了すると、当該いずれかの書き込み用グローバルトランザクションに対応するターゲットノードデバイスにデータ同期要求を送信し、当該ターゲットノードデバイスからフィードバックされたグローバルトランザクション状態を受信することであって、当該ターゲットノードデバイスは当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態を記憶すること、又は、
現在実行されているトランザクションが当該いずれかの書き込み用グローバルトランザクションに対応する当該ターゲットノードデバイスに関わる場合、当該ターゲットノードデバイスとの間で増分同期を行うこと、又は、
ターゲット時間長ごとに、当該ターゲットノードデバイスとの間で増分同期を行うことを実行する。
例示的な実施例において、当該コンピュータ装置の1つ又は複数のメモリに記憶された少なくとも1つのプログラムコードは、
読み取り用グローバルトランザクションを取得すると、当該読み取り用グローバルトランザクションに関わる複数のノードデバイスにデータ読み取り要求を送信すること、
当該複数のノードデバイスのそれぞれからフィードバックされたターゲットタプルを受信すると、当該読み取り用グローバルトランザクションをコミットすることであって、当該ターゲットタプルは、当該データ読み取り要求に対して可視的であり、複数のグローバルトランザクションのグローバルコミット時刻に基づいて、各ノードデバイスが複数のタプルから決定されるものであること、及び
当該読み取り用グローバルトランザクションのコミットが完了すると、当該各ノードデバイスからフィードバックされたターゲットタプルを送信することを実現するように、当該1つ又は複数のプロセッサによってロードされて実行される。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
いずれかの書き込み用グローバルトランザクションについて、当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスにデータ準備要求を送信すること、
当該複数のノードデバイスのそれぞれからフィードバックされた準備成功応答を受信すると、当該複数のノードデバイスにコミットコマンドを送信し、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定するように通知すること、及び
当該複数のノードデバイスのいずれかからフィードバックされた準備失敗応答を受信すると、当該複数のノードデバイスにロールバックコマンドを送信し、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック中状態に設定するように通知し、当該複数のノードデバイスのそれぞれからフィードバックされたロールバック完了応答を受信すると、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック済み状態に設定するように通知することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスから当該ターゲットノードデバイスをランダムに選択すること、又は、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスのうち、最初にアクセスされたノードデバイスを、当該ターゲットノードデバイスとして決定することを実行する。
例示的な実施例において、少なくとも1つのプログラムコードを含むメモリなどのコンピュータ読み取り可能な記憶媒体も提供され、上記少なくとも1つのプログラムコードは、上記実施例におけるデータ読み取り方法を完了するために、コンピュータ装置内の1つ又は複数のプロセッサによって実行されることができる。例えば、当該コンピュータ読み取り可能な記憶媒体は、ROM、ランダムアクセスメモリ(RAM)、CD-ROM、磁気テープ、フロッピーディスク、及び光データストレージデバイスなどであってもよい。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、
データ読み取り要求を受信すると、当該データ読み取り要求に含まれる読み取り条件に基づいて、当該読み取り条件を満たす複数のタプルを決定すること、
当該複数のタプルに対応する複数のグローバルトランザクションのグローバルトランザクション状態を取得すること、
当該複数のグローバルトランザクションのグローバルトランザクション状態に基づいて、当該複数のグローバルトランザクションのグローバルコミット時刻を取得すること、及び
当該複数のグローバルトランザクションのグローバルコミット時刻に基づいて、当該複数のタプルから、当該データ読み取り要求に対して可視的なターゲットタプルを決定することを実現するように、当該1つ又は複数のプロセッサによってロードされて実行される。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態がコミット済み状態又はコミット中状態である場合、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻よりも大きい時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定し、当該いずれかのグローバルトランザクションのトランザクション完了時刻が当該指定時刻以下である時、当該いずれかのグローバルトランザクションのグローバルコミット時刻を当該トランザクション完了時刻に設定することを実行する。
好ましい一実施形態では、当該データ読み取り要求に指定時刻が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに対応するいずれかのグローバルトランザクションについて、当該指定時刻における当該いずれかのグローバルトランザクションのグローバルトランザクション状態が実行中状態、準備中状態、ロールバック済み状態又はロールバック中状態のいずれかである場合、当該いずれかのグローバルトランザクションのグローバルコミット時刻を、当該指定時刻にいずれかの正の数を加算した数値に設定することを実行する。
好ましい一実施形態では、当該データ読み取り要求に指定期間が含まれる場合、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該指定期間の開始時刻に基づいて、当該開始時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行すること、及び
当該指定期間の終了時刻に基づいて、当該終了時刻における当該複数のグローバルトランザクションのグローバルコミット時刻を取得する操作を実行することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該データ読み取り要求に指定時刻が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該データ読み取り要求に指定期間が含まれる場合、当該複数のタプルのいずれかについて、当該いずれかのタプルを生成するグローバルトランザクションのグローバルコミット時刻が当該指定期間の終了時刻よりも小さく、且つ当該いずれかのタプルを修正するグローバルトランザクションのグローバルコミット時刻が当該指定期間の開始時刻よりも大きい時、当該いずれかのタプルを1つのターゲットタプルとして決定することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードは、当該1つ又は複数のプロセッサによってロードされると、
当該複数のタプルのいずれかに記録されたグローバルトランザクション識別子について、ローカルのトランザクション状態リストから、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態が存在するか否かを問い合わせること、
存在する場合、当該グローバルトランザクション識別子に対応するグローバルトランザクション状態を取得すること、及び
存在しない場合、当該グローバルトランザクション識別子に対応する複数のノードデバイスに問い合わせ要求を送信し、当該複数のノードデバイスのいずれかからフィードバックされたグローバルトランザクション状態を受信することを実行する。
好ましい一実施形態では、各グローバルトランザクションは1つのトランザクション状態タプルに対応し、当該トランザクション状態タプルは当該各グローバルトランザクションのグローバルトランザクション識別子、トランザクション開始時刻、トランザクション完了時刻、グローバルトランザクション状態又はノードデバイス識別子のうちの少なくとも1つを含む。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
いずれかの書き込み用グローバルトランザクションのコミットが完了すると、当該いずれかの書き込み用グローバルトランザクションに対応するターゲットノードデバイスにデータ同期要求を送信し、当該ターゲットノードデバイスからフィードバックされたグローバルトランザクション状態を受信することであって、当該ターゲットノードデバイスは当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態を記憶すること、又は、
現在実行されているトランザクションが当該いずれかの書き込み用グローバルトランザクションに対応する当該ターゲットノードデバイスに関わる場合、当該ターゲットノードデバイスとの間で増分同期を行うこと、又は、
ターゲット時間長ごとに、当該ターゲットノードデバイスとの間で増分同期を行うことを実行する。
例示的な実施例において、当該コンピュータ読み取り可能な記憶媒体に記憶された少なくとも1つのプログラムコードは、
読み取り用グローバルトランザクションを取得すると、当該読み取り用グローバルトランザクションに関わる複数のノードデバイスにデータ読み取り要求を送信すること、
当該複数のノードデバイスのそれぞれからフィードバックされたターゲットタプルを受信すると、当該読み取り用グローバルトランザクションをコミットすることであって、当該ターゲットタプルは、当該データ読み取り要求に対して可視的であり、複数のグローバルトランザクションのグローバルコミット時刻に基づいて、各ノードデバイスが複数のタプルから決定されるものであること、及び
当該読み取り用グローバルトランザクションのコミットが完了すると、当該各ノードデバイスからフィードバックされたターゲットタプルを送信することを実現するように、コンピュータ装置の1つ又は複数のプロセッサによってロードされて実行される。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
いずれかの書き込み用グローバルトランザクションについて、当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスにデータ準備要求を送信すること、
当該複数のノードデバイスのそれぞれからフィードバックされた準備成功応答を受信すると、当該複数のノードデバイスにコミットコマンドを送信し、ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をコミット済み状態に設定するように通知すること、及び
当該複数のノードデバイスのいずれかからフィードバックされた準備失敗応答を受信すると、当該複数のノードデバイスにロールバックコマンドを送信し、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック中状態に設定するように通知し、当該複数のノードデバイスのそれぞれからフィードバックされたロールバック完了応答を受信すると、当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのトランザクション完了時刻を記録するように通知し、且つ当該ターゲットノードデバイスに当該いずれかの書き込み用グローバルトランザクションのグローバルトランザクション状態をロールバック済み状態に設定するように通知することを実行する。
好ましい一実施形態では、当該少なくとも1つのプログラムコードはさらに、当該1つ又は複数のプロセッサによってロードされると、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスから当該ターゲットノードデバイスをランダムに選択すること、又は、
当該いずれかの書き込み用グローバルトランザクションに関わる複数のノードデバイスのうち、最初にアクセスされたノードデバイスを、当該ターゲットノードデバイスとして決定することを実行する。
いくつかの実施例において、コンピュータ装置上で実行される時、前述の各実施例に係るデータ読み取り方法のいずれかの可能な実現形態をコンピュータ装置に実行させる、少なくとも1つのプログラムコードを含むコンピュータプログラム又はコンピュータプログラム製品も提供され、ここでは説明を省略する。
当業者であれば、上述した実施例を実現するためのステップの全部又は一部は、ハードウェアによって達成されてもよく、関連するハードウェアに命令するプログラムによって達成されてもよく、前記プログラムは、コンピュータ読み取り可能な記憶媒体に記憶されてもよく、上記で言及した記憶媒体は、読み取り専用メモリ、磁気ディスク、又は光ディスクなどであってもよいことを理解することができる。
上記は、本開示の選択可能な実施例にすぎず、本開示を限定することを意図したものではなく、本開示の精神と原則の範囲内で行われた修正、同等の置換、改良などは、本開示の保護範囲に含まれるものとする。