(57)【要約】  本開示は、分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。分散データベースクラスタシステムは、第１の同期クロックモジュールと、第１のデータ同期モジュールと、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群とを含み、前記第１の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、前記第１のデータ同期モジュールは、各第１のマスターデータベースにおいて前記第１の同期クロックモジュールから送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして前記第１の操作命令ブロックを送信するように構成される。本開示によると、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保する。
2021513715.tif 000002
【特許請求の範囲】
【請求項１】
第１の同期クロックモジュールと、第１のデータ同期モジュールと、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群とを含む分散データベースクラスタシステムであって、
前記第１の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、
前記第１のデータ同期モジュールは、各第１のマスターデータベースにおいて前記第１の同期クロックモジュールから送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして、前記第１の操作命令ブロックを送信するように構成される、分散データベースクラスタシステム。
【請求項２】
前記第１の同期クロックモジュールは、定期的に各第１のマスターデータベースへ前記クロック同期命令を送信するように構成され、
前記第１のマスターデータベースは、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成され、
前記第１のデータ同期モジュールは、各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される、請求項１に記載の分散データベースクラスタシステム。
【請求項３】
前記第１のデータ同期モジュールは、前記第１の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される、請求項１又は請求項２に記載の分散データベースクラスタシステム。
【請求項４】
第１の一貫性フィルタモジュールをさらに含み、
前記第１のデータ同期モジュールは、前記第１の操作命令ブロックを前記第１の一貫性フィルタモジュールに送信するように構成され、
前記第１の一貫性フィルタモジュールは、前記第１のデータ同期モジュールから送信された前記第１の操作命令ブロックを受信し、前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングし、前記第２の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される、請求項１又は請求項２に記載の分散データベースクラスタシステム。
【請求項５】
前記フィルタ条件は、前記データベース操作命令が前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含む、請求項４に記載の分散データベースクラスタシステム。
【請求項６】
前記第１の一貫性フィルタモジュールは、さらに、
前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、次回に前記第１のデータ同期モジュールから送信された、現在の第１のマスターデータベースに対応する前記第１の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第１の操作命令ブロックに付加してから前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行うように構成される、請求項４又は請求項５に記載の分散データベースクラスタシステム。
【請求項７】
グローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成されるグローバルトランザクション管理モジュールをさらに含み、
前記第１の同期クロックモジュールは、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せるように構成され、
前記第１の一貫性フィルタモジュールは、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令を、グローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする、請求項４乃至請求項６のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項８】
前記第１のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムからの同期位置要求情報であって、前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている同期位置要求情報を受信し、
前記同期位置要求情報に載せられた前記同期位置に基づいて、各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される、請求項１に記載の分散データベースクラスタシステム。
【請求項９】
前記第１のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムから送信された、第１の操作命令ブロック又は第２の操作命令ブロックを含む操作命令ブロックを受信し、
受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される、請求項１乃至請求項８のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項１０】
前記第１のデータ同期モジュールは、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される、請求項９に記載の分散データベースクラスタシステム。
【請求項１１】
前記第１のデータ同期モジュールは、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項１０に記載の分散データベースクラスタシステム。
【請求項１２】
前記第１のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項９乃至請求項１１のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項１３】
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合、
前記第１のデータ同期モジュールは、
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第１の一貫性フィルタモジュールを呼び出すように構成され、
前記第１の一貫性フィルタモジュールは、
各第１のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第１のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第１のマスターデータベースに対しては、前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項９乃至請求項１１のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項１４】
前記第１の一貫性フィルタモジュールは、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項１３に記載の分散データベースクラスタシステム。
【請求項１５】
相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第２のデータ同期モジュールと、
それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群と、を含む分散データベースクラスタシステムであって、
前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされている、分散データベースクラスタシステム。
【請求項１６】
前記第２のデータ同期モジュールは、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される、請求項１５に記載の分散データベースクラスタシステム。
【請求項１７】
前記第２のデータ同期モジュールは、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項１６に記載の分散データベースクラスタシステム。
【請求項１８】
前記第２のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項１５乃至請求項１７のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項１９】
第２の一貫性フィルタモジュールをさらに含み、
前記第２のデータ同期モジュールは、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第２の一貫性フィルタモジュールを呼び出すように構成され、
前記第２の一貫性フィルタモジュールは、
各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項１５乃至請求項１７のうちのいずれか１項に記載の分散データベースクラスタシステム。
【請求項２０】
前記第２の一貫性フィルタモジュールは、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項１９に記載の分散データベースクラスタシステム。
【請求項２１】
それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群を含む第１の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信することと、を含む、データ同期方法。
【請求項２２】
前記第１の分散データベースクラスタシステムがクロック同期命令を定期的に送信することは、前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースへ定期的に前記クロック同期命令を送信することを含み、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、
前記第１のマスターデータベースが、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むことをさらに含み、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングすることを含む、請求項２１に記載の方法。
【請求項２３】
前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックを送信することは、
前記第１の分散データベースクラスタシステムが、前記第１の操作命令ブロックを第２の分散データベースクラスタシステムに送信することを含む、請求項２１又は請求項２２に記載の方法。
【請求項２４】
前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックを送信することは、
前記第１の分散データベースクラスタシステムが、前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングし、前記第２の操作命令ブロックを第２の分散データベースクラスタシステムに送信することを含む、請求項２１又は請求項２２に記載の方法。
【請求項２５】
前記フィルタ条件は、前記データベース操作命令が前記第２の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含む、請求項２４に記載の方法。
【請求項２６】
前記第１の分散データベースクラスタシステムは、前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、バッファした前記データベース操作命令を現在の第１のマスターデータベースに対応する次の第１の操作命令ブロックに付加してから前記次の第１の操作命令ブロックに対してグローバルな一貫性フィルタを行うことをさらに含む、請求項２４又は請求項２５に記載の方法。
【請求項２７】
前記第１の分散データベースクラスタシステムが、グローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録することと、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せることと、をさらに含み、
前記第１の分散データベースクラスタシステムが、前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングすることを含む、請求項２４乃至２６のうちのいずれか１項に記載の方法。
【請求項２８】
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、前記第１の分散データベースクラスタシステムが、第２の分散データベースクラスタシステムからの同期位置要求情報であって、前記第１の分散データベースクラスタシステムと前記第２の分散データベースクラスタシステムの間の同期位置が載せられている同期位置要求情報を受信することをさらに含み、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、前記同期位置要求情報に載せられた前記同期位置に基づいて、各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行することを含む、請求項２１に記載の方法。
【請求項２９】
それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群を含む第２の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第１の操作命令ブロック、又は前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第２の操作命令ブロックを含む操作命令ブロックを受信することと、
前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含む、データ同期方法。
【請求項３０】
前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することは、
前記第２の分散データベースクラスタシステムが、前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化することと、
前記第２の分散データベースクラスタシステムが、前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことと、を含む、請求項２９に記載の方法。
【請求項３１】
前記第２の分散データベースクラスタシステムが、前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことは、
前記第２の分散データベースクラスタシステムが、テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成することと、
前記第２の分散データベースクラスタシステムが、異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行うことと、を含む、請求項３０に記載の方法。
【請求項３２】
前記第２の分散データベースクラスタシステムが受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、
前記第２の分散データベースクラスタシステムが、データベース操作命令の実行に成功した位置をファイルに永続化することをさらに含む、請求項２９乃至請求項３１のうちのいずれか１項に記載の方法。
【請求項３３】
前記第２の分散データベースクラスタシステムを前記第１の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、
前記第２の分散データベースクラスタシステムが、各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定することと、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２の分散データベースクラスタシステムが、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることと、をさらに含む、請求項２９乃至請求項３１のうちのいずれか１項に記載の方法。
【請求項３４】
前記第２の分散データベースクラスタシステムが、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることは、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行することと、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行することと、を含む、請求項３３に記載の方法。
【請求項３５】
コンピュータープログラムが記憶された記憶媒体であって、
前記コンピュータープログラムは、実行されると、請求項２１乃至請求項３４のうちのいずれか１項に記載の方法を実行するように構成される、記憶媒体。
【請求項３６】
メモリとプロセッサとを含む電子機器であって、
前記メモリにコンピュータープログラムが記憶され、前記プロセッサは前記コンピュータープログラムを実行することで請求項２１乃至請求項３４のうちのいずれか１項に記載の方法を実行するように構成される、電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベース分野に関し、特に、分散データベースクラスタシステム、データ同期方法及び記憶媒体に関する。
【背景技術】
【０００２】
近年、例えばＭｙＳＱＬ（ＳＱＬはＳｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ、すなわち、構造化問合せ言語を表す）等のオープンソースデータベース製品を注目し利用する組織が増えている。業務及び技術の発展に伴い、データベース技術もクラスタ化へ発展している。クラスタ間のデータ同期技術は災害復旧の基礎技術として、２つのデータセンター間の効率的で一貫性のあるデータ同期方法の研究は重要で深遠な意義を持つ。
【０００３】
現在、分散データベース分野において、データクラスタ間のデータ同期は、主に、ポイントツーポイントのデータ移行に依頼する。しかし、サーバーやネットワークの差異等のさまざまな要因によって、クラスタ間の異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現することができないおそれがある。例えば、マスタークラスタ内のＡとＢとの２つのデータノードがデータをバックアップクラスタ内のＡ’とＢ’との２つのデータノードに同期させ、ある時刻において、Ａ’はＡの時刻Ｔ０でのデータに同期したが、Ｂ’はＢの時刻Ｔ１でのデータに同期した。
【０００４】
この時に切り替えが行われると、業務をバックアップクラスタに移行しなければならないが、バックアップクラスタのデータがグローバルな一貫を保っていないので、業務を直ちにバックアップクラスタに切り替えることができない。そして、基準となる時点又はクロックがないので、業務データを一貫する時点に復元させることもできない。
【０００５】
マスターデータベースクラスタとバックアップデータベースクラスタとの間の切り替え状況以外に、例えば増分データのサブスクリプション、増分データの抽出を含むが、これらに限定されてはいないデータ同期に係る他の状況においても、クラスタ間の異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題がある。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本開示の実施例によると、少なくとも既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決する分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。
【課題を解決するための手段】
【０００７】
本開示の一実施例によると、第１の同期クロックモジュールと、第１のデータ同期モジュールと、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群とを含み、前記第１の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、前記第１のデータ同期モジュールは、各第１のマスターデータベースにおいて前記第１の同期クロックモジュールから送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして前記第１の操作命令ブロックを送信するように構成される分散データベースクラスタシステムを提供する。
【０００８】
本開示の他の実施例によると、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第２のデータ同期モジュールと、それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群と、を含み、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされている分散データベースクラスタシステムを提供する。
【０００９】
本開示の他の一実施例によると、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群を含む第１の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングして前記第１の操作命令ブロックを送信することと、を含むデータ同期方法を提供する。
【００１０】
本開示の他の一実施例によると、それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群を含む第２の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第１の操作命令ブロック、又は前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第２の操作命令ブロックを含む操作命令ブロックを受信することと、前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含むデータ同期方法を提供する。
【００１１】
本開示の他の一実施例によると、コンピュータープログラムが記憶された記憶媒体であって、前記コンピュータープログラムは、実行されると、上述したいずれかの方法実施例におけるのステップを実行するように構成される記憶媒体を提供する。
【００１２】
本開示の他の一実施例によると、メモリとプロセッサとを含む電子機器であって、前記メモリにコンピュータープログラムが記憶され、前記プロセッサは前記コンピュータープログラムを実行することで上述したいずれかの方法実施例におけるステップを実行するように構成される電子機器を提供する。
【発明の効果】
【００１３】
本開示によると、分散データベースクラスタシステムの内部でクロック同期命令を定期的に送信し、データ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【図面の簡単な説明】
【００１４】
ここで説明する図面は本開示を一層理解させるためのもので、本願の一部を構成し、本開示に示す実施例及びその説明は本開示を解釈するものであり、本開示を不当に限定するものではない。
【図１】本開示の実施例１に係る分散データベースクラスタシステムの構成を示す図である。
【図２】本開示の実施例１に係る分散データベースクラスタシステムの第１の好適な構成を示す図である。
【図３】本開示の実施例１に係る分散データベースクラスタシステムの第２の好適な構成を示す図である。
【図４】本開示の実施例２に係る分散データベースクラスタシステムの構成を示す図である。
【図５】本開示の実施例２に係る分散データベースクラスタシステムの好適な構成を示す図である。
【図６】本開示の実施例３に係るデータ同期方法を示すフローチャートである。
【図７】本開示の実施例４に係るデータ同期方法を示すフローチャートである。
【図８】本開示の実施例５に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
【図９】本開示の実施例５に係るデータ同期方法の詳細な作業フローチャートである。
【図１０】本開示の実施例６に係るＳＱＬステートメント分割パケットを示す図である。
【図１１】本開示の実施例７に係るＳＱＬステートメント行並列処理を示すフローチャートである。
【図１２】本開示の実施例８に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートである。
【図１３】本開示の実施例８に係る最終的なグローバルな一貫性フィルタを示すフローチャートである。
【図１４】本開示の実施例９に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【図１５】本開示の実施例１０に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【図１６】本開示の実施例１１に係る分散データベースを準リアルタイムにバックアップするシステム構成を示す図である。
【図１７】本開示の実施例１２に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【発明を実施するための形態】
【００１５】
分散データベースクラスタシステムは複数のデータベース群からなり、各データベース群は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、１つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばＳＱＬインタフェース等の統一した標準インタフェースを提供する。
【００１６】
例えばデータクラスタ間のデータ同期、増分データのサブスクリプション、増分データの抽出などの分散データベースクラスタシステム間の同期について、既存技術におけるデータ同期態様によると、グローバルな一貫性を提供できない問題や欠陥が存在する場合が多い。
【００１７】
上記問題について、本開示において分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。以下、図面を参照しつつ実施例とともに本開示を詳しく説明する。なお、矛盾しない限り、本願の実施例及び実施例の特徴を互いに組み合わせることができる。
【００１８】
なお、本開示の明細書、特許請求の範囲及び上記図面における「第１」、「第２」等の用語は、特定の順又は前後順を限定するものではなく、類似する対象を区別するためものである。
【実施例１】
【００１９】
この実施例において分散データベースクラスタシステムを提供する。図１は本開示の実施例１に係る分散データベースクラスタシステムの構成を示す図である。
【００２０】
図１に示すように、この分散データベースクラスタシステムは、第１の同期クロックモジュール１２と、第１のデータ同期モジュール１４と、複数の第１のデータベース群１６と、を含むことができる。ここで、前記複数の第１のデータベース群１６のうちの各第１のデータベース群１６は１つの第１のマスターデータベース（未図示）を含む。
【００２１】
前記第１の同期クロックモジュール１２は、クロック同期命令を定期的に送信するように構成される。
【００２２】
前記第１のデータ同期モジュール１４は、各第１のマスターデータベースにおいて前記第１の同期クロックモジュール１２から送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される。
【００２３】
上記技術案によると、分散データベースクラスタシステムにおいて第１の同期クロックモジュール１２がクロック同期命令を定期的に送信し、第１のデータ同期モジュール１４はデータ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００２４】
第１のデータ同期モジュール１４が、如何に、各第１のマスターデータベースにおいて前記第１の同期クロックモジュール１２から送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第１の操作命令ブロックにパッケージングするかについて、分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【００２５】
例示的な実施形態として、前記第１の同期クロックモジュール１２は、定期的に各第１のマスターデータベースへ前記クロック同期命令を送信するように構成される。前記第１のマスターデータベースは、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成される。前記第１のデータ同期モジュール１４は、各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される。
【００２６】
このように、このような態様によると、マスターデータベースにおいて受信したクロック同期命令と普通のデータベース操作命令とをいずれも正常にログファイルに書き込み、前記第１のデータ同期モジュール１４はログファイルを読み取って、ログにおけるクロック同期命令に基づいてデータベース操作命令を分割し、２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングする。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成してもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【００２７】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはＳＱＬであり、すなわち、同期クロックＳＱＬステートメントをクロック同期命令として用いることができ、データベース操作命令もＳＱＬステートメントを用いることができる。
【００２８】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令の記録方面でグローバルな一貫性を実現する。
【００２９】
データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【００３０】
そこで、この時、以下のような２つの処理方式（最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性）のうちの少なくとも１つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【００３１】
＜最終的なグローバルな一貫性態様＞
この態様において、前記第１のデータ同期モジュール１４は、前記第１の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。この時、相手側の分散データベースクラスタシステムに送信する第１の操作命令ブロックは、マスターデータベースにおいて記録された、２つの同期クロック信号の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。相手側の分散データベースクラスタシステムのデータ同期モジュールは、それを正常に相手側の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、相手側の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを行う。
【００３２】
この実施例は、災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態について、は実施例８を参照することができる。
【００３３】
＜リアルタイムなグローバルな一貫性態様＞
このリアルタイムなグローバルな一貫性態様によると、分散データベースクラスタシステムに第１の一貫性フィルタモジュール２２が追加される。図２は本開示の実施例１に係る分散データベースクラスタシステムの第１の好適な構成を示す図である。
【００３４】
図２に示すように、この分散データベースクラスタシステムは、第１の一貫性フィルタモジュール２２をさらに含む。
【００３５】
前記第１のデータ同期モジュール１４は、前記第１の操作命令ブロックを前記第１の一貫性フィルタモジュール２２に送信するように構成される。前記第１の一貫性フィルタモジュール２２は、前記第１のデータ同期モジュール１４から送信された前記第１の操作命令ブロックを受信し、前記第１の操作命令ブロックにグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングし、前記第２の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。
【００３６】
ここで、前記フィルタ条件は前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第１の操作命令ブロックから実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第２の操作命令ブロックにパッケージングして相手側の分散データベースクラスタシステムに送信し、これにより、相手側の分散データベースクラスタシステムにおいて同期したのは、現在の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【００３７】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００３８】
増分データのサブスクリプション、増分データの抽出において、相手側の分散データベースクラスタシステムが受信したデータを選別する必要があり、特定の条件を満たすデータ対象（データベース、テーブル等）のみを相手側の分散データベースクラスタシステムに送信する必要があることを考慮すると、この時、このフィルタタスクをも前記第１の一貫性フィルタモジュール２２に渡すことができる。フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【００３９】
実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令に対して、前記第１の一貫性フィルタモジュール２２は、さらに、前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、次回に前記第１のデータ同期モジュール１４から送信された、現在の第１のマスターデータベースに対応する前記第１の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第１の操作命令ブロックに付加してから前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【００４０】
分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第１の一貫性フィルタモジュール２２が、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、分散データベースクラスタシステムを改善してもよい。
【００４１】
図３は本開示の実施例１に係る分散データベースクラスタシステムの第２の好適な構成を示す図である。
【００４２】
図３に示すように、この分散データベースクラスタシステムはグローバルトランザクション管理モジュール３２をさらに含み、前記グローバルトランザクション管理モジュール３２はグローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成される。
【００４３】
前記第１の同期クロックモジュール１２は、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せるように構成される。
【００４４】
前記第１の一貫性フィルタモジュール２２は、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする。
【００４５】
好適な実施形態として、データ同期処理を行う前に、相手側の分散データベースクラスタシステムの現在の分散データベースクラスタシステムとの同期位置を取得してもよい。この時、前記第１のデータ同期モジュール１４は、さらに、相手側の分散データベースクラスタシステムからの同期位置要求情報を受信し（ここで、前記同期位置要求情報に前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている）、また、前記同期位置要求情報に載せられた前記同期位置に基づいて、各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される。
【００４６】
以上は分散データベースクラスタシステムがデータ同期の送信側である場合に各モジュールによって実行される機能を説明した。なお、分散データベースクラスタシステムは実際の応用においてその役柄がよく変更される必要があり、例えば分散データベースクラスタシステムが当時はマスター分散データベースクラスタシステムである可能性があり、この場合には、データ同期の送信側となる必要がある。しかし、故障した後、分散データベースクラスタシステムがバックアップ分散データベースクラスタシステムになってしまう可能性があり、この時、データ同期の受信側であるので、好適な実施形態として、分散データベースクラスタシステムの各モジュールはさらに以下の機能を有する。
【００４７】
データ同期の受信側として、送信側からのデータ同期パケットを受信して、同期パケットの内容を実行してデータ同期を完成しなければならないが、この時、前記第１のデータ同期モジュール１４は、さらに、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し（ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含む）、また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【００４８】
例示的な実施形態として、前記第１のデータ同期モジュール１４は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【００４９】
例示的な実施形態として、前記第１のデータ同期モジュール１４は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う。
【００５０】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第１のデータ同期モジュール１４は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【００５１】
上述の最終的なグローバルな一貫性態様に記載されたように、相手側の分散データベースクラスタシステムは、業務によるクラスタ切り替えが行われる時にグローバルな一貫性フィルタを１回行う。前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、前記第１のデータ同期モジュール１４は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第１の一貫性フィルタモジュール２２を呼び出すように構成されてもよい。
【００５２】
この例示的な実施形態において、前記第１の一貫性フィルタモジュール２２は、
各第１のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第１のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第１のマスターデータベースに対しては、前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【００５３】
例示的な実施形態として、前記第１の一貫性フィルタモジュール２２は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例２】
【００５４】
この実施例において他の分散データベースクラスタシステムを提供する。この分散データベースクラスタシステムをデータ同期の受信側とすることができ、もちろん、データ同期の送信側の機能も同時に与えられた場合にはデータ同期の送信側とすることもでき、この時、実施例１を参照することができる。
【００５５】
図４は本開示の実施例２に係る分散データベースクラスタシステムの構成を示す図である。
【００５６】
図４に示すように、この分散データベースクラスタシステムは、第２のデータ同期モジュール４２と、複数の第２のデータベース群４４とを含むことができる。ここで、前記複数の第２のデータベース群４４のうちの各第２のデータベース群４４は１つの第２のマスターデータベース（未図示）を含む。
【００５７】
前記第２のデータ同期モジュール４２は、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、
また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【００５８】
ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、フィルタ条件を満たすデータベース操作命令がパッケージングされている。ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【００５９】
上記技術案によると、データ同期の受信側としての分散データベースクラスタシステムが前記第２のデータ同期モジュール４２を介して、データ同期の送信側の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。
【００６０】
送信された操作命令ブロックにおいて、第１の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００６１】
例示的な実施形態として、前記第２のデータ同期モジュール４２は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【００６２】
例示的な実施形態として、前記第２のデータ同期モジュール４２は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される。
【００６３】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第２のデータ同期モジュール４２は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【００６４】
図５は本開示の実施例２に係る分散データベースクラスタシステムの好適な構成を示す図である。
【００６５】
最終的なグローバルな一貫性態様に対して、この分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行うことができる。前記分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、図５に示すように、この分散データベースクラスタシステムは第２の一貫性フィルタモジュール５２をさらに含むことができる。
【００６６】
前記第２のデータ同期モジュール４２は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第２の一貫性フィルタモジュール５２を呼び出すように構成される。
【００６７】
前記第２の一貫性フィルタモジュール５２は、
各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【００６８】
例示的な実施形態として、前記第２の一貫性フィルタモジュール５２は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例３】
【００６９】
本実施例においてデータ同期の送信側の処理プロセスを説明する。図６は本開示の実施例３に係るデータ同期方法を示すフローチャートである。
【００７０】
このデータ同期方法は、複数の第１のデータベース群１６を含む第１の分散データベースクラスタシステムに応用される。ここで、前記複数の第１のデータベース群１６のうちの各第１のデータベース群１６は１つの第１のマスターデータベースを含む。
【００７１】
図６に示すように、前記方法は、
前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信するステップＳ６０２と、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングして、前記第１の操作命令ブロックを送信するステップＳ６０４とを含む。
【００７２】
上記技術案によると、第１の分散データベースクラスタシステムがクロック同期命令を定期的に送信し、データ同期中に、第１の分散データベースクラスタシステムの各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００７３】
如何に、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第１の操作命令ブロックにパッケージングするかについて、第１の分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【００７４】
例示的な実施形態として、前記第１の分散データベースクラスタシステムが定期的に各第１のマスターデータベースに前記クロック同期命令を送信する。前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、前記方法は、前記第１のマスターデータベースが、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むことをさらに含む。
【００７５】
前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングすることを含む。
【００７６】
このように、このような方式によると、マスターデータベースが受信したクロック同期命令と普通のデータベース操作命令をすべて正常にログファイルに書き込み、前記第１の分散データベースクラスタシステムは、ログファイルを読み取って、ログにおけるクロック同期命令に応じて、データベース操作命令を分割し、２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングすることができる。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成すしてもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【００７７】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはＳＱＬであり、すなわち、同期クロックＳＱＬステートメントをクロック同期命令として用いることができ、データベース操作命令もＳＱＬステートメントを用いることができる。
【００７８】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令記録方面でグローバルな一貫性を実現する。データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【００７９】
そこで、この時、以下のような２つの処理方式（最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性）のうちの少なくとも１つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【００８０】
＜最終的なグローバルな一貫性態様＞
この態様において、前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックを第２の分散データベースクラスタシステムに送信する。この時、第２の分散データベースクラスタシステムに送信する第１の操作命令ブロックは、マスターデータベースにおいて記録された、２つの同期クロック信号の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。
【００８１】
第２の分散データベースクラスタシステムのデータ同期モジュールは正常に、そのデータベース操作命令を第２の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、第２の分散データベースクラスタシステムは業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行う。
【００８２】
この実施例は災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００８３】
＜リアルタイムなグローバルな一貫性態様＞
このリアルタイムなグローバルな一貫性態様によると、前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行って、前記第１の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングして、前記第２の操作命令ブロックを第２の分散データベースクラスタシステムに送信する。
【００８４】
ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第１の操作命令ブロックから実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第２の操作命令ブロックにパッケージングして第２の分散データベースクラスタシステムに送信し、これにより、第２の分散データベースクラスタシステムにおいて同期したのは、現在の第１の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【００８５】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００８６】
増分データのサブスクリプション、増分データの抽出において第２の分散データベースクラスタシステムが受信したデータを選別する必要があることを考慮すると、特定の条件を満たすデータ対象（データベース、テーブル等）のみを第２の分散データベースクラスタシステムに送信する必要がある。したがって、フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記第２の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【００８７】
実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令に対して、前記第１の分散データベースクラスタシステムは、前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、バッファした前記データベース操作命令を現在の第１のマスターデータベースに対応する次の第１の操作命令ブロックに付加してから前記次の第１の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【００８８】
第１の分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第１の分散データベースクラスタシステムが、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、第１の分散データベースクラスタシステムを改善してもよい。前記第１の分散データベースクラスタシステムは、グローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録する。
【００８９】
前記第１の分散データベースクラスタシステムは、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せる。
【００９０】
前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする。
【００９１】
好適な実施形態として、データ同期処理を行う前に、相手側の第２の分散データベースクラスタシステムの現在の第１の分散データベースクラスタシステムとの同期位置を取得することができる。前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、この方法は、前記第１の分散データベースクラスタシステムが、第２の分散データベースクラスタシステムからの同期位置要求情報を受信することをさらに含む。
【００９２】
ここで、前記同期位置要求情報には前記第１の分散データベースクラスタシステムと前記第２の分散データベースクラスタシステムとの同期位置が載せられている。
【００９３】
また、前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、前記同期位置要求情報に載せられた前記同期位置に基づいて各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行することを含む。
【００９４】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例４】
【００９５】
本実施例においてデータ同期の受信側の処理プロセスを説明する。図７は本開示の実施例４に係るデータ同期方法を示すフローチャートである。
【００９６】
このデータ同期方法は、複数の第２のデータベース群４４を含む第２の分散データベースクラスタシステムに適用されることができる。ここで、前記複数の第２のデータベース群４４のうちの各第２のデータベース群４４は１つの第２のマスターデータベースを含む。前記方法は、以下のステップＳ７０２、Ｓ７０４を含む。
【００９７】
ステップＳ７０２において、前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックを受信する。ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうちのフィルタ条件を満たすデータベース操作命令がパッケージングされており、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【００９８】
ステップＳ７０４において、前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行する。
【００９９】
上記技術案によると、データ同期の受信側としての第２の分散データベースクラスタシステムがデータ同期の開始側の第１の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。送信された操作命令ブロックにおいて、第１の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる
例示的な実施形態として、前記第２の分散データベースクラスタシステムが受信した前記操作命令ブロックにおけるデータベース操作命令を実行することは、
前記第２の分散データベースクラスタシステムが、前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化することと、
前記第２の分散データベースクラスタシステムが、前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【０１００】
例示的な実施形態として、前記第２の分散データベースクラスタシステムが前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことは、
前記第２の分散データベースクラスタシステムが、テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成することと、
前記第２の分散データベースクラスタシステムが、異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【０１０１】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第２の分散データベースクラスタシステムが受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、前記第２の分散データベースクラスタシステムが、データベース操作命令の実行に成功した位置をファイルに永続化することをさらに含む。
【０１０２】
最終的なグローバルな一貫性態様に対して、この第２の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行うことができる。
【０１０３】
前記第２の分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとし、前記第２の分散データベースクラスタシステムを前記第１の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記方法は、
前記第２の分散データベースクラスタシステムが、各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定することと、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２の分散データベースクラスタシステムが、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることと、をさらに含むことができる。
【０１０４】
例示的な実施形態として、前記第２の分散データベースクラスタシステムが前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることは、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行することと、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行することと、を含む。
【０１０５】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例５】
【０１０６】
本実施例においてグローバルな一貫性を確保する分散データベースデータ同期装置及び方法を説明する。図８は本開示の実施例５に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
【０１０７】
図８に示すように、本開示による前記グローバルな一貫性を確保する分散データベースデータ同期装置は、以下の同期クロックモジュール８２、グローバルトランザクション管理モジュール８４、管理モジュール８６、一貫性フィルタモジュール８８を含む。
【０１０８】
分散データベースクラスタは、複数のデータベース群８０からなり、各データベース群８０は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、１つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばＳＱＬインタフェース等の統一した標準インタフェースを提供する。
【０１０９】
同期クロックモジュール８２は、定期的に分散データベース内の各マスターデータノードへＳＱＬステートメントを送信するように構成され、載せられる情報としては、同期クロックモジュール８２のタイムスタンプ及び現在のグローバルなアクティブトランザクションリストがある。
【０１１０】
グローバルトランザクション管理モジュール８４は、分散型環境でのグローバルで一意的なトランザクションＩＤを統合管理するように構成され、グローバルトランザクションＩＤは、１つのグローバルトランザクションを一意に識別し、同時に、各グローバルトランザクションの状態とライフサイクルを記録する。クラスタ内の各トランザクションはいずれも、グローバルトランザクション管理モジュール８４に一意的なトランザクションＩＤの構築を要求して、データ行に挿入する。
【０１１１】
管理モジュール８６は、分散データベースクラスタのネットワーク構成情報を統合管理するように構成される。
【０１１２】
一貫性フィルタモジュール８８は、グローバルのアクティブトランザクションＩＤを用いて、データに対してグローバルな一貫性フィルタを行い、フィルタルールに従って、所定のデータ対象（ベース、テーブル）を含むＳＱＬステートメントをフィルタする。
【０１１３】
データ同期モジュール８１０は、分散データベース内のマスターデータベースノードのログを収集し、ログを解析してＳＱＬステートメントを生成し、ＳＱＬステートメントブロックメッセージをパック圧縮して伝送し、ＳＱＬメッセージを永続化し、ＳＱＬの行を並列して再生するように構成される。
【０１１４】
以上の構成に基づいて、データ同期中に、まず主バックアップクラスタにおいて同期テーブルを構築し、同期テーブルには主に、タイムスタンプ情報とグローバルなアクティブトランザクションリストとの２つの情報が含まれる。同期クロックモジュール８２は定期的にグローバルトランザクション管理モジュール８４へ現在のアクティブトランザクションリストを要求して、グローバルトランザクション管理モジュール８４の応答を得た後、マスタークラスタのすべてのマスターデータベースへ１つの挿入ステートメントを送信し、挿入して現在のアクティブグローバルトランザクションリストのタイムスタンプ及び現在のグローバルなアクティブトランザクションリスト情報を取得する。
【０１１５】
マスタークラスタのデータ同期モジュール８１０は、定期的にマスタークラスタ内のマスターデータノードのログファイルを収集し、バックアップクラスタの同期要求を受信した後、ログファイルに対してリバース解析を行って、ＳＱＬステートメントを生成し、同期クロックを用いて、ＳＱＬステートメントストリームをブロックに分割し、また、一貫性モジュールによって、ＳＱＬステートメントに対して一貫性と所定のルールのフィルタを行い、最後に、フィルタ後のＳＱＬステートメントブロックを圧縮して送信キューに入れる。
【０１１６】
その後、スレッドを送信して、送信キューにおけるメッセージをバックアップクラスタのデータ同期モジュール８１０へ送信する。バックアップクラスタにおけるデータ同期モジュール８１０は、ＳＱＬブロックメッセージを受信した後、ＳＱＬメッセージを内部メモリの受信キューに入れて、書き込みスレッドを呼び出して、受信キューにおけるＳＱＬステートメントブロックをファイルに永続化してから、再生スレッドを開始させてファイルにおけるステートメントブロックを幾つかのタスクに分割してワーカースレッドに渡して、データをバックアップクラスタのデータベースノードに同期させる。
【０１１７】
以上のプロセスによって、マスタークラスタ内の各データノードのログファイルをクラスタの統一時間でスライスし、スライスにおけるトランザクションは業務の違いに応じて、マスター／バックアップクラスタで統合処理を行って同時に成功するか又は同時に失敗する。バックアップクラスタでのデータがリアルタイムに一致するか、又は最終的に一致するように確保する。これに基づいて、バックアップクラスタは、スライス内のトランザクションをテーブル名と主キー値に応じて配布し、マルチのスレッドを並列に実行して、並列送信の不足によって再生性能が低下する問題を解決する。
【０１１８】
図９は本開示の実施例５に係るデータ同期方法の詳細な作業フローチャートである。
【０１１９】
図９に示すように、このグローバルな一貫性を確保する分散データベースデータ同期方法は以下のステップＳ９０２、Ｓ９０４、Ｓ９０６、Ｓ９０８、Ｓ９１０、Ｓ９１２、Ｓ９１４、Ｓ９１６、Ｓ９１８を含む。
【０１２０】
ステップＳ９０２において、マスタークラスタのデータ同期モジュール８１０がオンされると、初期化して定期的にメタデータタスクスレッドを取得して、データ同期モジュール８１０に接続されるデータベースノードがデータベース群８０におけるマスターノードであるように確保する。スレッドを開始させて、定期的に管理ノードへ状態を報知する。バックアップクラスタのデータ同期モジュール８１０がオンされると、構成ファイルに応じて初期化してワーカースレッドプールを並行送信し、初期化メッセージをスレッドに書き込み、ＳＱＬ再生スレッド及びガベージコレクションスレッドが開始されると、まずマスタークラスタのデータ同期モジュール８１０にログ同期位置を送信する。
【０１２１】
ステップＳ９０４において、マスタークラスタのデータ同期モジュール８１０は、定期的に取得／同期クラスタネットワーク構成データ要求を管理モジュール８６に送信し、管理モジュール８６の応答を受信した後、内部メモリにおけるデータと比較する。データが空きであると、現在のデータによって内部メモリの構造を初期化し、データがあると、データベース群８０順でデータが一致するか否かを比較し、一致すると処理せず、一致しないと、データベースノードに接続されたか否かに応じて、直ちにデータ情報を更新するかを決める。
【０１２２】
ステップＳ９０６において、マスタークラスタのデータ同期モジュール８１０がオンされてクラスタネットワーク構成情報を同期させた後、バックアップクラスタのデータ同期モジュール８１０による同期位置要求情報のプッシュ通知を待機し、同期位置情報を受信した後、現在の位置に従って、新規のタスクを開始する。
【０１２３】
ステップＳ９０８において、マスタークラスタのデータ同期モジュール８１０が、同期位置に従ってデータベースの接続を起こし、ログファイルを解析するために内部メモリを初期化し、データベースからプッシュ通知されたログ情報を循環受信し、その後、実施例６に示すＳＱＬステートメントのブロック分割プロセスに移行する。実際の配置に応じて、ＳＱＬステートメントブロックを一貫性フィルタモジュール８８に送信する。
【０１２４】
ステップＳ９１０において、ＳＱＬステートメントブロックに対してグローバルな一貫性フィルタとルールによるフィルタを行う。具体的なプロセスについては実施例８の図１２又は図１３を参照することができる。
【０１２５】
ステップＳ９１２において、マスタークラスタのデータ同期モジュール８１０は、バックアップクラスタのデータ同期モジュール８１０から送信されたＳＱＬステートメントブロック要求を受信した時、まずメッセージを再送信する必要があるか否かを判断し、再送信する必要があれば、直接送信キューのメッセージを送信し、再送信する必要がなければ、送信バッファキューからメッセージを選択してバックアップクラスタのデータ同期モジュール８１０に送信する。
【０１２６】
ステップＳ９１４において、バックアップクラスタのデータ同期モジュール８１０はメッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行う。その後、ＳＱＬステートメントブロックメッセージが書き込みキューに入れられ、書き込みスレッドによって、メッセージを書き込みキューからＳＱＬ再生ファイルに永続化し、その後、受信キューに詰まっているメッセージがあるか否かを検査し、あれば、中断されたスレッドを覚醒し、なければ、現在のメッセージ群が終了したか否かを判断し、データ同期位置を更新した後、書き込みキューを循環読み取りする。
【０１２７】
ステップＳ９１６において、バックアップクラスタデータ同期モジュール８１０のＳＱＬ再生スレッドが、ＳＱＬ再生ファイルを解析し、２つの同期クロック間のトランザクションステートメントブロックを解析して行単位で分割し、具体的な方法については実施例７に記載のＳＱＬ行並列処理（ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｉｎｇ  ｏｆ  ＳＱＬ  ｓｔａｔｅｍｅｎｔ  ｌｉｎｅｓ）のプロセスを参照することができる。ステートメントブロックの行並列による再生に成功した後、再生に異常が発生して回復する際に用いるように、データ再生の位置をファイルに永続化する。
【０１２８】
ステップＳ９１８において、バックアップクラスタのデータ同期モジュール８１０のデータクリーニングスレッドが、保存時間を超えており且つ再生に成功したデータを定期的にクリーニングする。
【０１２９】
上述のように、この方法によると、同期クロックモジュール８２によって、クラスタ全体に統一されたクロックを提供して、データを統一にスライス処理する。一貫性フィルタモジュール８８によって、スライスされたデータに対してグローバルな一貫性フィルタを行うとともに、災害復元指標ＲＰＯ（復元点目標、すなわちシステムが最大にどの程度のデータを失うことを許容するか）とＲＴＯ（復元時間目標、すなわち、システムが災害発生から復元まで実行される時間）の要求及び業務のデータフィルタと抽出に対するニーズを考慮して、同期クロックモジュール８２、グローバルトランザクション管理モジュール８４、一貫性フィルタモジュール８８、データ同期モジュール８１０をさまざまに配列すると、１都市マルチタスク、遠隔地災害復旧、データのサブスクリプション及びデータの抽出等のさまざまな業務の状況を効率的に満たすことができるとともに、分散型環境でのデータクラスタ間のグローバルな一貫性を確保し、遠隔地にあるクラスタが急速に業務を引き取ることができ、非常に特別なハイライト機能であり、分散データベースの金融分野、インターネット分野、教育分野等での普及のために良好な促進作用を果たす。
【実施例６】
【０１３０】
図１０は本開示の実施例６に係るＳＱＬステートメント分割パケット（ｓｐｌｉｔｔｉｎｇ  ａｎｄ  ｅｎｃａｐｓｕｌａｔｉｎｇ  ｏｆ  ＳＱＬ  ｓｔａｔｅｍｅｎｔｓ）を示す図である。
【０１３１】
図１０に示すように、同期クロックモジュール８２は定期的にデータベースへ同期クロックＳＱＬステートメントを送信する。対応するステートメントは最終的にデータベースログに置かれる。
【０１３２】
データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、同期クロックＳＱＬステートメントを用いてアプリケーションＳＱＬに対して分割を行い、具体的な方法としては、２つの同期クロックＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングすることである。
【０１３３】
ステートメントブロックをフィルタした後、パックし圧縮して、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【実施例７】
【０１３４】
図１１は本開示の実施例７に係るＳＱＬステートメント行並列処理を示すフローチャートである。
【０１３５】
図１１に示すように、ＳＱＬステートメントブロックはデータ行によって、複数のトランザクションに分割され、具体的な方法は以下の通りである。
【０１３６】
テーブル名と主キーに応じてデータ行を選択し、同一のデータ行のＳＱＬは前後順で１つのトランザクションを構成し、異なるデータ行のＳＱＬを異なるワーカースレッドに渡して処理させる。
【０１３７】
ワーカースレッドは再生に成功するように１組のＳＱＬステートメントを並列処理し、その後、次のＳＱＬステートメントブロックを読み取る。
【実施例８】
【０１３８】
本実施例においてリアルタイムなグローバルな一貫性フィルタと最終的なグローバルな一貫性フィルタとの２種類のフィルタ方式の具体的なプロセスを説明する。
【０１３９】
図１２は本開示の実施例８に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【０１４０】
ステップＳ１２０２において、まず、同期テーブルから直近の記録を探す。
【０１４１】
ステップＳ１２０４において、この記録から直近に同期させた際のグローバルなアクティブトランザクションリストを取得する。
【０１４２】
ステップＳ１２０６において、グローバルなアクティブトランザクションＩＤを用いて、ＳＱＬステートメントブロックに対してフィルタを行う。
【０１４３】
ステップＳ１２０８において、ステートメントブロックにおけるグローバルな提出済のＳＱＬステートメントに対して、配置データ対象フィルタルールがあるか否かを判定し、あれば、ステップＳ１２１０を実行し、なければ送信キューを提出する。
【０１４４】
ステップＳ１２１０において、フィルタルールに従って、係るＳＱＬステートメントをフィルタして、送信キューを提出する。
【０１４５】
ステップＳ１２１２において、グローバルな未提出のＳＱＬステートメントに対して、バッファキューに格納する。
【０１４６】
ステップＳ１２１４において、次の組のステートメントのフィルタを行う前に、まず、バッファキューにおけるＳＱＬステートメントをステートメントブロックに合併する。
【０１４７】
図１３は本開示の実施例８に係る最終的なグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【０１４８】
ステップＳ１３０２において、マスタークラスタとバックアップクラスタとの切り替えを行う必要があると、バックアップクラスタが、すべてのデータノードの同期テーブルから直近の同期クロック記録を探し出す。
【０１４９】
ステップＳ１３０４において、すべての直近の同期クロック記録を比較して、タイムスタンプの最も早い同期クロック記録時間（Ｔ０）を探し出して切り替えの一致点とする。
【０１５０】
ステップＳ１３０６において、時刻Ｔ０よりも後に同期クロックメッセージを受信したすべてのデータノードを探し出す。
【０１５１】
ステップＳ１３０８において、ログファイルを解析して、時刻Ｔ０へ戻るすべてのリバースＳＱＬステートメントを生成し、ＳＱＬステートメントを実行して、ノードデータを時刻Ｔ０の同期クロックメッセージを受信した時刻にロールバックし、これにより、クラスタ内のすべてのノードのデータがいずれも１つの時点（時刻Ｔ０）に揃えられる。
【０１５２】
ステップＳ１３１０において、同期クロックテーブルにおけるこの時点（Ｔ０）の現在のグローバルなアクティブトランザクションＩＤを用いて、バックアップクラスタデータノードのログファイルにおける対応するＳＱＬステートメントをフィルタし、これらのステートメントは単一の点で提出されたが、グローバルではトランザクション未提出状態にある。これらのトランザクションはグローバルなアクティブ状態にある。
【０１５３】
ステップＳ１３１２において、リバースＳＱＬステートメントを生成して実行し、最終的に分散データベースバックアップクラスタがグローバルな一貫性の状態になる。
【０１５４】
以下、実施例９乃至１２において本開示の方法を異なる状況に適用した場合の具体的な処理プロセスを説明する。
【実施例９】
【０１５５】
この実施例において分散データベースの非同期データの同期高性能モード（すなわち、最終的なグローバルな一貫性態様）を説明する。
【０１５６】
図１４は本開示の実施例９に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【０１５７】
図１４に示すように、この実施例において２つのクラスタシステムがあり、マスター分散データベースクラスタによりデータをバックアップクラスタに同期させ、２つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行わず、業務によるクラスタの切り替えが行われる時のみにグローバルな一貫性フィルタを１回行う。分散データベースの非同期データの同期高性能モードでの処理プロセスは以下のステップを含む。
【０１５８】
１．同期クロックモジュール８２は、データベースへ同期ＳＱＬステートメントを送信する。
【０１５９】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１６０】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。ＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１６１】
４．バックアップクラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ＳＱＬステートメントを並列再生して、データ同期の目的を達成する。
【０１６２】
５．一貫性フィルタモジュール８８は、マスタークラスタとバックアップクラスタとの切り替えを行う必要がある場合のみオンされる。フィルタステップについては図１３を参照することができる。
【０１６３】
この実施例は災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。
【実施例１０】
【０１６４】
この実施例において分散データベースクラスタのデータ同期高性能モード（すなわち、リアルタイムなグローバルな一貫性態様）を説明する。
【０１６５】
図１５は本開示の実施例１０に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【０１６６】
図１５に示すように、この実施例において２つのデータベースクラスタシステムがあり、マスターデータベースクラスタによりデータをバックアップクラスタに同期させ、２つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行い、これにより、バックアップクラスタに同期されたデータが常に一貫状態にある。分散データベースクラスタのデータ同期高性能モードでの処理プロセスは以下のステップを含む。
【０１６７】
１．同期クロックモジュール８２が、データベースへ同期ＳＱＬステートメントを送信する。
【０１６８】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１６９】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１７０】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルトランザクション提出済状態にあるステートメントをフィルタし、具体的なプロセスについては図１２を参照することができる。
【０１７１】
５．グローバルトランザクション提出済のＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキュー中に入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１７２】
６．バックアップクラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ＳＱＬステートメントを並列再生して、データ同期の目的を達成する。毎回同期されるＳＱＬステートメントブロックはいずれもグローバルで一貫するので、バックアップクラスタデータベース内のデータが常にグローバルな一貫性の状態にある。
【０１７３】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。
【実施例１１】
【０１７４】
この実施例において分散データベースに基づいて増分データをサブスクリプションする場合のデータ同期（準リアルタイムなバックアップ）を説明する。
【０１７５】
図１６は本開示の実施例１１に係る分散データベースを準リアルタイムにバックアップするシステムの構成を示す図である。
【０１７６】
図１６に示すように、この実施例において２つのデータベースクラスタがあり、その中の遠隔データベースクラスタをサブスクリプション業務システムクラスタのデータベースクラスタとし、２つのクラスタのネットワーク構成は一致しないこともできる。分散データベースに基づいて増分データをサブスクリプションする場合の準リアルタイムなバックアッププロセスは以下のステップを含む。
【０１７７】
１．同期クロックモジュール８２は、定期的にデータベースへ同期ＳＱＬステートメントを送信する。
【０１７８】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１７９】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１８０】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルなアクティブＳＱＬステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時に、ステートメントブロックに合併する。このようにフィルタされたＳＱＬステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、サブスクリプションルールに従って、係るデータ対象（データベース、テーブル）にフィルタを行う。
【０１８１】
５．フィルタ後のグローバルトランザクション提出済のＳＱＬステートメントブロックに対して、パックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１８２】
６．遠隔クラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、クラスタのネットワーク構成状況に応じて、ＳＱＬステートメントを並列再生して、準リアルタイムにデータをバックアップする目的を実現する。
【実施例１２】
【０１８３】
この実施例において分散データベースの増分データに基づくデータ同期（データ抽出）を説明する。
【０１８４】
図１７は本開示の実施例１２に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【０１８５】
図１７に示すように、この実施例においてデータを発生するためのオンライントランザクション処理システム（ＯＬＴＰ）と主にデータ分析業務を行うオンライン分析システム（ＯＬＡＰ）やデータウェアハウスシステム（ＢＩ）との２種類の業務システムがあり、図面においてはデータをオンラインで分析するビッグデータプラットフォーム（例えば、Ｈａｄｏｏｐに基づくデータウェアハウス工具Ｈｉｖｅ、構造化データを処理するための汎用のクラスタ計算フレームワーク（Ｓｐａｒｋ）素子Ｓｐａｒｋ  ＳＱＬ、Ｈａｄｏｏｐの分散ファイルシステム（Ｈａｄｏｏｐ  Ｄｉｓｔｒｉｂｕｔｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ、ＨＤＦＳと略称）等を含む）を例にする。
【０１８６】
ＯＬＴＰシステムは、ビッグデータプラットフォームが分析して発掘するように、データをビッグデータプラットフォームに導入する。分散データベース増分データに基づくデータ抽出は以下のステップを含む。
【０１８７】
１．同期クロックモジュール８２は、定期的にデータベースへ同期ＳＱＬステートメントを送信する。
【０１８８】
２．ＯＬＴＰタイプ業務データベースクラスタは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１８９】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１９０】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルなアクティブＳＱＬステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時にステートメントブロックに合併する。このようにフィルタされたＳＱＬステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、データ抽出ルールに従って、係るデータ対象（データベース、テーブル）にフィルタを行う。
【０１９１】
５．抽出された後のグローバルトランザクション提出済のＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出してビッグデータプラットフォーム側のデータ同期モジュール８１０へ送信する。
【０１９２】
６．ビッグデータプラットフォーム側のデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ビッグデータプラットフォームのデータ計算レイヤに並列再生して、計算レイヤによってＳＱＬ計算を行って、データ計算結果をビッグデータプラットフォームの記憶システムに更新する。
【０１９３】
上述のように、本開示による分散データベースクラスタシステムとデータ同期方法によると、分散データベースクラスタの教育、金融、政府及び企業、インターネットなどの分野での応用を拡張し、システム資源の投入を節約し、システムの性能を向上させ、データの一貫性を確保し、ユーザの使用体験を向上させることができる。分散データベースの普及のために良好な模範的な役割を果たすことになる。
【０１９４】
上述した本開示の各モジュール又は各ステップを汎用の計算装置によって実現することができ、１つの計算装置に集中させることができ、又は複数の計算装置からなるネットワークに分布させることもでき、また、計算装置が実行可能なプログラムコードによって実現してそれを記憶装置に記憶して計算装置に実行させることもでき、場合によって、図示又は説明したステップをここに示す順とは異なる順で実行することもでき、又はそれぞれ集積回路モジュールに制作し、又はその中の複数のモジュール又はステップを１つの集積回路モジュールとすることができることを当業者は理解できる。このように、本開示は特定のハードウェアとソフトウェアとの組合せに限定されない。
【０１９５】
以上は、本開示の好適な実施例に過ぎず、本開示を限定するものではなく、当業者であれば本開示にさまざまな修正や変形が可能である。本開示の原則内でのすべての修正、同等置換、改良などはいずれも本開示の保護範囲内に含まれる。
【図１】
2021513715.tif 000003
【図２】
2021513715.tif 000004
【図３】
2021513715.tif 000005
【図４】
2021513715.tif 000006
【図５】
2021513715.tif 000007
【図６】
2021513715.tif 000008
【図７】
2021513715.tif 000009
【図８】
2021513715.tif 000010
【図９】
2021513715.tif 000011
【図１０】
2021513715.tif 000012
【図１１】
2021513715.tif 000013
【図１２】
2021513715.tif 000014
【図１３】
2021513715.tif 000015
【図１４】
2021513715.tif 000016
【図１５】
2021513715.tif 000017
【図１６】
2021513715.tif 000018
【図１７】
2021513715.tif 000019
【手続補正書】
【提出日】令和2年10月14日(2020.10.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１の同期クロックモジュールと、第１のデータ同期モジュールと、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群とを含む分散データベースクラスタシステムであって、
前記第１の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、
前記第１のデータ同期モジュールは、各第１のマスターデータベースにおいて前記第１の同期クロックモジュールから送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして、前記第１の操作命令ブロックを送信するように構成される、分散データベースクラスタシステム。
【請求項２】
前記第１の同期クロックモジュールは、定期的に各第１のマスターデータベースへ前記クロック同期命令を送信するように構成され、
前記第１のマスターデータベースは、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成され、
前記第１のデータ同期モジュールは、各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される請求項１に記載の分散データベースクラスタシステム。
【請求項３】
前記第１のデータ同期モジュールは、前記第１の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成されるか、又は、
第１の一貫性フィルタモジュールをさらに含み、前記第１のデータ同期モジュールは、前記第１の操作命令ブロックを前記第１の一貫性フィルタモジュールに送信するように構成され、前記第１の一貫性フィルタモジュールは、前記第１のデータ同期モジュールから送信された前記第１の操作命令ブロックを受信し、前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングし、前記第２の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成され、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むか、または、前記データベース操作命令がグローバルトランザクション提出済状態にあることと、前記データベース操作命令が前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することとを含む、請求項１又は請求項２に記載の分散データベースクラスタシステム。
【請求項４】
第１の一貫性フィルタモジュールをさらに含み、
前記第１の一貫性フィルタモジュールは、さらに、
前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、次回に前記第１のデータ同期モジュールから送信された、現在の第１のマスターデータベースに対応する前記第１の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第１の操作命令ブロックに付加してから前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行うように構成される、請求項３に記載の分散データベースクラスタシステム。
【請求項５】
第１の一貫性フィルタモジュールをさらに含み、
グローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成されるグローバルトランザクション管理モジュールをさらに含み、
前記第１の同期クロックモジュールは、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せるように構成され、
前記第１の一貫性フィルタモジュールは、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令を、グローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする、請求項３又は請求項４に記載の分散データベースクラスタシステム。
【請求項６】
前記第１のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムからの同期位置要求情報であって、前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている同期位置要求情報を受信し、
前記同期位置要求情報に載せられた前記同期位置に基づいて、各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される、請求項１に記載の分散データベースクラスタシステム。
【請求項７】
前記第１のデータ同期モジュールは、さらに、
相手側の分散データベースクラスタシステムから送信された、第１の操作命令ブロック又は第２の操作命令ブロックを含む操作命令ブロックを受信し、
受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成され、
前記第１のデータ同期モジュールは、さらに、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成され、
前記第１のデータ同期モジュールは、さらに、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項１乃至請求項６のいずれか１項に記載の分散データベースクラスタシステム。
【請求項８】
前記第１のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項７に記載の分散データベースクラスタシステム。
【請求項９】
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合、
前記第１のデータ同期モジュールは、
前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第１の一貫性フィルタモジュールを呼び出すように構成され、
前記第１の一貫性フィルタモジュールは、
各第１のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第１のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第１のマスターデータベースに対しては、前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され、
前記第１の一貫性フィルタモジュールは、さらに、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項７に記載の分散データベースクラスタシステム。
【請求項１０】
相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第２のデータ同期モジュールと、
それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群と、を含む分散データベースクラスタシステムであって、
前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされている、分散データベースクラスタシステム。
【請求項１１】
前記第２のデータ同期モジュールは、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成され、
前記第２のデータ同期モジュールは、さらに、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される、請求項１０に記載の分散データベースクラスタシステム。
【請求項１２】
前記第２のデータ同期モジュールは、さらに、
受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される、請求項１０又は請求項１１に記載の分散データベースクラスタシステム。
【請求項１３】
第２の一貫性フィルタモジュールをさらに含み、
前記第２のデータ同期モジュールは、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第２の一貫性フィルタモジュールを呼び出すように構成され、
前記第２の一貫性フィルタモジュールは、
各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成され、
前記第２の一貫性フィルタモジュールは、さらに、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される、請求項１０又は請求項１１に記載の分散データベースクラスタシステム。
【請求項１４】
それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群を含む第１の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信することと、を含む、データ同期方法。
【請求項１５】
それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群を含む第２の分散データベースクラスタシステムに適用されるデータ同期方法であって、
前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第１の操作命令ブロック、又は前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第２の操作命令ブロックを含む操作命令ブロックを受信することと、
前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含む、データ同期方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベース分野に関し、特に、分散データベースクラスタシステム、データ同期方法及び記憶媒体に関する。
【背景技術】
【０００２】
近年、例えばＭｙＳＱＬ（ＳＱＬはＳｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ、すなわち、構造化問合せ言語を表す）等のオープンソースデータベース製品を注目し利用する組織が増えている。業務及び技術の発展に伴い、データベース技術もクラスタ化へ発展している。クラスタ間のデータ同期技術は災害復旧の基礎技術として、２つのデータセンター間の効率的で一貫性のあるデータ同期方法の研究は重要で深遠な意義を持つ。
【０００３】
現在、分散データベース分野において、データクラスタ間のデータ同期は、主に、ポイントツーポイントのデータ移行に依頼する。しかし、サーバーやネットワークの差異等のさまざまな要因によって、クラスタ間の異なるデータノードによって同期されたデータが
時点でのグローバルな一貫性を実現することができないおそれがある。例えば、マスタークラスタ内のＡとＢとの２つのデータノードがデータをバックアップクラスタ内のＡ’とＢ’との２つのデータノードに同期させ、ある時刻において、Ａ’はＡの時刻Ｔ０でのデータに同期したが、Ｂ’はＢの時刻Ｔ１でのデータに同期した。
【０００４】
この時に切り替えが行われると、業務をバックアップクラスタに移行しなければならないが、バックアップクラスタのデータがグローバルな一貫を保っていないので、業務を直ちにバックアップクラスタに切り替えることができない。そして、基準となる時点又はクロックがないので、業務データを一貫する時点に復元させることもできない。
【０００５】
マスターデータベースクラスタとバックアップデータベースクラスタとの間の切り替え状況以外に、例えば増分データのサブスクリプション、増分データの抽出を含むが、これらに限定されてはいないデータ同期に係る他の状況においても、クラスタ間の異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題がある。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本開示の実施例によると、少なくとも既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決する分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。
【課題を解決するための手段】
【０００７】
本開示の一実施例によると、第１の同期クロックモジュールと、第１のデータ同期モジュールと、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群とを含み、前記第１の同期クロックモジュールは、クロック同期命令を定期的に送信するように構成され、前記第１のデータ同期モジュールは、各第１のマスターデータベースにおいて前記第１の同期クロックモジュールから送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして前記第１の操作命令ブロックを送信するように構成される分散データベースクラスタシステムを提供する。
【０００８】
本開示の他の実施例によると、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される第２のデータ同期モジュールと、それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群と、を含み、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには、前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされている分散データベースクラスタシステムを提供する。
【０００９】
本開示の他の一実施例によると、それぞれ１つの第１のマスターデータベースを含む複数の第１のデータベース群を含む第１の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信することと、前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングして前記第１の操作命令ブロックを送信することと、を含むデータ同期方法を提供する。
【００１０】
本開示の他の一実施例によると、それぞれ１つの第２のマスターデータベースを含む複数の第２のデータベース群を含む第２の分散データベースクラスタシステムに適用されるデータ同期方法であって、前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックであって、前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされた第１の操作命令ブロック、又は前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含むフィルタ条件を満たすデータベース操作命令がパッケージングされた第２の操作命令ブロックを含む操作命令ブロックを受信することと、前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行することと、を含むデータ同期方法を提供する。
【００１１】
本開示の他の一実施例によると、コンピュータープログラムが記憶された記憶媒体であって、前記コンピュータープログラムは、実行されると、上述したいずれかの方法実施例におけるのステップを実行するように構成される記憶媒体を提供する。
【００１２】
本開示の他の一実施例によると、メモリとプロセッサとを含む電子機器であって、前記メモリにコンピュータープログラムが記憶され、前記プロセッサは前記コンピュータープログラムを実行することで上述したいずれかの方法実施例におけるステップを実行するように構成される電子機器を提供する。
【発明の効果】
【００１３】
本開示によると、分散データベースクラスタシステムの内部でクロック同期命令を定期的に送信し、データ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【図面の簡単な説明】
【００１４】
ここで説明する図面は本開示を一層理解させるためのもので、本願の一部を構成し、本開示に示す実施例及びその説明は本開示を解釈するものであり、本開示を不当に限定するものではない。
【図１】本開示の実施例１に係る分散データベースクラスタシステムの構成を示す図である。
【図２】本開示の実施例１に係る分散データベースクラスタシステムの第１の好適な構成を示す図である。
【図３】本開示の実施例１に係る分散データベースクラスタシステムの第２の好適な構成を示す図である。
【図４】本開示の実施例２に係る分散データベースクラスタシステムの構成を示す図である。
【図５】本開示の実施例２に係る分散データベースクラスタシステムの好適な構成を示す図である。
【図６】本開示の実施例３に係るデータ同期方法を示すフローチャートである。
【図７】本開示の実施例４に係るデータ同期方法を示すフローチャートである。
【図８】本開示の実施例５に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
【図９】本開示の実施例５に係るデータ同期方法の詳細な作業フローチャートである。
【図１０】本開示の実施例６に係るＳＱＬステートメント分割パケットを示す図である。
【図１１】本開示の実施例７に係るＳＱＬステートメント行並列処理を示すフローチャートである。
【図１２】本開示の実施例８に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートである。
【図１３】本開示の実施例８に係る最終的なグローバルな一貫性フィルタを示すフローチャートである。
【図１４】本開示の実施例９に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【図１５】本開示の実施例１０に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【図１６】本開示の実施例１１に係る分散データベースを準リアルタイムにバックアップするシステム構成を示す図である。
【図１７】本開示の実施例１２に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【発明を実施するための形態】
【００１５】
分散データベースクラスタシステムは複数のデータベース群からなり、各データベース群は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、１つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばＳＱＬインタフェース等の統一した標準インタフェースを提供する。
【００１６】
例えばデータクラスタ間のデータ同期、増分データのサブスクリプション、増分データの抽出などの分散データベースクラスタシステム間の同期について、既存技術におけるデータ同期態様によると、グローバルな一貫性を提供できない問題や欠陥が存在する場合が多い。
【００１７】
上記問題について、本開示において分散データベースクラスタシステム、データ同期方法及び記憶媒体を提供する。以下、図面を参照しつつ実施例とともに本開示を詳しく説明する。なお、矛盾しない限り、本願の実施例及び実施例の特徴を互いに組み合わせることができる。
【００１８】
なお、本開示の明細書、特許請求の範囲及び上記図面における「第１」、「第２」等の用語は、特定の順又は前後順を限定するものではなく、類似する対象を区別するためものである。
【実施例１】
【００１９】
この実施例において分散データベースクラスタシステムを提供する。図１は本開示の実施例１に係る分散データベースクラスタシステムの構成を示す図である。
【００２０】
図１に示すように、この分散データベースクラスタシステムは、第１の同期クロックモジュール１２と、第１のデータ同期モジュール１４と、複数の第１のデータベース群１６と、を含むことができる。ここで、前記複数の第１のデータベース群１６のうちの各第１のデータベース群１６は１つの第１のマスターデータベース（未図示）を含む。
【００２１】
前記第１の同期クロックモジュール１２は、クロック同期命令を定期的に送信するように構成される。
【００２２】
前記第１のデータ同期モジュール１４は、各第１のマスターデータベースにおいて前記第１の同期クロックモジュール１２から送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される。
【００２３】
上記技術案によると、分散データベースクラスタシステムにおいて第１の同期クロックモジュール１２がクロック同期命令を定期的に送信し、第１のデータ同期モジュール１４はデータ同期中に、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００２４】
第１のデータ同期モジュール１４が、如何に、各第１のマスターデータベースにおいて前記第１の同期クロックモジュール１２から送信された隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第１の操作命令ブロックにパッケージングするかについて、分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【００２５】
例示的な実施形態として、前記第１の同期クロックモジュール１２は、定期的に各第１のマスターデータベースへ前記クロック同期命令を送信するように構成される。前記第１のマスターデータベースは、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むように構成される。前記第１のデータ同期モジュール１４は、各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングし、前記第１の操作命令ブロックを送信するように構成される。
【００２６】
このように、このような態様によると、マスターデータベースにおいて受信したクロック同期命令と普通のデータベース操作命令とをいずれも正常にログファイルに書き込み、前記第１のデータ同期モジュール１４はログファイルを読み取って、ログにおけるクロック同期命令に基づいてデータベース操作命令を分割し、隣接する２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングする。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成してもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【００２７】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはＳＱＬであり、すなわち、同期クロックＳＱＬステートメントをクロック同期命令として用いることができ、データベース操作命令もＳＱＬステートメントを用いることができる。
【００２８】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令の記録方面でグローバルな一貫性を実現する。
【００２９】
データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【００３０】
そこで、この時、以下のような２つの処理方式（最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性）のうちの少なくとも１つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【００３１】
＜最終的なグローバルな一貫性態様＞
この態様において、前記第１のデータ同期モジュール１４は、前記第１の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。この時、相手側の分散データベースクラスタシステムに送信する第１の操作命令ブロックは、マスターデータベースにおいて記録された、隣接する２つのクロック同期命令の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。相手側の分散データベースクラスタシステムのデータ同期モジュールは、それを正常に相手側の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、相手側の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを行う。
【００３２】
この実施例は、災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態について、は実施例８を参照することができる。
【００３３】
＜リアルタイムなグローバルな一貫性態様＞
このリアルタイムなグローバルな一貫性態様によると、分散データベースクラスタシステムに第１の一貫性フィルタモジュール２２が追加される。図２は本開示の実施例１に係る分散データベースクラスタシステムの第１の好適な構成を示す図である。
【００３４】
図２に示すように、この分散データベースクラスタシステムは、第１の一貫性フィルタモジュール２２をさらに含む。
【００３５】
前記第１のデータ同期モジュール１４は、前記第１の操作命令ブロックを前記第１の一貫性フィルタモジュール２２に送信するように構成される。前記第１の一貫性フィルタモジュール２２は、前記第１のデータ同期モジュール１４から送信された前記第１の操作命令ブロックを受信し、前記第１の操作命令ブロックにグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおける、フィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングし、前記第２の操作命令ブロックを相手側の分散データベースクラスタシステムに送信するように構成される。
【００３６】
ここで、前記フィルタ条件は前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第１の操作命令ブロックから実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第２の操作命令ブロックにパッケージングして相手側の分散データベースクラスタシステムに送信し、これにより、相手側の分散データベースクラスタシステムにおいて同期したのは、現在の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【００３７】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００３８】
増分データのサブスクリプション、増分データの抽出において、相手側の分散データベースクラスタシステムが受信したデータを選別する必要があり、特定の条件を満たすデータ対象（データベース、テーブル等）のみを相手側の分散データベースクラスタシステムに送信する必要があることを考慮すると、この時、このフィルタタスクをも前記第１の一貫性フィルタモジュール２２に渡すことができる。フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記相手側の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【００３９】
実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令に対して、前記第１の一貫性フィルタモジュール２２は、さらに、前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、次回に前記第１のデータ同期モジュール１４から送信された、現在の第１のマスターデータベースに対応する前記第１の操作命令ブロックを受信すると、バッファした前記データベース操作命令を前記第１の操作命令ブロックに付加してから前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【００４０】
分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第１の一貫性フィルタモジュール２２が、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、分散データベースクラスタシステムを改善してもよい。
【００４１】
図３は本開示の実施例１に係る分散データベースクラスタシステムの第２の好適な構成を示す図である。
【００４２】
図３に示すように、この分散データベースクラスタシステムはグローバルトランザクション管理モジュール３２をさらに含み、前記グローバルトランザクション管理モジュール３２はグローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録するように構成される。
【００４３】
前記第１の同期クロックモジュール１２は、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せるように構成される。
【００４４】
前記第１の一貫性フィルタモジュール２２は、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする。
【００４５】
好適な実施形態として、データ同期処理を行う前に、相手側の分散データベースクラスタシステムの現在の分散データベースクラスタシステムとの同期位置を取得してもよい。この時、前記第１のデータ同期モジュール１４は、さらに、相手側の分散データベースクラスタシステムからの同期位置要求情報を受信し（ここで、前記同期位置要求情報に前記分散データベースクラスタシステムと前記相手側の分散データベースクラスタシステムと間の同期位置が載せられている）、また、前記同期位置要求情報に載せられた前記同期位置に基づいて、各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行するように構成される。
【００４６】
以上は分散データベースクラスタシステムがデータ同期の送信側である場合に各モジュールによって実行される機能を説明した。なお、分散データベースクラスタシステムは実際の応用においてその役柄がよく変更される必要があり、例えば分散データベースクラスタシステムが当時はマスター分散データベースクラスタシステムである可能性があり、この場合には、データ同期の送信側となる必要がある。しかし、故障した後、分散データベースクラスタシステムがバックアップ分散データベースクラスタシステムになってしまう可能性があり、この時、データ同期の受信側であるので、好適な実施形態として、分散データベースクラスタシステムの各モジュールはさらに以下の機能を有する。
【００４７】
データ同期の受信側として、送信側からのデータ同期パケットを受信して、同期パケットの内容を実行してデータ同期を完成しなければならないが、この時、前記第１のデータ同期モジュール１４は、さらに、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し（ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含む）、また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【００４８】
例示的な実施形態として、前記第１のデータ同期モジュール１４は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【００４９】
例示的な実施形態として、前記第１のデータ同期モジュール１４は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う。
【００５０】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第１のデータ同期モジュール１４は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【００５１】
上述の最終的なグローバルな一貫性態様に記載されたように、相手側の分散データベースクラスタシステムは、業務によるクラスタ切り替えが行われる時にグローバルな一貫性フィルタを１回行う。前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムのバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、前記第１のデータ同期モジュール１４は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合に、第１の一貫性フィルタモジュール２２を呼び出すように構成されてもよい。
【００５２】
この例示的な実施形態において、前記第１の一貫性フィルタモジュール２２は、  各第１のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第１のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、  直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第１のマスターデータベースに対しては、前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【００５３】
例示的な実施形態として、前記第１の一貫性フィルタモジュール２２は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第１のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第１のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例２】
【００５４】
この実施例において他の分散データベースクラスタシステムを提供する。この分散データベースクラスタシステムをデータ同期の受信側とすることができ、もちろん、データ同期の送信側の機能も同時に与えられた場合にはデータ同期の送信側とすることもでき、この時、実施例１を参照することができる。
【００５５】
図４は本開示の実施例２に係る分散データベースクラスタシステムの構成を示す図である。
【００５６】
図４に示すように、この分散データベースクラスタシステムは、第２のデータ同期モジュール４２と、複数の第２のデータベース群４４とを含むことができる。ここで、前記複数の第２のデータベース群４４のうちの各第２のデータベース群４４は１つの第２のマスターデータベース（未図示）を含む。
【００５７】
前記第２のデータ同期モジュール４２は、相手側の分散データベースクラスタシステムから送信された操作命令ブロックを受信し、
また、受信した前記操作命令ブロックにおけるデータベース操作命令を実行するように構成される。
【００５８】
ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには前記相手側の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうち、フィルタ条件を満たすデータベース操作命令がパッケージングされている。ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【００５９】
上記技術案によると、データ同期の受信側としての分散データベースクラスタシステムが前記第２のデータ同期モジュール４２を介して、データ同期の送信側の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。
【００６０】
送信された操作命令ブロックにおいて、第１の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００６１】
例示的な実施形態として、前記第２のデータ同期モジュール４２は、
前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化し、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行う方式で、
受信した前記操作命令ブロックにおける前記データベース操作命令を実行するように構成される。
【００６２】
例示的な実施形態として、前記第２のデータ同期モジュール４２は、
テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成し、
異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行う方式で、
前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うように構成される。
【００６３】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第２のデータ同期モジュール４２は、さらに、受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、データベース操作命令の実行に成功した位置をファイルに永続化するように構成される。
【００６４】
図５は本開示の実施例２に係る分散データベースクラスタシステムの好適な構成を示す図である。
【００６５】
最終的なグローバルな一貫性態様に対して、この分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行うことができる。前記分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとする場合もあることを考慮すると、図５に示すように、この分散データベースクラスタシステムは第２の一貫性フィルタモジュール５２をさらに含むことができる。
【００６６】
前記第２のデータ同期モジュール４２は、前記分散データベースクラスタシステムを前記相手側の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記第２の一貫性フィルタモジュール５２を呼び出すように構成される。
【００６７】
前記第２の一貫性フィルタモジュール５２は、
各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定し、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【００６８】
例示的な実施形態として、前記第２の一貫性フィルタモジュール５２は、
前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行し、
前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行する方式で、
前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させるように構成される。
【実施例３】
【００６９】
本実施例においてデータ同期の送信側の処理プロセスを説明する。図６は本開示の実施例３に係るデータ同期方法を示すフローチャートである。
【００７０】
このデータ同期方法は、複数の第１のデータベース群１６を含む第１の分散データベースクラスタシステムに応用される。ここで、前記複数の第１のデータベース群１６のうちの各第１のデータベース群１６は１つの第１のマスターデータベースを含む。
【００７１】
図６に示すように、前記方法は、
前記第１の分散データベースクラスタシステムが、クロック同期命令を定期的に送信するステップＳ６０２と、
前記第１の分散データベースクラスタシステムが、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングして、前記第１の操作命令ブロックを送信するステップＳ６０４とを含む。
【００７２】
上記技術案によると、第１の分散データベースクラスタシステムがクロック同期命令を定期的に送信し、データ同期中に、第１の分散データベースクラスタシステムの各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【００７３】
如何に、各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がどのような命令であるかを特定して、また、第１の操作命令ブロックにパッケージングするかについて、第１の分散データベースクラスタシステムの内部には、このような目的を実現できる態様が多くある。以下、簡単に実現でき且つ既存の分散データベースクラスタシステムの処理モードを多く変動させる必要がない実施形態を説明する。
【００７４】
例示的な実施形態として、前記第１の分散データベースクラスタシステムが定期的に各第１のマスターデータベースに前記クロック同期命令を送信する。前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、前記方法は、前記第１のマスターデータベースが、受信したデータベース操作命令を前記第１のマスターデータベースのログファイルに書き込み、受信した前記クロック同期命令を前記ログファイルに書き込むことをさらに含む。
【００７５】
前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが各第１のマスターデータベースの前記ログファイルをそれぞれ取得し、前記ログファイルにおいて隣接する２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングすることを含む。
【００７６】
このように、このような方式によると、マスターデータベースが受信したクロック同期命令と普通のデータベース操作命令をすべて正常にログファイルに書き込み、前記第１の分散データベースクラスタシステムは、ログファイルを読み取って、ログにおけるクロック同期命令に応じて、データベース操作命令を分割し、隣接する２つのクロック同期命令の間に介在されたデータベース操作命令を前記第１の操作命令ブロックにパッケージングすることができる。マスターデータベースによるログ記録の便宜を図るため、常用のデータベース操作ステートメントを用いてクロック同期命令を生成すしてもよく、これにより、マスターデータベースがこのクロック同期命令を普通のデータベース操作ステートメントと一緒にログファイルに簡単に書き込むことができる。
【００７７】
現在の分散データベースクラスタシステムの場合、相対的に好適なデータベース操作ステートメントはＳＱＬであり、すなわち、同期クロックＳＱＬステートメントをクロック同期命令として用いることができ、データベース操作命令もＳＱＬステートメントを用いることができる。
【００７８】
上述のように、本実施例における技術案によると、各マスターデータベースに記録された操作命令に対して、いずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令を第１の操作命令ブロックにパッケージングして送信することで、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保し、データベースの操作命令記録方面でグローバルな一貫性を実現する。データベースクラスタにおいて、処理タスクの分散が比較的に均一である場合、又は処理リソースの帯域幅が十分である場合、各操作命令の実行時間長が非常に小さく、且つ比較的に均一に分散されており、この時、データベース実行方面でも基本的にグローバルな一貫性を実現できる。実際の分散データベースクラスタシステムにおいてデータベースクラスタに処理タスクの分散が均一でないか、又は処理リソースの帯域幅が小さい場合もあることを考慮すると、この時、同一のデータベースクラスタにて異なる処理タスクの実行状態の差異がある可能性がある。
【００７９】
そこで、この時、以下のような２つの処理方式（最終的なグローバルな一貫性とリアルタイムなグローバルな一貫性）のうちの少なくとも１つによってデータベース実行方面のグローバルな一貫性を確保することができる。
【００８０】
＜最終的なグローバルな一貫性態様＞
この態様において、前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックを第２の分散データベースクラスタシステムに送信する。この時、第２の分散データベースクラスタシステムに送信する第１の操作命令ブロックは、マスターデータベースにおいて記録された、隣接する２つのクロック同期命令の間のデータベース操作命令であり、これらのデータベース操作命令に対しては一貫性フィルタを行わない。
【００８１】
第２の分散データベースクラスタシステムのデータ同期モジュールは正常に、そのデータベース操作命令を第２の分散データベースクラスタシステムの対応するマスターデータベースに同期させる。しかし、第２の分散データベースクラスタシステムは業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行う。
【００８２】
この実施例は災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。この処理方式によって、業務によるクラスタの切り替えが行われる時に同期受信側でグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００８３】
＜リアルタイムなグローバルな一貫性態様＞
このリアルタイムなグローバルな一貫性態様によると、前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行って、前記第１の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングして、前記第２の操作命令ブロックを第２の分散データベースクラスタシステムに送信する。
【００８４】
ここで、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。この態様によると、第１の操作命令ブロックから実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令を除去し、実行が終了されたデータベース操作命令のみを保留して第２の操作命令ブロックにパッケージングして第２の分散データベースクラスタシステムに送信し、これにより、第２の分散データベースクラスタシステムにおいて同期したのは、現在の第１の分散データベースクラスタシステムにおいて実行が終了されたデータであり、これにより、バックアップクラスタに同期されたデータが常に一貫状態となる。
【００８５】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。この処理方式によって、同期開始側でリアルタイムにグローバルな一貫性フィルタを行う具体的な実施形態については、実施例８を参照することができる。
【００８６】
増分データのサブスクリプション、増分データの抽出において第２の分散データベースクラスタシステムが受信したデータを選別する必要があることを考慮すると、特定の条件を満たすデータ対象（データベース、テーブル等）のみを第２の分散データベースクラスタシステムに送信する必要がある。したがって、フィルタ条件を追加することができ、例えば前記フィルタ条件は、前記データベース操作命令が、前記第２の分散データベースクラスタシステムに対応するデータ対象フィルタルールに該当することをさらに含むことができる。
【００８７】
実行がまだ終了されていない（すなわち、グローバルトランザクション未提出状態にある）データベース操作命令に対して、前記第１の分散データベースクラスタシステムは、前記第１の操作命令ブロックにおけるグローバルトランザクション未提出状態にあるデータベース操作命令をバッファし、また、バッファした前記データベース操作命令を現在の第１のマスターデータベースに対応する次の第１の操作命令ブロックに付加してから前記次の第１の操作命令ブロックに対してグローバルな一貫性フィルタを行う。
【００８８】
第１の分散データベースクラスタシステムの内部で簡単にグローバルなトランザクション管理を行うことで、第１の分散データベースクラスタシステムが、簡単にデータベース操作命令が現在グローバルトランザクション提出済状態にあるかそれとも未提出状態にあるかを判断するために、第１の分散データベースクラスタシステムを改善してもよい。前記第１の分散データベースクラスタシステムは、グローバルトランザクションを一意に識別可能なグローバルトランザクション識別ＩＤを管理し、各グローバルトランザクションの状態とライフサイクルを記録する。
【００８９】
前記第１の分散データベースクラスタシステムは、各第１のマスターデータベースの現在のアクティブトランザクションリストを定期的に要求し、前記現在のアクティブトランザクションリストと前記現在のアクティブトランザクションリストを取得したタイムスタンプとを前記第１のマスターデータベースに対応する同期テーブルに記録し、前記タイムスタンプ及び前記現在のアクティブトランザクションリストの情報を、前記第１のマスターデータベースへ送信する前記クロック同期命令に載せる。
【００９０】
前記第１の分散データベースクラスタシステムが前記第１の操作命令ブロックに対してグローバルな一貫性フィルタを行い、前記第１の操作命令ブロックにおけるフィルタ条件を満たすデータベース操作命令を第２の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、現在の第１のマスターデータベースに対応する前記同期テーブルにおける直近に記録された前記現在のアクティブトランザクションリストを調べ、直近に記録された前記現在のアクティブトランザクションリストにおけるグローバルトランザクションＩＤに対応するデータベース操作命令を取り除き、残りのデータベース操作命令をグローバルトランザクション提出済状態にあるフィルタ条件を満たすデータベース操作命令として前記第２の操作命令ブロックにパッケージングする。
【００９１】
好適な実施形態として、データ同期処理を行う前に、相手側の第２の分散データベースクラスタシステムの現在の第１の分散データベースクラスタシステムとの同期位置を取得することができる。前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングする前に、この方法は、前記第１の分散データベースクラスタシステムが、第２の分散データベースクラスタシステムからの同期位置要求情報を受信することをさらに含む。
【００９２】
ここで、前記同期位置要求情報には前記第１の分散データベースクラスタシステムと前記第２の分散データベースクラスタシステムとの同期位置が載せられている。
【００９３】
また、前記第１の分散データベースクラスタシステムが各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令をそれぞれ第１の操作命令ブロックにパッケージングすることは、前記第１の分散データベースクラスタシステムが、前記同期位置要求情報に載せられた前記同期位置に基づいて各第１のマスターデータベースに記録されたデータベース操作命令に対するパッケージングを実行することを含む。
【００９４】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例４】
【００９５】
本実施例においてデータ同期の受信側の処理プロセスを説明する。図７は本開示の実施例４に係るデータ同期方法を示すフローチャートである。
【００９６】
このデータ同期方法は、複数の第２のデータベース群４４を含む第２の分散データベースクラスタシステムに適用されることができる。ここで、前記複数の第２のデータベース群４４のうちの各第２のデータベース群４４は１つの第２のマスターデータベースを含む。前記方法は、以下のステップＳ７０２、Ｓ７０４を含む。
【００９７】
ステップＳ７０２において、前記第２の分散データベースクラスタシステムが、第１の分散データベースクラスタシステムから送信された操作命令ブロックを受信する。ここで、前記操作命令ブロックは第１の操作命令ブロック又は第２の操作命令ブロックを含み、前記第１の操作命令ブロックには前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令がパッケージングされており、前記第２の操作命令ブロックには前記第１の分散データベースクラスタシステムの各第１のマスターデータベースにおいて隣接する２つのクロック同期命令の間に記録されたデータベース操作命令のうちのフィルタ条件を満たすデータベース操作命令がパッケージングされており、前記フィルタ条件は、前記データベース操作命令がグローバルトランザクション提出済状態にあることを含む。
【００９８】
ステップＳ７０４において、前記第２の分散データベースクラスタシステムが、受信した前記操作命令ブロックにおけるデータベース操作命令を実行する。
【００９９】
上記技術案によると、データ同期の受信側としての第２の分散データベースクラスタシステムがデータ同期の開始側の第１の分散データベースクラスタシステムからの操作命令ブロックに応じて実行することで、データ同期プロセスを完成することができる。送信された操作命令ブロックにおいて、第１の分散データベースクラスタシステムにおける各マスターデータベースに記録された操作命令に載せられたのがいずれも隣接する２つのクロック同期命令の間に記録されたデータベース操作命令であるので、各マスターデータベースが、データ同期のベースとなるデータパケットがいずれも同一の時間基準点を有するように確保して、既存技術において異なるデータノードによって同期されたデータが時点でのグローバルな一貫性を実現できない問題を解決し、異なるデータノードによって同期されたデータの記録が同一の時間基準点に基づいて行われ、記録データでのグローバルな一貫性を確保することができる。
【０１００】
例示的な実施形態として、前記第２の分散データベースクラスタシステムが受信した前記操作命令ブロックにおけるデータベース操作命令を実行することは、
前記第２の分散データベースクラスタシステムが、前記操作命令ブロックにおける前記データベース操作命令を再生ファイルに永続化することと、
前記第２の分散データベースクラスタシステムが、前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【０１０１】
例示的な実施形態として、前記第２の分散データベースクラスタシステムが前記再生ファイルを解析して、前記再生ファイルにおける前記データベース操作命令を行単位で分割して異なるワーカースレッドに配置して処理を行うことは、
前記第２の分散データベースクラスタシステムが、テーブル名と主キーに応じて、前記操作命令ブロックにおける前記データベース操作命令を異なるデータ行に分割し、同一のデータ行の前記データベース操作命令は前後順で１つのトランザクションを構成することと、
前記第２の分散データベースクラスタシステムが、異なるトランザクションの前記データベース操作命令を異なるワーカースレッドに配置して処理を行うことと、を含むことができる。
【０１０２】
再生に失敗した時にタスクに応答するために、例示的な実施形態として、前記第２の分散データベースクラスタシステムが受信した前記操作命令ブロックにおける前記データベース操作命令の実行に成功した後、前記第２の分散データベースクラスタシステムが、データベース操作命令の実行に成功した位置をファイルに永続化することをさらに含む。
【０１０３】
最終的なグローバルな一貫性態様に対して、この第２の分散データベースクラスタシステムは、業務によるクラスタの切り替えが行われる時にグローバルな一貫性フィルタを１回行うことができる。
【０１０４】
前記第２の分散データベースクラスタシステムをバックアップ分散データベースクラスタシステムとし、前記第２の分散データベースクラスタシステムを前記第１の分散データベースクラスタシステムの代わりにマスター分散データベースクラスタシステムとする必要がある場合、前記方法は、
前記第２の分散データベースクラスタシステムが、各第２のマスターデータベースに対応する同期テーブルを取得し、前記同期テーブルに基づいて各第２のマスターデータベースの直近に同期されたタイムスタンプを特定し、その中の最も早いタイムスタンプを切り替え基準時点として特定することと、
直近に同期されたタイムスタンプが前記切り替え基準時点よりも遅い各第２のマスターデータベースに対しては、前記第２の分散データベースクラスタシステムが、前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることと、をさらに含むことができる。
【０１０５】
例示的な実施形態として、前記第２の分散データベースクラスタシステムが前記第２のマスターデータベースのデータを前記切り替え基準時点で記録した状態にロールバックし、前記第２のマスターデータベースのデータをグローバルな一貫性の状態に復元させることは、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点よりも後のデータベース操作命令に対して、リバースデータベース操作命令を生成し、前記リバースデータベース操作命令を実行することと、
前記第２の分散データベースクラスタシステムが、前記切り替え基準時点でグローバルトランザクション未提出状態にあるデータベース操作命令に対してリバースデータベース操作命令を生成して、前記リバースデータベース操作命令を実行することと、を含む。
【０１０６】
本実施例において記憶媒体をさらに提供し、前記記憶媒体にはコンピュータープログラムが記憶され、前記コンピュータープログラムは実行されると本実施例に記載の方法を実現するように構成される。
【実施例５】
【０１０７】
本実施例においてグローバルな一貫性を確保する分散データベースデータ同期装置及び方法を説明する。図８は本開示の実施例５に係るグローバルな一貫性を確保する分散データベースデータ同期装置の構成を示す図である。
【０１０８】
図８に示すように、本開示による前記グローバルな一貫性を確保する分散データベースデータ同期装置は、以下の同期クロックモジュール８２、グローバルトランザクション管理モジュール８４、管理モジュール８６、一貫性フィルタモジュール８８を含む。
【０１０９】
分散データベースクラスタは、複数のデータベース群８０からなり、各データベース群８０は複数の独立したデータベースノードからなり、群内のデータベースノードのデータは完全に一致し、群内のデータベースノードにおいて、１つのノードのみが外部向けに書き込みサービスを提供してマスターデータベースと呼ばれ、他のデータノードはデータベース間のコピー技術によって、データをローカルに同期させ、バックアップデータベースと呼ばれる。外部向けにデータサービスの形でアプリケーションにデータベース機能を提供し、アプリケーションに、例えばＳＱＬインタフェース等の統一した標準インタフェースを提供する。
【０１１０】
同期クロックモジュール８２は、定期的に分散データベース内の各マスターデータノードへＳＱＬステートメントを送信するように構成され、載せられる情報としては、同期クロックモジュール８２のタイムスタンプ及び現在のグローバルなアクティブトランザクションリストがある。
【０１１１】
グローバルトランザクション管理モジュール８４は、分散型環境でのグローバルで一意的なトランザクションＩＤを統合管理するように構成され、グローバルトランザクションＩＤは、１つのグローバルトランザクションを一意に識別し、同時に、各グローバルトランザクションの状態とライフサイクルを記録する。クラスタ内の各トランザクションはいずれも、グローバルトランザクション管理モジュール８４に一意的なトランザクションＩＤの構築を要求して、データ行に挿入する。
【０１１２】
管理モジュール８６は、分散データベースクラスタのネットワーク構成情報を統合管理するように構成される。
【０１１３】
一貫性フィルタモジュール８８は、グローバルのアクティブトランザクションＩＤを用いて、データに対してグローバルな一貫性フィルタを行い、フィルタルールに従って、所定のデータ対象（ベース、テーブル）を含むＳＱＬステートメントをフィルタする。
【０１１４】
データ同期モジュール８１０は、分散データベース内のマスターデータベースノードのログを収集し、ログを解析してＳＱＬステートメントを生成し、ＳＱＬステートメントブロックメッセージをパック圧縮して伝送し、ＳＱＬメッセージを永続化し、ＳＱＬの行を並列して再生するように構成される。
【０１１５】
以上の構成に基づいて、データ同期中に、まず主バックアップクラスタにおいて同期テーブルを構築し、同期テーブルには主に、タイムスタンプ情報とグローバルなアクティブトランザクションリストとの２つの情報が含まれる。同期クロックモジュール８２は定期的にグローバルトランザクション管理モジュール８４へ現在のアクティブトランザクションリストを要求して、グローバルトランザクション管理モジュール８４の応答を得た後、マスタークラスタのすべてのマスターデータベースへ１つの挿入ステートメントを送信し、挿入して現在のアクティブグローバルトランザクションリストのタイムスタンプ及び現在のグローバルなアクティブトランザクションリスト情報を取得する。
【０１１６】
マスタークラスタのデータ同期モジュール８１０は、定期的にマスタークラスタ内のマスターデータノードのログファイルを収集し、バックアップクラスタの同期要求を受信した後、ログファイルに対してリバース解析を行って、ＳＱＬステートメントを生成し、同期クロックを用いて、ＳＱＬステートメントストリームをブロックに分割し、また、一貫性モジュールによって、ＳＱＬステートメントに対して一貫性と所定のルールのフィルタを行い、最後に、フィルタ後のＳＱＬステートメントブロックを圧縮して送信キューに入れる。
【０１１７】
その後、スレッドを送信して、送信キューにおけるメッセージをバックアップクラスタのデータ同期モジュール８１０へ送信する。バックアップクラスタにおけるデータ同期モジュール８１０は、ＳＱＬブロックメッセージを受信した後、ＳＱＬメッセージを内部メモリの受信キューに入れて、書き込みスレッドを呼び出して、受信キューにおけるＳＱＬステートメントブロックをファイルに永続化してから、再生スレッドを開始させてファイルにおけるステートメントブロックを幾つかのタスクに分割してワーカースレッドに渡して、データをバックアップクラスタのデータベースノードに同期させる。
【０１１８】
以上のプロセスによって、マスタークラスタ内の各データノードのログファイルをクラスタの統一時間でスライスし、スライスにおけるトランザクションは業務の違いに応じて、マスター／バックアップクラスタで統合処理を行って同時に成功するか又は同時に失敗する。バックアップクラスタでのデータがリアルタイムに一致するか、又は最終的に一致するように確保する。これに基づいて、バックアップクラスタは、スライス内のトランザクションをテーブル名と主キー値に応じて配布し、マルチのスレッドを並列に実行して、並列送信の不足によって再生性能が低下する問題を解決する。
【０１１９】
図９は本開示の実施例５に係るデータ同期方法の詳細な作業フローチャートである。
【０１２０】
図９に示すように、このグローバルな一貫性を確保する分散データベースデータ同期方法は以下のステップＳ９０２、Ｓ９０４、Ｓ９０６、Ｓ９０８、Ｓ９１０、Ｓ９１２、Ｓ９１４、Ｓ９１６、Ｓ９１８を含む。
【０１２１】
ステップＳ９０２において、マスタークラスタのデータ同期モジュール８１０がオンされると、初期化して定期的にメタデータタスクスレッドを取得して、データ同期モジュール８１０に接続されるデータベースノードがデータベース群８０におけるマスターノードであるように確保する。スレッドを開始させて、定期的に管理ノードへ状態を報知する。バックアップクラスタのデータ同期モジュール８１０がオンされると、構成ファイルに応じて初期化してワーカースレッドプールを並行送信し、初期化メッセージをスレッドに書き込み、ＳＱＬ再生スレッド及びガベージコレクションスレッドが開始されると、まずマスタークラスタのデータ同期モジュール８１０にログ同期位置を送信する。
【０１２２】
ステップＳ９０４において、マスタークラスタのデータ同期モジュール８１０は、定期的に取得／同期クラスタネットワーク構成データ要求を管理モジュール８６に送信し、管理モジュール８６の応答を受信した後、内部メモリにおけるデータと比較する。データが空きであると、現在のデータによって内部メモリの構造を初期化し、データがあると、データベース群８０順でデータが一致するか否かを比較し、一致すると処理せず、一致しないと、データベースノードに接続されたか否かに応じて、直ちにデータ情報を更新するかを決める。
【０１２３】
ステップＳ９０６において、マスタークラスタのデータ同期モジュール８１０がオンされてクラスタネットワーク構成情報を同期させた後、バックアップクラスタのデータ同期モジュール８１０による同期位置要求情報のプッシュ通知を待機し、同期位置情報を受信した後、現在の位置に従って、新規のタスクを開始する。
【０１２４】
ステップＳ９０８において、マスタークラスタのデータ同期モジュール８１０が、同期位置に従ってデータベースの接続を起こし、ログファイルを解析するために内部メモリを初期化し、データベースからプッシュ通知されたログ情報を循環受信し、その後、実施例６に示すＳＱＬステートメントのブロック分割プロセスに移行する。実際の配置に応じて、ＳＱＬステートメントブロックを一貫性フィルタモジュール８８に送信する。
【０１２５】
ステップＳ９１０において、ＳＱＬステートメントブロックに対してグローバルな一貫性フィルタとルールによるフィルタを行う。具体的なプロセスについては実施例８の図１２又は図１３を参照することができる。
【０１２６】
ステップＳ９１２において、マスタークラスタのデータ同期モジュール８１０は、バックアップクラスタのデータ同期モジュール８１０から送信されたＳＱＬステートメントブロック要求を受信した時、まずメッセージを再送信する必要があるか否かを判断し、再送信する必要があれば、直接送信キューのメッセージを送信し、再送信する必要がなければ、送信バッファキューからメッセージを選択してバックアップクラスタのデータ同期モジュール８１０に送信する。
【０１２７】
ステップＳ９１４において、バックアップクラスタのデータ同期モジュール８１０はメッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行う。その後、ＳＱＬステートメントブロックメッセージが書き込みキューに入れられ、書き込みスレッドによって、メッセージを書き込みキューからＳＱＬ再生ファイルに永続化し、その後、受信キューに詰まっているメッセージがあるか否かを検査し、あれば、中断されたスレッドを覚醒し、なければ、現在のメッセージ群が終了したか否かを判断し、データ同期位置を更新した後、書き込みキューを循環読み取りする。
【０１２８】
ステップＳ９１６において、バックアップクラスタデータ同期モジュール８１０のＳＱＬ再生スレッドが、ＳＱＬ再生ファイルを解析し、２つの同期クロック間のトランザクションステートメントブロックを解析して行単位で分割し、具体的な方法については実施例７に記載のＳＱＬ行並列処理（ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｉｎｇ  ｏｆ  ＳＱＬ  ｓｔａｔｅｍｅｎｔ  ｌｉｎｅｓ）のプロセスを参照することができる。ステートメントブロックの行並列による再生に成功した後、再生に異常が発生して回復する際に用いるように、データ再生の位置をファイルに永続化する。
【０１２９】
ステップＳ９１８において、バックアップクラスタのデータ同期モジュール８１０のデータクリーニングスレッドが、保存時間を超えており且つ再生に成功したデータを定期的にクリーニングする。
【０１３０】
上述のように、この方法によると、同期クロックモジュール８２によって、クラスタ全体に統一されたクロックを提供して、データを統一にスライス処理する。一貫性フィルタモジュール８８によって、スライスされたデータに対してグローバルな一貫性フィルタを行うとともに、災害復元指標ＲＰＯ（復元点目標、すなわちシステムが最大にどの程度のデータを失うことを許容するか）とＲＴＯ（復元時間目標、すなわち、システムが災害発生から復元まで実行される時間）の要求及び業務のデータフィルタと抽出に対するニーズを考慮して、同期クロックモジュール８２、グローバルトランザクション管理モジュール８４、一貫性フィルタモジュール８８、データ同期モジュール８１０をさまざまに配列すると、１都市マルチタスク、遠隔地災害復旧、データのサブスクリプション及びデータの抽出等のさまざまな業務の状況を効率的に満たすことができるとともに、分散型環境でのデータクラスタ間のグローバルな一貫性を確保し、遠隔地にあるクラスタが急速に業務を引き取ることができ、非常に特別なハイライト機能であり、分散データベースの金融分野、インターネット分野、教育分野等での普及のために良好な促進作用を果たす。
【実施例６】
【０１３１】
図１０は本開示の実施例６に係るＳＱＬステートメント分割パケット（ｓｐｌｉｔｔｉｎｇ  ａｎｄ  ｅｎｃａｐｓｕｌａｔｉｎｇ  ｏｆ  ＳＱＬ  ｓｔａｔｅｍｅｎｔｓ）を
示す図である。
【０１３２】
図１０に示すように、同期クロックモジュール８２は定期的にデータベースへ同期クロックＳＱＬステートメントを送信する。対応するステートメントは最終的にデータベースログに置かれる。
【０１３３】
データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、同期クロックＳＱＬステートメントを用いてアプリケーションＳＱＬに対して分割を行い、具体的な方法としては、２つの同期クロックＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングすることである。
【０１３４】
ステートメントブロックをフィルタした後、パックし圧縮して、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【実施例７】
【０１３５】
図１１は本開示の実施例７に係るＳＱＬステートメント行並列処理を示すフローチャートである。
【０１３６】
図１１に示すように、ＳＱＬステートメントブロックはデータ行によって、複数のトランザクションに分割され、具体的な方法は以下の通りである。
【０１３７】
テーブル名と主キーに応じてデータ行を選択し、同一のデータ行のＳＱＬは前後順で１つのトランザクションを構成し、異なるデータ行のＳＱＬを異なるワーカースレッドに渡して処理させる。
【０１３８】
ワーカースレッドは再生に成功するように１組のＳＱＬステートメントを並列処理し、その後、次のＳＱＬステートメントブロックを読み取る。
【実施例８】
【０１３９】
本実施例においてリアルタイムなグローバルな一貫性フィルタと最終的なグローバルな一貫性フィルタとの２種類のフィルタ方式の具体的なプロセスを説明する。
【０１４０】
図１２は本開示の実施例８に係るリアルタイムなグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【０１４１】
ステップＳ１２０２において、まず、同期テーブルから直近の記録を探す。
【０１４２】
ステップＳ１２０４において、この記録から直近に同期させた際のグローバルなアクティブトランザクションリストを取得する。
【０１４３】
ステップＳ１２０６において、グローバルなアクティブトランザクションＩＤを用いて、ＳＱＬステートメントブロックに対してフィルタを行う。
【０１４４】
ステップＳ１２０８において、ステートメントブロックにおけるグローバルな提出済のＳＱＬステートメントに対して、配置データ対象フィルタルールがあるか否かを判定し、あれば、ステップＳ１２１０を実行し、なければ送信キューを提出する。
【０１４５】
ステップＳ１２１０において、フィルタルールに従って、係るＳＱＬステートメントをフィルタして、送信キューを提出する。
【０１４６】
ステップＳ１２１２において、グローバルな未提出のＳＱＬステートメントに対して、バッファキューに格納する。
【０１４７】
ステップＳ１２１４において、次の組のステートメントのフィルタを行う前に、まず、バッファキューにおけるＳＱＬステートメントをステートメントブロックに合併する。
【０１４８】
図１３は本開示の実施例８に係る最終的なグローバルな一貫性フィルタを示すフローチャートであり、以下にそのプロセスを説明する。
【０１４９】
ステップＳ１３０２において、マスタークラスタとバックアップクラスタとの切り替えを行う必要があると、バックアップクラスタが、すべてのデータノードの同期テーブルから直近の同期クロック記録を探し出す。
【０１５０】
ステップＳ１３０４において、すべての直近の同期クロック記録を比較して、タイムスタンプの最も早い同期クロック記録時間（Ｔ０）を探し出して切り替えの一致点とする。
【０１５１】
ステップＳ１３０６において、時刻Ｔ０よりも後に同期クロックメッセージを受信したすべてのデータノードを探し出す。
【０１５２】
ステップＳ１３０８において、ログファイルを解析して、時刻Ｔ０へ戻るすべてのリバースＳＱＬステートメントを生成し、ＳＱＬステートメントを実行して、ノードデータを時刻Ｔ０の同期クロックメッセージを受信した時刻にロールバックし、これにより、クラスタ内のすべてのノードのデータがいずれも１つの時点（時刻Ｔ０）に揃えられる。
【０１５３】
ステップＳ１３１０において、同期クロックテーブルにおけるこの時点（Ｔ０）の現在のグローバルなアクティブトランザクションＩＤを用いて、バックアップクラスタデータノードのログファイルにおける対応するＳＱＬステートメントをフィルタし、これらのステートメントは単一の点で提出されたが、グローバルではトランザクション未提出状態にある。これらのトランザクションはグローバルなアクティブ状態にある。
【０１５４】
ステップＳ１３１２において、リバースＳＱＬステートメントを生成して実行し、最終的に分散データベースバックアップクラスタがグローバルな一貫性の状態になる。
【０１５５】
以下、実施例９乃至１２において本開示の方法を異なる状況に適用した場合の具体的な処理プロセスを説明する。
【実施例９】
【０１５６】
この実施例において分散データベースの非同期データの同期高性能モード（すなわち、最終的なグローバルな一貫性態様）を説明する。
【０１５７】
図１４は本開示の実施例９に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【０１５８】
図１４に示すように、この実施例において２つのクラスタシステムがあり、マスター分散データベースクラスタによりデータをバックアップクラスタに同期させ、２つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行わず、業務によるクラスタの切り替えが行われる時のみにグローバルな一貫性フィルタを１回行う。分散データベースの非同期データの同期高性能モードでの処理プロセスは以下のステップを含む。
【０１５９】
１．同期クロックモジュール８２は、データベースへ同期ＳＱＬステートメントを送信する。
【０１６０】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１６１】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。ＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１６２】
４．バックアップクラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ＳＱＬステートメントを並列再生して、データ同期の目的を達成する。
【０１６３】
５．一貫性フィルタモジュール８８は、マスタークラスタとバックアップクラスタとの切り替えを行う必要がある場合のみオンされる。フィルタステップについては図１３を参照することができる。
【０１６４】
この実施例は災害復旧システムにおいてＲＰＯ指標に対する要求が高い場合に適用され、データが効率的に相手側のクラスタに伝送されて永続化されることができ、ＲＰＯができるだけ小さくなるように確保する。
【実施例１０】
【０１６５】
この実施例において分散データベースクラスタのデータ同期高性能モード（すなわち、リアルタイムなグローバルな一貫性態様）を説明する。
【０１６６】
図１５は本開示の実施例１０に係る分散データベースクラスタのデータ同期高性能モードでのシステム構成を示す図である。
【０１６７】
図１５に示すように、この実施例において２つのデータベースクラスタシステムがあり、マスターデータベースクラスタによりデータをバックアップクラスタに同期させ、２つのクラスタのネットワーク構成は一致する。データ同期中には一貫性フィルタを行い、これにより、バックアップクラスタに同期されたデータが常に一貫状態にある。分散データベースクラスタのデータ同期高性能モードでの処理プロセスは以下のステップを含む。
【０１６８】
１．同期クロックモジュール８２が、データベースへ同期ＳＱＬステートメントを送信する。
【０１６９】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１７０】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１７１】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルトランザクション提出済状態にあるステートメントをフィルタし、具体的なプロセスについては図１２を参照することができる。
【０１７２】
５．グローバルトランザクション提出済のＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキュー中に入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１７３】
６．バックアップクラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ＳＱＬステートメントを並列再生して、データ同期の目的を達成する。毎回同期されるＳＱＬステートメントブロックはいずれもグローバルで一貫するので、バックアップクラスタデータベース内のデータが常にグローバルな一貫性の状態にある。
【０１７４】
この実施例は、災害復旧システムにおいてＲＴＯ指標に対する要求が高い場合に適用される。業務はいつでも相手側の分散データベースクラスタを引き取ることができ、ＲＴＯはゼロであることができる。
【実施例１１】
【０１７５】
この実施例において分散データベースに基づいて増分データをサブスクリプションする場合のデータ同期（準リアルタイムなバックアップ）を説明する。
【０１７６】
図１６は本開示の実施例１１に係る分散データベースを準リアルタイムにバックアップするシステムの構成を示す図である。
【０１７７】
図１６に示すように、この実施例において２つのデータベースクラスタがあり、その中の遠隔データベースクラスタをサブスクリプション業務システムクラスタのデータベースクラスタとし、２つのクラスタのネットワーク構成は一致しないこともできる。分散データベースに基づいて増分データをサブスクリプションする場合の準リアルタイムなバックアッププロセスは以下のステップを含む。
【０１７８】
１．同期クロックモジュール８２は、定期的にデータベースへ同期ＳＱＬステートメントを送信する。
【０１７９】
２．データベースは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１８０】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１８１】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルなアクティブＳＱＬステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時に、ステートメントブロックに合併する。このようにフィルタされたＳＱＬステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、サブスクリプションルールに従って、係るデータ対象（データベース、テーブル）にフィルタを行う。
【０１８２】
５．フィルタ後のグローバルトランザクション提出済のＳＱＬステートメントブロックに対して、パックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出して相手側データ同期モジュール８１０へ送信する。
【０１８３】
６．遠隔クラスタのデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、クラスタのネットワーク構成状況に応じて、ＳＱＬステートメントを並列再生して、準リアルタイムにデータをバックアップする目的を実現する。
【実施例１２】
【０１８４】
この実施例において分散データベースの増分データに基づくデータ同期（データ抽出）を説明する。
【０１８５】
図１７は本開示の実施例１２に係る分散データベースの増分データに基づくデータ抽出を示すシステム構成を示す図である。
【０１８６】
図１７に示すように、この実施例においてデータを発生するためのオンライントランザクション処理システム（ＯＬＴＰ）と主にデータ分析業務を行うオンライン分析システム（ＯＬＡＰ）やデータウェアハウスシステム（ＢＩ）との２種類の業務システムがあり、図面においてはデータをオンラインで分析するビッグデータプラットフォーム（例えば、Ｈａｄｏｏｐに基づくデータウェアハウス工具Ｈｉｖｅ、構造化データを処理するための汎用のクラスタ計算フレームワーク（Ｓｐａｒｋ）素子Ｓｐａｒｋ  ＳＱＬ、Ｈａｄｏｏｐの分散ファイルシステム（Ｈａｄｏｏｐ  Ｄｉｓｔｒｉｂｕｔｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ、ＨＤＦＳと略称）等を含む）を例にする。
【０１８７】
ＯＬＴＰシステムは、ビッグデータプラットフォームが分析して発掘するように、データをビッグデータプラットフォームに導入する。分散データベース増分データに基づくデータ抽出は以下のステップを含む。
【０１８８】
１．同期クロックモジュール８２は、定期的にデータベースへ同期ＳＱＬステートメントを送信する。
【０１８９】
２．ＯＬＴＰタイプ業務データベースクラスタは、定期的にログファイルをデータ同期モジュール８１０にプッシュ通知する。
【０１９０】
３．データ同期モジュール８１０は、データベースからプッシュ通知されたログを受信した後、ログに対して解析を行い、２つの同期ＳＱＬ間のすべてのＳＱＬを１つのメッセージブロックと見なして、１つのステートメントブロックにパッケージングする。
【０１９１】
４．一貫性フィルタモジュール８８は、グローバルなアクティブトランザクションＩＤを用いて、このステートメントブロックにおけるグローバルなアクティブＳＱＬステートメントをアクティブステートメントキューにバッファし、次のステートメントブロックのフィルタを行う時にステートメントブロックに合併する。このようにフィルタされたＳＱＬステートメントはいずれもグローバルトランザクション提出済状態のステートメントである。その後、データ抽出ルールに従って、係るデータ対象（データベース、テーブル）にフィルタを行う。
【０１９２】
５．抽出された後のグローバルトランザクション提出済のＳＱＬステートメントブロックをパックし圧縮した後、送信バッファキューに入れ、その後、送信スレッドによってバッファキューからＳＱＬステートメントメッセージを取り出してビッグデータプラットフォーム側のデータ同期モジュール８１０へ送信する。
【０１９３】
６．ビッグデータプラットフォーム側のデータ同期モジュール８１０は、メッセージパケットを受信した後、メッセージを受信リストに入れる。メッセージパケットのチェックを行った後、ＳＱＬステートメントブロックメッセージがＳＱＬ再生ファイルに永続化され、その後、ＳＱＬ再生スレッドによってＳＱＬ再生ファイルを解析し、２つの同期メッセージ間のトランザクションステートメントブロックを解析して行単位で分割し、ビッグデータプラットフォームのデータ計算レイヤに並列再生して、計算レイヤによってＳＱＬ計算を行って、データ計算結果をビッグデータプラットフォームの記憶システムに更新する。
【０１９４】
上述のように、本開示による分散データベースクラスタシステムとデータ同期方法によると、分散データベースクラスタの教育、金融、政府及び企業、インターネットなどの分野での応用を拡張し、システム資源の投入を節約し、システムの性能を向上させ、データの一貫性を確保し、ユーザの使用体験を向上させることができる。分散データベースの普及のために良好な模範的な役割を果たすことになる。
【０１９５】
上述した本開示の各モジュール又は各ステップを汎用の計算装置によって実現することができ、１つの計算装置に集中させることができ、又は複数の計算装置からなるネットワークに分布させることもでき、また、計算装置が実行可能なプログラムコードによって実現してそれを記憶装置に記憶して計算装置に実行させることもでき、場合によって、図示又は説明したステップをここに示す順とは異なる順で実行することもでき、又はそれぞれ集積回路モジュールに制作し、又はその中の複数のモジュール又はステップを１つの集積回路モジュールとすることができることを当業者は理解できる。このように、本開示は特定のハードウェアとソフトウェアとの組合せに限定されない。
【０１９６】
以上は、本開示の好適な実施例に過ぎず、本開示を限定するものではなく、当業者であれば本開示にさまざまな修正や変形が可能である。本開示の原則内でのすべての修正、同等置換、改良などはいずれも本開示の保護範囲内に含まれる。
【国際調査報告】
2021513715.tif 000020
2021513715.tif 000021
2021513715.tif 000022
2021513715.tif 000023