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

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

▶ 中興通訊股▲ふん▼有限公司の特許一覧

特許7090744分散データベースクラスタシステム、及びデータ同期方法
<>
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図1
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図2
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図3
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図4
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図5
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図6
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図7
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図8
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図9
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図10
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図11
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図12
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図13
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図14
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図15
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図16
  • 特許-分散データベースクラスタシステム、及びデータ同期方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-16
(45)【発行日】2022-06-24
(54)【発明の名称】分散データベースクラスタシステム、及びデータ同期方法
(51)【国際特許分類】
   G06F 16/27 20190101AFI20220617BHJP
【FI】
G06F16/27
【請求項の数】 15
(21)【出願番号】P 2020565003
(86)(22)【出願日】2019-02-03
(65)【公表番号】
(43)【公表日】2021-05-27
(86)【国際出願番号】 CN2019074699
(87)【国際公開番号】W WO2019154394
(87)【国際公開日】2019-08-15
【審査請求日】2020-11-20
(31)【優先権主張番号】201810147335.4
(32)【優先日】2018-02-12
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】511151662
【氏名又は名称】中興通訊股▲ふん▼有限公司
【氏名又は名称原語表記】ZTE CORPORATION
【住所又は居所原語表記】ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan Shenzhen,Guangdong 518057 China
(74)【代理人】
【識別番号】110002066
【氏名又は名称】特許業務法人筒井国際特許事務所
(72)【発明者】
【氏名】ダイ,フー
(72)【発明者】
【氏名】ルオ,シェンメイ
(72)【発明者】
【氏名】フー,ユー
(72)【発明者】
【氏名】チエン,ユーミン
【審査官】松尾 真人
(56)【参考文献】
【文献】特表2009-532789(JP,A)
【文献】国際公開第2015/008484(WO,A1)
【文献】特開2008-181288(JP,A)
【文献】特開2009-123055(JP,A)
【文献】特開2007-183930(JP,A)
【文献】米国特許出願公開第2003/0131025(US,A1)
【文献】中国特許出願公開第102693324(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
第1の同期クロックモジュールと、第1のデータ同期モジュールと、それぞれ1つの第1のマスターデータベースを含む複数の第1のデータベース群とを含む分散データベースクラスタシステムであって、
前記第1の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、
前記第1のデータ同期モジュールは、各第1のマスターデータベースにおいて前記第1の同期クロックモジュールから送信された隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして、前記第1の操作命令ブロックを送信するように構成される、分散データベースクラスタシステム。
【請求項2】
前記第1の同期クロックモジュールは、定期的に各第1のマスターデータベースへ前記クロック同期命令を送信するように構成され、
前記第1のマスターデータベースは、受信したデータベース操作命令を前記第1のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成され、
前記第1のデータ同期モジュールは、各第1のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する2つのクロック同期命令の間に介在されたデータベース操作命令を前記第1の操作命令ブロックにパッケージングし、前記第1の操作命令ブロックを送信するように構成される請求項1に記載の分散データベースクラスタシステム。
【請求項3】
前記第1のデータ同期モジュールは、前記第1の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成されるか、又は、
第1の一貫性フィルタモジュールをさらに含み、前記第1のデータ同期モジュールは、前記第1の操作命令ブロックを前記第1の一貫性フィルタモジュールに送信するように構成され、前記第1の一貫性フィルタモジュールは、前記第1のデータ同期モジュールから送信された前記第1の操作命令ブロックを受信し、前記第1の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第1の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第2の操作命令ブロックにパッケージングし、前記第2の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成され、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むか、または、前記データベース操作命令がグローバルトランザクション提出済状態にあることと、前記データベース操作命令が前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することとを含グローバルトランザクション提出済状態は、実行が終了されたトランザクションに含まれるデータベース操作命令を表す、請求項1又は請求項2に記載の分散データベースクラスタシステム。
【請求項4】
第1の一貫性フィルタモジュールをさらに含んだ場合
前記第1の一貫性フィルタモジュールは、さらに、
前記第1の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、次回に前記第1のデータ同期モジュールから送信された、現在の第1のマスターデータベースに対応する前記第1の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第1の操作命令ブロックに付加してから前記第1の操作命令ブロックに対してグローバルな一貫性フィルタを行うように構成され、前記グローバルトランザクション未提出状態は、実行がまだ終了されていないトランザクションに含まれるデータベース操作命令を表す、請求項3に記載の分散データベースクラスタシステム。
【請求項5】
第1の一貫性フィルタモジュールをさらに含み、
グローバルトランザクションを一意に識別可能なグローバルトランザクション識別IDを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成されるグローバルトランザクション管理モジュールをさらに含み、
前記第1の同期クロックモジュールは、各第1のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第1のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第1のマスターデータベースへ送信する前記クロック同期命令に載せるように構成され、
前記第1の一貫性フィルタモジュールは、現在の第1のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションIDに対応するデータベース操作命令を取り除き、残りのデータベース操作命令を、グローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第2の操作命令ブロックにパッケージングする、請求項3又は請求項4に記載の分散データベースクラスタシステム。
【請求項6】
前記第1のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムからの同期位置要求情報であって、前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている同期位置要求情報を受信し、
前記同期位置要求情報に載せられた前記同期位置に基づいて、各第1のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される、請求項1に記載の分散データベースクラスタシステム。
【請求項7】
前記第1のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムから送信された、第1の操作命令ブロック又は第2の操作命令ブロックを含む操作命令ブロックを受信し、
受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成され、
前記第1のデータ同期モジュールは、さらに、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成され、
前記第1のデータ同期モジュールは、さらに、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で1つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項1乃至請求項6のいずれか1項に記載の分散データベースクラスタシステム。
【請求項8】
前記第1のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項7に記載の分散データベースクラスタシステム。
【請求項9】
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合、
前記第1のデータ同期モジュールは、
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第1の一貫性フィルタモジュールを呼び出すように構成され、
前記第1の一貫性フィルタモジュールは、
各第1のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第1のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第1のマスターデータベースに対しては、前記第1のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第1のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され、
前記第1の一貫性フィルタモジュールは、さらに、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第1のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第1のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され
前記グローバルトランザクション未提出状態は、実行がまだ終了されていないトランザクションに含まれるデータベース操作命令を表し、前記同期テーブルは、現在のアクティブトランザクションリストおよび前記現在のアクティブトランザクションリストのタイムスタンプを記録するために使用される、請求項7に記載の分散データベースクラスタシステム。
【請求項10】
相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第2のデータ同期モジュールと、
それぞれ1つの第2のマスターデータベースを含む複数の第2のデータベース群と、を含む分散データベースクラスタシステムであって、
前記操作命令ブロックは第1の操作命令ブロック又は第2の操作命令ブロックを含み、前記第1の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第2の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされておりグローバルトランザクション提出済状態は、実行が終了されたトランザクションに含まれるデータベース操作命令を表す、分散データベースクラスタシステム。
【請求項11】
前記第2のデータ同期モジュールは、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成され、
前記第2のデータ同期モジュールは、さらに、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で1つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項10に記載の分散データベースクラスタシステム。
【請求項12】
前記第2のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項10又は請求項11に記載の分散データベースクラスタシステム。
【請求項13】
第2の一貫性フィルタモジュールをさらに含み、
前記第2のデータ同期モジュールは、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第2の一貫性フィルタモジュールを呼び出すように構成され、
前記第2の一貫性フィルタモジュールは、
各第2のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第2のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第2のマスターデータベースに対しては、前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され、
前記第2の一貫性フィルタモジュールは、さらに、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され
前記グローバルトランザクション未提出状態は、実行がまだ終了されていないトランザクションに含まれるデータベース操作命令を表し、前記同期テーブルは、現在のアクティブトランザクションリストおよび前記現在のアクティブトランザクションリストのタイムスタンプを記録するために使用される、請求項10又は請求項11に記載の分散データベースクラスタシステム。
【請求項14】
それぞれ1つの第1のマスターデータベースを含む複数の第1のデータベース群を含む第1の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第1の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、
前記第1の分散データベースクラスタシステムが、各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングし、前記第1の操作命令ブロックを送信することと、を含む、データ同期方法。
【請求項15】
それぞれ1つの第2のマスターデータベースを含む複数の第2のデータベース群を含む第2の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第2の分散データベースクラスタシステムが、第1の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第1の操作命令ブロック、又は前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第2の操作命令ブロックを含む操作命令ブロックを受信することと、
前記第2の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含む、データ同期方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分散データベース分野に関し、特に、分散データベースクラスタシステム、データ同期方法及び記憶媒体に関する。
【背景技術】
【0002】
近年、例えばMySQL(SQLはStructured Query Language、すなわち、構造化問合せ言語を表す)等のオープンソースデータベース製品を注目し利用する組織が増えている。業務及び技術の発展に伴い、データベース技術もクラスタ化へ発展している。クラスタ間のデータ同期技術は災害復旧の基礎技術として、2つのデータセンター間の効率的で一貫性のあるデータ同期方法の研究は重要で深遠な意義を持つ。
【0003】
現在、分散データベース分野において、データクラスタ間のデータ同期は、主に、ポイントツーポイントのデータ移行に依頼する。しかし、サーバーやネットワークの差異等のさまざまな要因によって、クラスタ間の異なるデータノードによって同期されたデータが
時点でのグローバルな一貫性を実現することができないおそれがある。例えば、マスタークラスタ内のAとBとの2つのデータノードがデータをバックアップクラスタ内のA’とB’との2つのデータノードに同期させ、ある時刻において、A’はAの時刻T0でのデータに同期したが、B’はBの時刻T1でのデータに同期した。
【0004】
この時に切り替えが行われると、業務をバックアップクラスタに移行しなければならないが、バックアップクラスタのデータがグローバルな一貫を保っていないので、業務を直ちにバックアップクラスタに切り替えることができない。そして、基準となる時点又はクロックがないので、業務データを一貫する時点に復元させることもできない。
【0005】
マスターデータベースクラスタとバックアップデータベースクラスタとの間の切り替え状況以外に、例えば増分データのサブスクリプション、増分データの抽出を含むが、これらに限定されてはいないデータ同期に係る他の状況においても、クラスタ間の異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題がある。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本開示の実施例によると、少なくとも既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決する分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。
【課題を解決するための手段】
【0007】
本開示の一実施例によると、第1の同期クロックモジュールと、第1のデータ同期モジュールと、それぞれ1つの第1のマスターデータベースを含む複数の第1のデータベース群とを含み、前記第1の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、前記第1のデータ同期モジュールは、各第1のマスターデータベースにおいて前記第1の同期クロックモジュールから送信された隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして前記第1の操作命令ブロックを送信するように構成される分散データベースクラスタシステムを提供する。
【0008】
本開示の他の実施例によると、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第2のデータ同期モジュールと、それぞれ1つの第2のマスターデータベースを含む複数の第2のデータベース群と、を含み、前記操作命令ブロックは第1の操作命令ブロック又は第2の操作命令ブロックを含み、前記第1の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第2の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされている分散データベースクラスタシステムを提供する。
【0009】
本開示の他の一実施例によると、それぞれ1つの第1のマスターデータベースを含む複数の第1のデータベース群を含む第1の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第1の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、前記第1の分散データベースクラスタシステムが、各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングして前記第1の操作命令ブロックを送信することと、を含むデータ同期方法を提供する。
【0010】
本開示の他の一実施例によると、それぞれ1つの第2のマスターデータベースを含む複数の第2のデータベース群を含む第2の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第2の分散データベースクラスタシステムが、第1の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第1の操作命令ブロック、又は前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第2の操作命令ブロックを含む操作命令ブロックを受信することと、前記第2の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含むデータ同期方法を提供する。
【0011】
本開示の他の一実施例によると、コンピュータープログラムが記憶された記憶媒体であって、前記コンピュータープログラムは、実行されると、上述したいずれかの方法実施例におけるのステップを実行するように構成される記憶媒体を提供する。
【0012】
本開示の他の一実施例によると、メモリとプロセッサとを含む電子機器であって、前記メモリにコンピュータープログラムが記憶され、前記プロセッサは前記コンピュータープログラムを実行することで上述したいずれかの方法実施例におけるステップを実行するように構成される電子機器を提供する。
【発明の効果】
【0013】
本開示によると、分散データベースクラスタシステムの内部でクロック同期命令を定期的に送信し、データ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【図面の簡単な説明】
【0014】
ここで説明する図面は本開示を一層理解させるためのもので、本願の一部を構成し、本開示に示す実施例及びその説明は本開示を解釈するものであり、本開示を不当に限定するものではない。
図1】本開示の実施例1に係る分散データベースクラスタシステムの構成を示す図である。
図2】本開示の実施例1に係る分散データベースクラスタシステムの第1の好適な構成を示す図である。
図3】本開示の実施例1に係る分散データベースクラスタシステムの第2の好適な構成を示す図である。
図4】本開示の実施例2に係る分散データベースクラスタシステムの構成を示す図である。
図5】本開示の実施例2に係る分散データベースクラスタシステムの好適な構成を示す図である。
図6】本開示の実施例3に係るデータ同期方法を示すフローチャートである。
図7】本開示の実施例4に係るデータ同期方法を示すフローチャートである。
図8】本開示の実施例5に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
図9】本開示の実施例5に係るデータ同期方法の詳細な作業フローチャートである。
図10】本開示の実施例6に係るSQLステートメント分割パケットを示す図である。
図11】本開示の実施例7に係るSQLステートメント行並列処理を示すフローチャートである。
図12】本開示の実施例8に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートである。
図13】本開示の実施例8に係る最終的なグローバルな一貫性フィルタを示すフローチャートである。
図14】本開示の実施例9に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
図15】本開示の実施例10に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
図16】本開示の実施例11に係る分散データベースを準リアルタイムにバックアップするシステム構成を示す図である。
図17】本開示の実施例12に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【発明を実施するための形態】
【0015】
分散データベースクラスタシステムは複数のデータベース群からなり、各データベース群は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、1つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばSQLインタフェース等の統一した標準インタフェースを提供する。
【0016】
例えばデータクラスタ間のデータ同期、増分データのサブスクリプション、増分データの抽出などの分散データベースクラスタシステム間の同期について、既存技術におけるデータ同期態様によると、グローバルな一貫性を提供できない問題や欠陥が存在する場合が多い。
【0017】
上記問題について、本開示において分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。以下、図面を参照しつつ実施例とともに本開示を詳しく説明する。なお、矛盾しない限り、本願の実施例及び実施例の特徴を互いに組み合わせることができる。
【0018】
なお、本開示の明細書、特許請求の範囲及び上記図面における「第1」、「第2」等の用語は、特定の順又は前後順を限定するものではなく、類似する対象を区別するためものである。
【実施例1】
【0019】
この実施例において分散データベースクラスタシステムを提供する。図1は本開示の実施例1に係る分散データベースクラスタシステムの構成を示す図である。
【0020】
図1に示すように、この分散データベースクラスタシステムは、第1の同期クロックモジュール12と、第1のデータ同期モジュール14と、複数の第1のデータベース群16と、を含むことができる。ここで、前記複数の第1のデータベース群16のうちの各第1のデータベース群16は1つの第1のマスターデータベース(未図示)を含む。
【0021】
前記第1の同期クロックモジュール12は、クロック同期命令を定期的に送信するように構成される。
【0022】
前記第1のデータ同期モジュール14は、各第1のマスターデータベースにおいて前記第1の同期クロックモジュール12から送信された隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングし、前記第1の操作命令ブロックを送信するように構成される。
【0023】
上記技術案によると、分散データベースクラスタシステムにおいて第1の同期クロックモジュール12がクロック同期命令を定期的に送信し、第1のデータ同期モジュール14はデータ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【0024】
第1のデータ同期モジュール14が、如何に、各第1のマスターデータベースにおいて前記第1の同期クロックモジュール12から送信された隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第1の操作命令ブロックにパッケージングするかについて、分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【0025】
例示的な実施形態として、前記第1の同期クロックモジュール12は、定期的に各第1のマスターデータベースへ前記クロック同期命令を送信するように構成される。前記第1のマスターデータベースは、受信したデータベース操作命令を前記第1のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成される。前記第1のデータ同期モジュール14は、各第1のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する2つのクロック同期命令の間に介在されたデータベース操作命令を前記第1の操作命令ブロックにパッケージングし、前記第1の操作命令ブロックを送信するように構成される。
【0026】
このように、このような態様によると、マスターデータベースにおいて受信したクロック同期命令と普通のデータベース操作命令とをいずれも正常にログファイルに書き込み、前記第1のデータ同期モジュール14はログファイルを読み取って、ログにおけるクロック同期命令に基づいてデータベース操作命令を分割し、隣接する2つのクロック同期命令の間に介在されたデータベース操作命令を前記第1の操作命令ブロックにパッケージングする。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成してもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【0027】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはSQLであり、すなわち、同期クロックSQLステートメントをクロック同期命令として用いることができ、データベース操作命令もSQLステートメントを用いることができる。
【0028】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令の記録方面でグローバルな一貫性を実現する。
【0029】
データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【0030】
そこで、この時、以下のような2つの処理方式(最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性)のうちの少なくとも1つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【0031】
<最終的なグローバルな一貫性態様>
この態様において、前記第1のデータ同期モジュール14は、前記第1の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。この時、相手側の分散データベースクラスタシステムに送信する第1の操作命令ブロックは、マスターデータベースにおいて記録された、隣接する2つのクロック同期命令の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。相手側の分散データベースクラスタシステムのデータ同期モジュールは、それを正常に相手側の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、相手側の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを行う。
【0032】
この実施例は、災害復旧システムにおいてRPO指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、RPOができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態について、は実施例8を参照することができる。
【0033】
<リアルタイムなグローバルな一貫性態様>
このリアルタイムなグローバルな一貫性態様によると、分散データベースクラスタシステムに第1の一貫性フィルタモジュール22が追加される。図2は本開示の実施例1に係る分散データベースクラスタシステムの第1の好適な構成を示す図である。
【0034】
図2に示すように、この分散データベースクラスタシステムは、第1の一貫性フィルタモジュール22をさらに含む。
【0035】
前記第1のデータ同期モジュール14は、前記第1の操作命令ブロックを前記第1の一貫性フィルタモジュール22に送信するように構成される。前記第1の一貫性フィルタモジュール22は、前記第1のデータ同期モジュール14から送信された前記第1の操作命令ブロックを受信し、前記第1の操作命令ブロックにグローバルな一貫性フィルタを行い、前記第1の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第2の操作命令ブロックにパッケージングし、前記第2の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。
【0036】
ここで、前記フィルタ条件は前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第1の操作命令ブロックから実行がまだ終了されていない(すなわち、グローバルトランザクション未提出状態にある)データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第2の操作命令ブロックにパッケージングして相手側の分散データベースクラスタシステムに送信し、これにより、相手側の分散データベースクラスタシステムにおいて同期したのは、現在の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【0037】
この実施例は、災害復旧システムにおいてRTO指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、RTOはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例8を参照することができる。
【0038】
増分データのサブスクリプション、増分データの抽出において、相手側の分散データベースクラスタシステムが受信したデータを選別する必要があり、特定の条件を満たすデータ対象(データベース、テーブル等)のみを相手側の分散データベースクラスタシステムに送信する必要があることを考慮すると、この時、このフィルタタスクをも前記第1の一貫性フィルタモジュール22に渡すことができる。フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【0039】
実行がまだ終了されていない(すなわち、グローバルトランザクション未提出状態にある)データベース操作命令に対して、前記第1の一貫性フィルタモジュール22は、さらに、前記第1の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、次回に前記第1のデータ同期モジュール14から送信された、現在の第1のマスターデータベースに対応する前記第1の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第1の操作命令ブロックに付加してから前記第1の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【0040】
分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第1の一貫性フィルタモジュール22が、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、分散データベースクラスタシステムを改善してもよい。
【0041】
図3は本開示の実施例1に係る分散データベースクラスタシステムの第2の好適な構成を示す図である。
【0042】
図3に示すように、この分散データベースクラスタシステムはグローバルトランザクション管理モジュール32をさらに含み、前記グローバルトランザクション管理モジュール32はグローバルトランザクションを一意に識別可能なグローバルトランザクション識別IDを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成される。
【0043】
前記第1の同期クロックモジュール12は、各第1のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第1のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第1のマスターデータベースへ送信する前記クロック同期命令に載せるように構成される。
【0044】
前記第1の一貫性フィルタモジュール22は、現在の第1のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションIDに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第2の操作命令ブロックにパッケージングする。
【0045】
好適な実施形態として、データ同期処理を行う前に、相手側の分散データベースクラスタシステムの現在の分散データベースクラスタシステムとの同期位置を取得してもよい。この時、前記第1のデータ同期モジュール14は、さらに、相手側の分散データベースクラスタシステムからの同期位置要求情報を受信し(ここで、前記同期位置要求情報に前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている)、また、前記同期位置要求情報に載せられた前記同期位置に基づいて、各第1のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される。
【0046】
以上は分散データベースクラスタシステムがデータ同期の送信側である場合に各モジュールによって実行される機能を説明した。なお、分散データベースクラスタシステムは実際の応用においてその役柄がよく変更される必要があり、例えば分散データベースクラスタシステムが当時はマスター分散データベースクラスタシステムである可能性があり、この場合には、データ同期の送信側となる必要がある。しかし、故障した後、分散データベースクラスタシステムがバックアップ分散データベースクラスタシステムになってしまう可能性があり、この時、データ同期の受信側であるので、好適な実施形態として、分散データベースクラスタシステムの各モジュールはさらに以下の機能を有する。
【0047】
データ同期の受信側として、送信側からのデータ同期パケットを受信して、同期パケットの内容を実行してデータ同期を完成しなければならないが、この時、前記第1のデータ同期モジュール14は、さらに、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し(ここで、前記操作命令ブロックは第1の操作命令ブロック又は第2の操作命令ブロックを含む)、また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【0048】
例示的な実施形態として、前記第1のデータ同期モジュール14は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【0049】
例示的な実施形態として、前記第1のデータ同期モジュール14は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で1つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う。
【0050】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第1のデータ同期モジュール14は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【0051】
上述の最終的なグローバルな一貫性態様に記載されたように、相手側の分散データベースクラスタシステムは、業務によるクラスタ切り替えが行われる時にグローバルな一貫性フィルタを1回行う。前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、前記第1のデータ同期モジュール14は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第1の一貫性フィルタモジュール22を呼び出すように構成されてもよい。
【0052】
この例示的な実施形態において、前記第1の一貫性フィルタモジュール22は、 各第1のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第1のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、 直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第1のマスターデータベースに対しては、前記第1のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第1のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【0053】
例示的な実施形態として、前記第1の一貫性フィルタモジュール22は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第1のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第1のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例2】
【0054】
この実施例において他の分散データベースクラスタシステムを提供する。この分散データベースクラスタシステムをデータ同期の受信側とすることができ、もちろん、データ同期の送信側の機能も同時に与えられた場合にはデータ同期の送信側とすることもでき、この時、実施例1を参照することができる。
【0055】
図4は本開示の実施例2に係る分散データベースクラスタシステムの構成を示す図である。
【0056】
図4に示すように、この分散データベースクラスタシステムは、第2のデータ同期モジュール42と、複数の第2のデータベース群44とを含むことができる。ここで、前記複数の第2のデータベース群44のうちの各第2のデータベース群44は1つの第2のマスターデータベース(未図示)を含む。
【0057】
前記第2のデータ同期モジュール42は、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、
また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【0058】
ここで、前記操作命令ブロックは第1の操作命令ブロック又は第2の操作命令ブロックを含み、前記第1の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第2の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうち、フィルタ条件を満たすデータベース操作命令がパッケージングされている。ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【0059】
上記技術案によると、データ同期の受信側としての分散データベースクラスタシステムが前記第2のデータ同期モジュール42を介して、データ同期の送信側の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。
【0060】
送信された操作命令ブロックにおいて、第1の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【0061】
例示的な実施形態として、前記第2のデータ同期モジュール42は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【0062】
例示的な実施形態として、前記第2のデータ同期モジュール42は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で1つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される。
【0063】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第2のデータ同期モジュール42は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【0064】
図5は本開示の実施例2に係る分散データベースクラスタシステムの好適な構成を示す図である。
【0065】
最終的なグローバルな一貫性態様に対して、この分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを1回行うことができる。前記分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、図5に示すように、この分散データベースクラスタシステムは第2の一貫性フィルタモジュール52をさらに含むことができる。
【0066】
前記第2のデータ同期モジュール42は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第2の一貫性フィルタモジュール52を呼び出すように構成される。
【0067】
前記第2の一貫性フィルタモジュール52は、
各第2のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第2のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第2のマスターデータベースに対しては、前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【0068】
例示的な実施形態として、前記第2の一貫性フィルタモジュール52は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例3】
【0069】
本実施例においてデータ同期の送信側の処理プロセスを説明する。図6は本開示の実施例3に係るデータ同期方法を示すフローチャートである。
【0070】
このデータ同期方法は、複数の第1のデータベース群16を含む第1の分散データベースクラスタシステムに応用される。ここで、前記複数の第1のデータベース群16のうちの各第1のデータベース群16は1つの第1のマスターデータベースを含む。
【0071】
図6に示すように、前記方法は、
前記第1の分散データベースクラスタシステムが、クロック同期命令を定期的に送信するステップS602と、
前記第1の分散データベースクラスタシステムが、各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングして、前記第1の操作命令ブロックを送信するステップS604とを含む。
【0072】
上記技術案によると、第1の分散データベースクラスタシステムがクロック同期命令を定期的に送信し、データ同期中に、第1の分散データベースクラスタシステムの各マスターデータベースに記録された操作命令に対して、いずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【0073】
如何に、各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第1の操作命令ブロックにパッケージングするかについて、第1の分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【0074】
例示的な実施形態として、前記第1の分散データベースクラスタシステムが定期的に各第1のマスターデータベースに前記クロック同期命令を送信する。前記第1の分散データベースクラスタシステムが各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングする前に、前記方法は、前記第1のマスターデータベースが、受信したデータベース操作命令を前記第1のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むことをさらに含む。
【0075】
前記第1の分散データベースクラスタシステムが各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングすることは、前記第1の分散データベースクラスタシステムが各第1のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する2つのクロック同期命令の間に介在されたデータベース操作命令を前記第1の操作命令ブロックにパッケージングすることを含む。
【0076】
このように、このような方式によると、マスターデータベースが受信したクロック同期命令と普通のデータベース操作命令をすべて正常にログファイルに書き込み、前記第1の分散データベースクラスタシステムは、ログファイルを読み取って、ログにおけるクロック同期命令に応じて、データベース操作命令を分割し、隣接する2つのクロック同期命令の間に介在されたデータベース操作命令を前記第1の操作命令ブロックにパッケージングすることができる。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成すしてもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【0077】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはSQLであり、すなわち、同期クロックSQLステートメントをクロック同期命令として用いることができ、データベース操作命令もSQLステートメントを用いることができる。
【0078】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令を第1の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令記録方面でグローバルな一貫性を実現する。データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【0079】
そこで、この時、以下のような2つの処理方式(最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性)のうちの少なくとも1つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【0080】
<最終的なグローバルな一貫性態様>
この態様において、前記第1の分散データベースクラスタシステムが前記第1の操作命令ブロックを第2の分散データベースクラスタシステムに送信する。この時、第2の分散データベースクラスタシステムに送信する第1の操作命令ブロックは、マスターデータベースにおいて記録された、隣接する2つのクロック同期命令の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。
【0081】
第2の分散データベースクラスタシステムのデータ同期モジュールは正常に、そのデータベース操作命令を第2の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、第2の分散データベースクラスタシステムは業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを1回行う。
【0082】
この実施例は災害復旧システムにおいてRPO指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、RPOができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態については、実施例8を参照することができる。
【0083】
<リアルタイムなグローバルな一貫性態様>
このリアルタイムなグローバルな一貫性態様によると、前記第1の分散データベースクラスタシステムが前記第1の操作命令ブロックに対してグローバルな一貫性フィルタを行って、前記第1の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第2の操作命令ブロックにパッケージングして、前記第2の操作命令ブロックを第2の分散データベースクラスタシステムに送信する。
【0084】
ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第1の操作命令ブロックから実行がまだ終了されていない(すなわち、グローバルトランザクション未提出状態にある)データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第2の操作命令ブロックにパッケージングして第2の分散データベースクラスタシステムに送信し、これにより、第2の分散データベースクラスタシステムにおいて同期したのは、現在の第1の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【0085】
この実施例は、災害復旧システムにおいてRTO指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、RTOはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例8を参照することができる。
【0086】
増分データのサブスクリプション、増分データの抽出において第2の分散データベースクラスタシステムが受信したデータを選別する必要があることを考慮すると、特定の条件を満たすデータ対象(データベース、テーブル等)のみを第2の分散データベースクラスタシステムに送信する必要がある。したがって、フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記第2の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【0087】
実行がまだ終了されていない(すなわち、グローバルトランザクション未提出状態にある)データベース操作命令に対して、前記第1の分散データベースクラスタシステムは、前記第1の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、バッファした前記データベース操作命令を現在の第1のマスターデータベースに対応する次の第1の操作命令ブロックに付加してから前記次の第1の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【0088】
第1の分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第1の分散データベースクラスタシステムが、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、第1の分散データベースクラスタシステムを改善してもよい。前記第1の分散データベースクラスタシステムは、グローバルトランザクションを一意に識別可能なグローバルトランザクション識別IDを管理し、各グローバルトランザクションの状態とライフサイクルを記録する。
【0089】
前記第1の分散データベースクラスタシステムは、各第1のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第1のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第1のマスターデータベースへ送信する前記クロック同期命令に載せる。
【0090】
前記第1の分散データベースクラスタシステムが前記第1の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第1の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第2の操作命令ブロックにパッケージングすることは、前記第1の分散データベースクラスタシステムが、現在の第1のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションIDに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第2の操作命令ブロックにパッケージングする。
【0091】
好適な実施形態として、データ同期処理を行う前に、相手側の第2の分散データベースクラスタシステムの現在の第1の分散データベースクラスタシステムとの同期位置を取得することができる。前記第1の分散データベースクラスタシステムが各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングする前に、この方法は、前記第1の分散データベースクラスタシステムが、第2の分散データベースクラスタシステムからの同期位置要求情報を受信することをさらに含む。
【0092】
ここで、前記同期位置要求情報には前記第1の分散データベースクラスタシステムと前記第2の分散データベースクラスタシステムとの同期位置が載せられている。
【0093】
また、前記第1の分散データベースクラスタシステムが各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第1の操作命令ブロックにパッケージングすることは、前記第1の分散データベースクラスタシステムが、前記同期位置要求情報に載せられた前記同期位置に基づいて各第1のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行することを含む。
【0094】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例4】
【0095】
本実施例においてデータ同期の受信側の処理プロセスを説明する。図7は本開示の実施例4に係るデータ同期方法を示すフローチャートである。
【0096】
このデータ同期方法は、複数の第2のデータベース群44を含む第2の分散データベースクラスタシステムに適用されることができる。ここで、前記複数の第2のデータベース群44のうちの各第2のデータベース群44は1つの第2のマスターデータベースを含む。前記方法は、以下のステップS702、S704を含む。
【0097】
ステップS702において、前記第2の分散データベースクラスタシステムが、第1の分散データベースクラスタシステムから送信された操作命令ブロックを受信する。ここで、前記操作命令ブロックは第1の操作命令ブロック又は第2の操作命令ブロックを含み、前記第1の操作命令ブロックには前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第2の操作命令ブロックには前記第1の分散データベースクラスタシステムの各第1のマスターデータベースにおいて隣接する2つのクロック同期命令の間に記録されたデータベース操作命令のうちのフィルタ条件を満たすデータベース操作命令がパッケージングされており、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【0098】
ステップS704において、前記第2の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行する。
【0099】
上記技術案によると、データ同期の受信側としての第2の分散データベースクラスタシステムがデータ同期の開始側の第1の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。送信された操作命令ブロックにおいて、第1の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する2つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる
【0100】
例示的な実施形態として、前記第2の分散データベースクラスタシステムが受信した前記操作命令ブロックにおけるデータベース操作命令を実行することは、
前記第2の分散データベースクラスタシステムが、前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化することと、
前記第2の分散データベースクラスタシステムが、前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【0101】
例示的な実施形態として、前記第2の分散データベースクラスタシステムが前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことは、
前記第2の分散データベースクラスタシステムが、テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で1つのトランザクションを構成することと、
前記第2の分散データベースクラスタシステムが、異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【0102】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第2の分散データベースクラスタシステムが受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、前記第2の分散データベースクラスタシステムが、データベース操作命令の実行に成功した位置をファイルに永続化することをさらに含む。
【0103】
最終的なグローバルな一貫性態様に対して、この第2の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを1回行うことができる。
【0104】
前記第2の分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとし、前記第2の分散データベースクラスタシステムを前記第1の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記方法は、
前記第2の分散データベースクラスタシステムが、各第2のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第2のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定することと、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第2のマスターデータベースに対しては、前記第2の分散データベースクラスタシステムが、前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させることと、をさらに含むことができる。
【0105】
例示的な実施形態として、前記第2の分散データベースクラスタシステムが前記第2のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第2のマスターデータベースのデータをグローバルな一貫性の状態に復元させることは、
前記第2の分散データベースクラスタシステムが、前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行することと、
前記第2の分散データベースクラスタシステムが、前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行することと、を含む。
【0106】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例5】
【0107】
本実施例においてグローバルな一貫性を確保する分散データベースデータ同期装置及び方法を説明する。図8は本開示の実施例5に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
【0108】
図8に示すように、本開示による前記グローバルな一貫性を確保する分散データベースデータ同期装置は、以下の同期クロックモジュール82、グローバルトランザクション管理モジュール84、管理モジュール86、一貫性フィルタモジュール88を含む。
【0109】
分散データベースクラスタは、複数のデータベース群80からなり、各データベース群80は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、1つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばSQLインタフェース等の統一した標準インタフェースを提供する。
【0110】
同期クロックモジュール82は、定期的に分散データベース内の各マスターデータノードへSQLステートメントを送信するように構成され、載せられる情報としては、同期クロックモジュール82のタイムスタンプ及び現在のグローバルなアクティブトランザクションリストがある。
【0111】
グローバルトランザクション管理モジュール84は、分散型環境でのグローバルで一意的なトランザクションIDを統合管理するように構成され、グローバルトランザクションIDは、1つのグローバルトランザクションを一意に識別し、同時に、各グローバルトランザクションの状態とライフサイクルを記録する。クラスタ内の各トランザクションはいずれも、グローバルトランザクション管理モジュール84に一意的なトランザクションIDの構築を要求して、データ行に挿入する。
【0112】
管理モジュール86は、分散データベースクラスタのネットワーク構成情報を統合管理するように構成される。
【0113】
一貫性フィルタモジュール88は、グローバルのアクティブトランザクションIDを用いて、データに対してグローバルな一貫性フィルタを行い、フィルタルールに従って、所定のデータ対象(ベース、テーブル)を含むSQLステートメントをフィルタする。
【0114】
データ同期モジュール810は、分散データベース内のマスターデータベースノードのログを収集し、ログを解析してSQLステートメントを生成し、SQLステートメントブロックメッセージをパック圧縮して伝送し、SQLメッセージを永続化し、SQLの行を並列して再生するように構成される。
【0115】
以上の構成に基づいて、データ同期中に、まず主バックアップクラスタにおいて同期テーブルを構築し、同期テーブルには主に、タイムスタンプ情報とグローバルなアクティブトランザクションリストとの2つの情報が含まれる。同期クロックモジュール82は定期的にグローバルトランザクション管理モジュール84へ現在のアクティブトランザクションリストを要求して、グローバルトランザクション管理モジュール84の応答を得た後、マスタークラスタのすべてのマスターデータベースへ1つの挿入ステートメントを送信し、挿入して現在のアクティブグローバルトランザクションリストのタイムスタンプ及び現在のグローバルなアクティブトランザクションリスト情報を取得する。
【0116】
マスタークラスタのデータ同期モジュール810は、定期的にマスタークラスタ内のマスターデータノードのログファイルを収集し、バックアップクラスタの同期要求を受信した後、ログファイルに対してリバース解析を行って、SQLステートメントを生成し、同期クロックを用いて、SQLステートメントストリームをブロックに分割し、また、一貫性モジュールによって、SQLステートメントに対して一貫性と所定のルールのフィルタを行い、最後に、フィルタ後のSQLステートメントブロックを圧縮して送信キューに入れる。
【0117】
その後、スレッドを送信して、送信キューにおけるメッセージをバックアップクラスタのデータ同期モジュール810へ送信する。バックアップクラスタにおけるデータ同期モジュール810は、SQLブロックメッセージを受信した後、SQLメッセージを内部メモリの受信キューに入れて、書き込みスレッドを呼び出して、受信キューにおけるSQLステートメントブロックをファイルに永続化してから、再生スレッドを開始させてファイルにおけるステートメントブロックを幾つかのタスクに分割してワーカースレッドに渡して、データをバックアップクラスタのデータベースノードに同期させる。
【0118】
以上のプロセスによって、マスタークラスタ内の各データノードのログファイルをクラスタの統一時間でスライスし、スライスにおけるトランザクションは業務の違いに応じて、マスター/バックアップクラスタで統合処理を行って同時に成功するか又は同時に失敗する。バックアップクラスタでのデータがリアルタイムに一致するか、又は最終的に一致するように確保する。これに基づいて、バックアップクラスタは、スライス内のトランザクションをテーブル名と主キー値に応じて配布し、マルチのスレッドを並列に実行して、並列送信の不足によって再生性能が低下する問題を解決する。
【0119】
図9は本開示の実施例5に係るデータ同期方法の詳細な作業フローチャートである。
【0120】
図9に示すように、このグローバルな一貫性を確保する分散データベースデータ同期方法は以下のステップS902、S904、S906、S908、S910、S912、S914、S916、S918を含む。
【0121】
ステップS902において、マスタークラスタのデータ同期モジュール810がオンされると、初期化して定期的にメタデータタスクスレッドを取得して、データ同期モジュール810に接続されるデータベースノードがデータベース群80におけるマスターノードであるように確保する。スレッドを開始させて、定期的に管理ノードへ状態を報知する。バックアップクラスタのデータ同期モジュール810がオンされると、構成ファイルに応じて初期化してワーカースレッドプールを並行送信し、初期化メッセージをスレッドに書き込み、SQL再生スレッド及びガベージコレクションスレッドが開始されると、まずマスタークラスタのデータ同期モジュール810にログ同期位置を送信する。
【0122】
ステップS904において、マスタークラスタのデータ同期モジュール810は、定期的に取得/同期クラスタネットワーク構成データ要求を管理モジュール86に送信し、管理モジュール86の応答を受信した後、内部メモリにおけるデータと比較する。データが空きであると、現在のデータによって内部メモリの構造を初期化し、データがあると、データベース群80順でデータが一致するか否かを比較し、一致すると処理せず、一致しないと、データベースノードに接続されたか否かに応じて、直ちにデータ情報を更新するかを決める。
【0123】
ステップS906において、マスタークラスタのデータ同期モジュール810がオンされてクラスタネットワーク構成情報を同期させた後、バックアップクラスタのデータ同期モジュール810による同期位置要求情報のプッシュ通知を待機し、同期位置情報を受信した後、現在の位置に従って、新規のタスクを開始する。
【0124】
ステップS908において、マスタークラスタのデータ同期モジュール810が、同期位置に従ってデータベースの接続を起こし、ログファイルを解析するために内部メモリを初期化し、データベースからプッシュ通知されたログ情報を循環受信し、その後、実施例6に示すSQLステートメントのブロック分割プロセスに移行する。実際の配置に応じて、SQLステートメントブロックを一貫性フィルタモジュール88に送信する。
【0125】
ステップS910において、SQLステートメントブロックに対してグローバルな一貫性フィルタとルールによるフィルタを行う。具体的なプロセスについては実施例8の図12又は図13を参照することができる。
【0126】
ステップS912において、マスタークラスタのデータ同期モジュール810は、バックアップクラスタのデータ同期モジュール810から送信されたSQLステートメントブロック要求を受信した時、まずメッセージを再送信する必要があるか否かを判断し、再送信する必要があれば、直接送信キューのメッセージを送信し、再送信する必要がなければ、送信バッファキューからメッセージを選択してバックアップクラスタのデータ同期モジュール810に送信する。
【0127】
ステップS914において、バックアップクラスタのデータ同期モジュール810はメッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行う。その後、SQLステートメントブロックメッセージが書き込みキューに入れられ、書き込みスレッドによって、メッセージを書き込みキューからSQL再生ファイルに永続化し、その後、受信キューに詰まっているメッセージがあるか否かを検査し、あれば、中断されたスレッドを覚醒し、なければ、現在のメッセージ群が終了したか否かを判断し、データ同期位置を更新した後、書き込みキューを循環読み取りする。
【0128】
ステップS916において、バックアップクラスタデータ同期モジュール810のSQL再生スレッドが、SQL再生ファイルを解析し、2つの同期クロック間のトランザクションステートメントブロックを解析して行単位で分割し、具体的な方法については実施例7に記載のSQL行並列処理(parallel processing of SQL statement lines)のプロセスを参照することができる。ステートメントブロックの行並列による再生に成功した後、再生に異常が発生して回復する際に用いるように、データ再生の位置をファイルに永続化する。
【0129】
ステップS918において、バックアップクラスタのデータ同期モジュール810のデータクリーニングスレッドが、保存時間を超えており且つ再生に成功したデータを定期的にクリーニングする。
【0130】
上述のように、この方法によると、同期クロックモジュール82によって、クラスタ全体に統一されたクロックを提供して、データを統一にスライス処理する。一貫性フィルタモジュール88によって、スライスされたデータに対してグローバルな一貫性フィルタを行うとともに、災害復元指標RPO(復元点目標、すなわちシステムが最大にどの程度のデータを失うことを許容するか)とRTO(復元時間目標、すなわち、システムが災害発生から復元まで実行される時間)の要求及び業務のデータフィルタと抽出に対するニーズを考慮して、同期クロックモジュール82、グローバルトランザクション管理モジュール84、一貫性フィルタモジュール88、データ同期モジュール810をさまざまに配列すると、1都市マルチタスク、遠隔地災害復旧、データのサブスクリプション及びデータの抽出等のさまざまな業務の状況を効率的に満たすことができるとともに、分散型環境でのデータクラスタ間のグローバルな一貫性を確保し、遠隔地にあるクラスタが急速に業務を引き取ることができ、非常に特別なハイライト機能であり、分散データベースの金融分野、インターネット分野、教育分野等での普及のために良好な促進作用を果たす。
【実施例6】
【0131】
図10は本開示の実施例6に係るSQLステートメント分割パケット(splitting and encapsulating of SQL statements)を
示す図である。
【0132】
図10に示すように、同期クロックモジュール82は定期的にデータベースへ同期クロックSQLステートメントを送信する。対応するステートメントは最終的にデータベースログに置かれる。
【0133】
データ同期モジュール810は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、同期クロックSQLステートメントを用いてアプリケーションSQLに対して分割を行い、具体的な方法としては、2つの同期クロックSQL間のすべてのSQLを1つのメッセージブロックと見なして、1つのステートメントブロックにパッケージングすることである。
【0134】
ステートメントブロックをフィルタした後、パックし圧縮して、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからSQLステートメントメッセージを取り出して相手側データ同期モジュール810へ送信する。
【実施例7】
【0135】
図11は本開示の実施例7に係るSQLステートメント行並列処理を示すフローチャートである。
【0136】
図11に示すように、SQLステートメントブロックはデータ行によって、複数のトランザクションに分割され、具体的な方法は以下の通りである。
【0137】
テーブル名と主キーに応じてデータ行を選択し、同一のデータ行のSQLは前後順で1つのトランザクションを構成し、異なるデータ行のSQLを異なるワーカースレッドに渡して処理させる。
【0138】
ワーカースレッドは再生に成功するように1組のSQLステートメントを並列処理し、その後、次のSQLステートメントブロックを読み取る。
【実施例8】
【0139】
本実施例においてリアルタイムなグローバルな一貫性フィルタと最終的なグローバルな一貫性フィルタとの2種類のフィルタ方式の具体的なプロセスを説明する。
【0140】
図12は本開示の実施例8に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【0141】
ステップS1202において、まず、同期テーブルから直近の記録を探す。
【0142】
ステップS1204において、この記録から直近に同期させた際のグローバルなアクティブトランザクションリストを取得する。
【0143】
ステップS1206において、グローバルなアクティブトランザクションIDを用いて、SQLステートメントブロックに対してフィルタを行う。
【0144】
ステップS1208において、ステートメントブロックにおけるグローバルな提出済のSQLステートメントに対して、配置データ対象フィルタルールがあるか否かを判定し、あれば、ステップS1210を実行し、なければ送信キューを提出する。
【0145】
ステップS1210において、フィルタルールに従って、係るSQLステートメントをフィルタして、送信キューを提出する。
【0146】
ステップS1212において、グローバルな未提出のSQLステートメントに対して、バッファキューに格納する。
【0147】
ステップS1214において、次の組のステートメントのフィルタを行う前に、まず、バッファキューにおけるSQLステートメントをステートメントブロックに合併する。
【0148】
図13は本開示の実施例8に係る最終的なグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【0149】
ステップS1302において、マスタークラスタとバックアップクラスタとの切り替えを行う必要があると、バックアップクラスタが、すべてのデータノードの同期テーブルから直近の同期クロック記録を探し出す。
【0150】
ステップS1304において、すべての直近の同期クロック記録を比較して、タイムスタンプの最も早い同期クロック記録時間(T0)を探し出して切り替えの一致点とする。
【0151】
ステップS1306において、時刻T0よりも後に同期クロックメッセージを受信したすべてのデータノードを探し出す。
【0152】
ステップS1308において、ログファイルを解析して、時刻T0へ戻るすべてのリバースSQLステートメントを生成し、SQLステートメントを実行して、ノードデータを時刻T0の同期クロックメッセージを受信した時刻にロールバックし、これにより、クラスタ内のすべてのノードのデータがいずれも1つの時点(時刻T0)に揃えられる。
【0153】
ステップS1310において、同期クロックテーブルにおけるこの時点(T0)の現在のグローバルなアクティブトランザクションIDを用いて、バックアップクラスタデータノードのログファイルにおける対応するSQLステートメントをフィルタし、これらのステートメントは単一の点で提出されたが、グローバルではトランザクション未提出状態にある。これらのトランザクションはグローバルなアクティブ状態にある。
【0154】
ステップS1312において、リバースSQLステートメントを生成して実行し、最終的に分散データベースバックアップクラスタがグローバルな一貫性の状態になる。
【0155】
以下、実施例9乃至12において本開示の方法を異なる状況に適用した場合の具体的な処理プロセスを説明する。
【実施例9】
【0156】
この実施例において分散データベースの非同期データの同期高性能モード(すなわち、最終的なグローバルな一貫性態様)を説明する。
【0157】
図14は本開示の実施例9に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【0158】
図14に示すように、この実施例において2つのクラスタシステムがあり、マスター分散データベースクラスタによりデータをバックアップクラスタに同期させ、2つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行わず、業務によるクラスタの切り替えが行われる時のみにグローバルな一貫性フィルタを1回行う。分散データベースの非同期データの同期高性能モードでの処理プロセスは以下のステップを含む。
【0159】
1.同期クロックモジュール82は、データベースへ同期SQLステートメントを送信する。
【0160】
2.データベースは、定期的にログファイルをデータ同期モジュール810にプッシュ通知する。
【0161】
3.データ同期モジュール810は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、2つの同期SQL間のすべてのSQLを1つのメッセージブロックと見なして、1つのステートメントブロックにパッケージングする。SQLステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからSQLステートメントメッセージを取り出して相手側データ同期モジュール810へ送信する。
【0162】
4.バックアップクラスタのデータ同期モジュール810は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、SQLステートメントブロックメッセージがSQL再生ファイルに永続化され、その後、SQL再生スレッドによってSQL再生ファイルを解析し、2つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、SQLステートメントを並列再生して、データ同期の目的を達成する。
【0163】
5.一貫性フィルタモジュール88は、マスタークラスタとバックアップクラスタとの切り替えを行う必要がある場合のみオンされる。フィルタステップについては図13を参照することができる。
【0164】
この実施例は災害復旧システムにおいてRPO指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、RPOができるだけ小さくなるように確保する。
【実施例10】
【0165】
この実施例において分散データベースクラスタのデータ同期高性能モード(すなわち、リアルタイムなグローバルな一貫性態様)を説明する。
【0166】
図15は本開示の実施例10に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【0167】
図15に示すように、この実施例において2つのデータベースクラスタシステムがあり、マスターデータベースクラスタによりデータをバックアップクラスタに同期させ、2つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行い、これにより、バックアップクラスタに同期されたデータが常に一貫状態にある。分散データベースクラスタのデータ同期高性能モードでの処理プロセスは以下のステップを含む。
【0168】
1.同期クロックモジュール82が、データベースへ同期SQLステートメントを送信する。
【0169】
2.データベースは、定期的にログファイルをデータ同期モジュール810にプッシュ通知する。
【0170】
3.データ同期モジュール810は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、2つの同期SQL間のすべてのSQLを1つのメッセージブロックと見なして、1つのステートメントブロックにパッケージングする。
【0171】
4.一貫性フィルタモジュール88は、グローバルなアクティブトランザクションIDを用いて、このステートメントブロックにおけるグローバルトランザクション提出済状態にあるステートメントをフィルタし、具体的なプロセスについては図12を参照することができる。
【0172】
5.グローバルトランザクション提出済のSQLステートメントブロックをパックし圧縮した後、送信バッファキュー中に入れ、その後、送信スレッドによってバッファキューからSQLステートメントメッセージを取り出して相手側データ同期モジュール810へ送信する。
【0173】
6.バックアップクラスタのデータ同期モジュール810は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、SQLステートメントブロックメッセージがSQL再生ファイルに永続化され、その後、SQL再生スレッドによってSQL再生ファイルを解析し、2つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、SQLステートメントを並列再生して、データ同期の目的を達成する。毎回同期されるSQLステートメントブロックはいずれもグローバルで一貫するので、バックアップクラスタデータベース内のデータが常にグローバルな一貫性の状態にある。
【0174】
この実施例は、災害復旧システムにおいてRTO指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、RTOはゼロであることができる。
【実施例11】
【0175】
この実施例において分散データベースに基づいて増分データをサブスクリプションする場合のデータ同期(準リアルタイムなバックアップ)を説明する。
【0176】
図16は本開示の実施例11に係る分散データベースを準リアルタイムにバックアップするシステムの構成を示す図である。
【0177】
図16に示すように、この実施例において2つのデータベースクラスタがあり、その中の遠隔データベースクラスタをサブスクリプション業務システムクラスタのデータベースクラスタとし、2つのクラスタのネットワーク構成は一致しないこともできる。分散データベースに基づいて増分データをサブスクリプションする場合の準リアルタイムなバックアッププロセスは以下のステップを含む。
【0178】
1.同期クロックモジュール82は、定期的にデータベースへ同期SQLステートメントを送信する。
【0179】
2.データベースは、定期的にログファイルをデータ同期モジュール810にプッシュ通知する。
【0180】
3.データ同期モジュール810は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、2つの同期SQL間のすべてのSQLを1つのメッセージブロックと見なして、1つのステートメントブロックにパッケージングする。
【0181】
4.一貫性フィルタモジュール88は、グローバルなアクティブトランザクションIDを用いて、このステートメントブロックにおけるグローバルなアクティブSQLステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時に、ステートメントブロックに合併する。このようにフィルタされたSQLステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、サブスクリプションルールに従って、係るデータ対象(データベース、テーブル)にフィルタを行う。
【0182】
5.フィルタ後のグローバルトランザクション提出済のSQLステートメントブロックに対して、パックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからSQLステートメントメッセージを取り出して相手側データ同期モジュール810へ送信する。
【0183】
6.遠隔クラスタのデータ同期モジュール810は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、SQLステートメントブロックメッセージがSQL再生ファイルに永続化され、その後、SQL再生スレッドによってSQL再生ファイルを解析し、2つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、クラスタのネットワーク構成状況に応じて、SQLステートメントを並列再生して、準リアルタイムにデータをバックアップする目的を実現する。
【実施例12】
【0184】
この実施例において分散データベースの増分データに基づくデータ同期(データ抽出)を説明する。
【0185】
図17は本開示の実施例12に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【0186】
図17に示すように、この実施例においてデータを発生するためのオンライントランザクション処理システム(OLTP)と主にデータ分析業務を行うオンライン分析システム(OLAP)やデータウェアハウスシステム(BI)との2種類の業務システムがあり、図面においてはデータをオンラインで分析するビッグデータプラットフォーム(例えば、Hadoopに基づくデータウェアハウス工具Hive、構造化データを処理するための汎用のクラスタ計算フレームワーク(Spark)素子Spark SQL、Hadoopの分散ファイルシステム(Hadoop Distribute File System、HDFSと略称)等を含む)を例にする。
【0187】
OLTPシステムは、ビッグデータプラットフォームが分析して発掘するように、データをビッグデータプラットフォームに導入する。分散データベース増分データに基づくデータ抽出は以下のステップを含む。
【0188】
1.同期クロックモジュール82は、定期的にデータベースへ同期SQLステートメントを送信する。
【0189】
2.OLTPタイプ業務データベースクラスタは、定期的にログファイルをデータ同期モジュール810にプッシュ通知する。
【0190】
3.データ同期モジュール810は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、2つの同期SQL間のすべてのSQLを1つのメッセージブロックと見なして、1つのステートメントブロックにパッケージングする。
【0191】
4.一貫性フィルタモジュール88は、グローバルなアクティブトランザクションIDを用いて、このステートメントブロックにおけるグローバルなアクティブSQLステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時にステートメントブロックに合併する。このようにフィルタされたSQLステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、データ抽出ルールに従って、係るデータ対象(データベース、テーブル)にフィルタを行う。
【0192】
5.抽出された後のグローバルトランザクション提出済のSQLステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからSQLステートメントメッセージを取り出してビッグデータプラットフォーム側のデータ同期モジュール810へ送信する。
【0193】
6.ビッグデータプラットフォーム側のデータ同期モジュール810は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、SQLステートメントブロックメッセージがSQL再生ファイルに永続化され、その後、SQL再生スレッドによってSQL再生ファイルを解析し、2つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ビッグデータプラットフォームのデータ計算レイヤに並列再生して、計算レイヤによってSQL計算を行って、データ計算結果をビッグデータプラットフォームの記憶システムに更新する。
【0194】
上述のように、本開示による分散データベースクラスタシステムとデータ同期方法によると、分散データベースクラスタの教育、金融、政府及び企業、インターネットなどの分野での応用を拡張し、システム資源の投入を節約し、システムの性能を向上させ、データの一貫性を確保し、ユーザの使用体験を向上させることができる。分散データベースの普及のために良好な模範的な役割を果たすことになる。
【0195】
上述した本開示の各モジュール又は各ステップを汎用の計算装置によって実現することができ、1つの計算装置に集中させることができ、又は複数の計算装置からなるネットワークに分布させることもでき、また、計算装置が実行可能なプログラムコードによって実現してそれを記憶装置に記憶して計算装置に実行させることもでき、場合によって、図示又は説明したステップをここに示す順とは異なる順で実行することもでき、又はそれぞれ集積回路モジュールに制作し、又はその中の複数のモジュール又はステップを1つの集積回路モジュールとすることができることを当業者は理解できる。このように、本開示は特定のハードウェアとソフトウェアとの組合せに限定されない。
【0196】
以上は、本開示の好適な実施例に過ぎず、本開示を限定するものではなく、当業者であれば本開示にさまざまな修正や変形が可能である。本開示の原則内でのすべての修正、同等置換、改良などはいずれも本開示の保護範囲内に含まれる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17