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

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

▶ ▲騰▼▲訊▼科技(深▲セン▼)有限公司の特許一覧

特許7362190ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム
<>
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図1
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図2
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図3
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図4
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図5
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図6
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図7
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図8
  • 特許-ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-06
(45)【発行日】2023-10-17
(54)【発明の名称】ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム
(51)【国際特許分類】
   G06F 16/22 20190101AFI20231010BHJP
   G06F 16/28 20190101ALI20231010BHJP
【FI】
G06F16/22
G06F16/28
【請求項の数】 15
(21)【出願番号】P 2022519003
(86)(22)【出願日】2020-11-04
(65)【公表番号】
(43)【公表日】2022-11-30
(86)【国際出願番号】 CN2020126397
(87)【国際公開番号】W WO2021139376
(87)【国際公開日】2021-07-15
【審査請求日】2022-03-24
(31)【優先権主張番号】202010018746.0
(32)【優先日】2020-01-08
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】517392436
【氏名又は名称】▲騰▼▲訊▼科技(深▲セン▼)有限公司
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100150197
【弁理士】
【氏名又は名称】松尾 直樹
(72)【発明者】
【氏名】▲龍▼ ▲剣▼
(72)【発明者】
【氏名】▲張▼ 文▲亮▼
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】米国特許出願公開第2012/0143912(US,A1)
【文献】特開平05-334165(JP,A)
【文献】特開2013-171483(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
コンピュータ装置が実行するストレージエンジンにおけるデータインデックス付け方法であって、
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得するステップと、
前記ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定するステップであって、前記ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれる、ステップと、
前記第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定するステップであって、前記第2のインデックステーブルは、前記第1のインデックステーブルに基づいて行識別子を追加することによって得られ、前記行識別子は、前記ターゲットインデックスデータにおける行データを指示するためのものであり、前記第2のストレージエンジンは、前記ターゲットトランザクションの実行をサポートする、ステップと、
前記第2のインデックステーブルから、前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定するステップであって、前記インデックスデータは前記ターゲットインデックスデータに含まれる、ステップと、
を含む方法。
【請求項2】
前記第2のインデックステーブルから前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する前記ステップは、
前記第1のストレージエンジンにおける前記ターゲットトランザクションの前記データインデックス条件を取得して、前記データインデックス条件によって指示される行識別子を決定するステップと、
前記データインデックス条件によって指示される行識別子に基づき、前記第2のインデックステーブルにおける行識別子に対応する行データを決定するステップと、
前記第2のインデックステーブルにおける行識別子に対応する行データに基づき、対応するインデックスデータを決定するステップと、
を含む請求項1に記載の方法。
【請求項3】
前記データインデックス条件は、ターゲットインデックス値を含み、
前記第2のインデックステーブルから前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する前記ステップは、
前記ターゲットインデックス値に基づき、前記少なくとも1つの第2のインデックステーブルから、対応する第2のインデックステーブルを決定するステップと、
前記対応する第2のインデックステーブルにおける前記ターゲットインデックス値に対応する行データを決定して、対応するインデックスデータを取得するステップと、
を含む請求項1に記載の方法。
【請求項4】
前記ターゲットトランザクションにおけるデータ操作情報を決定するステップであって、前記データ操作情報は、データの挿入、更新又は削除を指示するためのものである、ステップと、
前記データ操作情報に基づき、前記第2のインデックステーブルを更新するステップと、
をさらに含む請求項1~3の何れか一項に記載の方法。
【請求項5】
前記データ操作情報に基づき前記第2のインデックステーブルを更新する前記ステップは、
前記データ操作情報に基づき、前記第1のインデックステーブルにおける変更情報を決定するステップと、
前記変更情報に基づき、前記第2のインデックステーブルにおける対応する行識別子を決定するステップと、
前記第2のインデックステーブルにおける対応する行識別子に基づいて、前記第2のインデックステーブルにおける前記変更情報の対応するアイテムを決定して、前記第2のインデックステーブルを更新するステップと、
を含む請求項4に記載の方法。
【請求項6】
前記第2のインデックステーブルにおける対応する行識別子に基づいて、前記第2のインデックステーブルにおける前記変更情報の対応するアイテムを決定して、前記第2のインデックステーブルを更新した後、さらに、
前記変更情報に基づき、前記第1のストレージエンジンに対応するバージョン番号を決定して、前記第2のストレージエンジンにおいてログテーブルを生成するステップと、
前記ログテーブルにおける隣接する前記第1のストレージエンジンのバージョン番号のデータ対応状況を決定して、データリカバリを実行するステップと、
を含む請求項5に記載の方法。
【請求項7】
前記ログテーブルにおける隣接する前記第1のストレージエンジンのバージョン番号のデータ対応状況を決定して、データリカバリを実行する前記ステップは、
前記変更情報に対応する処理フローを決定するステップと、
前記処理フローに少なくとも1つの故障検出点を設置するステップであって、前記故障検出点は、前記第1のストレージエンジンと前記第2のストレージエンジンのインタラクションプロセスに基づいて決定される、ステップと、
前記故障検出点に基づいて、隣接する前記第1のストレージエンジンのバージョン番号のデータ対応状況を決定して、データリカバリを実行するステップと、
を含む、請求項6に記載の方法。
【請求項8】
データリカバリを実行する前記ステップは、
前記第2のストレージエンジンにおける前記ログテーブルに記録されているバージョン番号を決定するステップと、
前記変更情報に基づき、前記第1のストレージエンジンのバージョン番号を決定するステップと、
前記ログテーブルに記録されているバージョン番号と前記第1のストレージエンジンのバージョン番号を比較して、差異レコードを生成するステップと、
前記差異レコードに基づき、前記第1のインデックステーブル及び前記第2のインデックステーブルを更新するステップと、
を含む請求項6に記載の方法。
【請求項9】
前記ターゲットトランザクションにおけるデータベーススキーマ情報を決定するステップと、
前記データベーススキーマ情報に基づき、前記第2のインデックステーブルを更新するステップと、
をさらに含む請求項1から8のいずれか1項に記載の方法。
【請求項10】
前記データベーススキーマ情報は、少なくとも1つのインデックスモードを含み、
前記データベーススキーマ情報に基づき前記第2のインデックステーブルを更新する前記ステップは、前記インデックスモードに基づいて、前記第2のインデックステーブルを分類して、前記第2のインデックステーブルを更新するステップを含み、
前記インデックスモードは、主キーインデックス、ユニークインデックス又は通常のインデックスを含む、
請求項9に記載の方法。
【請求項11】
前記第2のインデックステーブルの行識別子によって指示される行データは、前記ターゲットインデックスデータにおけるインデックス列に対応し、前記インデックス列は、前記ターゲットトランザクションに基づいて得られ、前記データベーススキーマ情報に基づき前記第2のインデックステーブルを更新するステップは、
前記データベーススキーマ情報における前記行データに対する処理情報を取得するステップと、
前記処理情報に基づいて、対応するインデックス列の変更データを抽出するステップと、
前記インデックス列の変更データに基づき、前記第2のインデックステーブルを更新するステップと、
を含む請求項9に記載の方法。
【請求項12】
前記第1のストレージエンジンは、マルチステートメント同時トランザクションをサポートせず、前記第2のストレージエンジンは、前記マルチステートメント同時トランザクションをサポートする請求項1~11の何れか一項に記載の方法。
【請求項13】
データインデックス付け装置であって、
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得するための取得ユニットと、
前記ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定するための決定ユニットであって、前記ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれる、決定ユニットと、
前記第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定するためのマッピングユニットであって、前記第2のインデックステーブルは、前記第1のインデックステーブルに基づいて行識別子を追加することによって得られ、前記行識別子は、前記ターゲットインデックスデータにおける行データを指示するためのものであり、前記第2のストレージエンジンは、前記ターゲットトランザクションの実行をサポートする、マッピングユニットと、
前記第2のインデックステーブルから、前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定するためのインデックスユニットであって、前記インデックスデータは、前記ターゲットインデックスデータに含まれる、インデックスユニットと、
を含む装置。
【請求項14】
プロセッサー及びメモリを含むコンピュータ装置であって、
前記メモリは、プログラムコードを記憶し、前記プロセッサーは、前記プログラムコードにおける命令に基づき、請求項1から12のいずれか1項に記載のデータインデックス付け方法を実行するコンピュータ装置。
【請求項15】
コンピュータ上で実行されるときに、前記コンピュータに請求項1から12のいずれか1項に記載のデータインデックス付け方法を実行させる命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、コンピュータ技術の分野に関し、特に、ストレージエンジンにおけるデータインデックス付けに関する。
【0002】
本出願は、2020年01月08日にて中国専利局に提出された、出願号が202010018746.0であって、発明の名称が「ストレージエンジンにおけるデータインデックス付け方法及び関連装置」である中国特許出願の優先権を主張し、その全内容を本出願に援用する。
【背景技術】
【0003】
クラウド技術の発展に伴い、人々の生活に登場するアプリケーションがますます増えており、クラウド技術では、データインタラクションを実現するために、データベースを必要とする。データベースは、簡単に言えば、電子ファイルが保存される電子ファイリングキャビネットと見なすことができ、ユーザーは、ファイルにおけるデータに対して追加、クエリ、更新、削除などの操作を行うことができる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
一般に、複数のストレージエンジンをサポートするデータベース管理システムであるMySQLを、様々な適用シナリオに使用することができる。ここで、異なるストレージエンジンの、トランザクションに対するサポート能力が異なってもよい。例えば、InnoDBストレージエンジンは、完全なトランザクションサポートを実現し、分散トランザクションのXAプロトコルもサポートし、MyISAMストレージエンジンは、拡張しやすく、また、NEWDBエンジンは、シングルステートメントのトランザクションをサポートする。これにより、様々なシナリオのデータインデックス付けプロセスを実現する。
【0005】
これに鑑みて、本出願は、ストレージエンジン適用プロセスの複雑さ及びコードの冗長性を効果的に低減し、データインデックス付けプロセスの効率を向上させることができるデータインデックス付け方法を提供する。
【課題を解決するための手段】
【0006】
一態様では、本出願の実施例は、端末装置におけるデータインデックス付け機能を含むシステム又はプログラムに適用することができるデータインデックス付け方法を提供し、具体的に、
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得するステップと、
前記ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定するステップであって、前記ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれるステップと、
前記第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定するステップであって、前記第2のインデックステーブルは、前記第1のインデックステーブルに基づいて行識別子を追加することによって得られ、前記行識別子は、前記ターゲットインデックスデータにおける行データを指示するためのものであり、前記行データは、前記ターゲットインデックスデータにおけるインデックス列に対応し、前記インデックス列が前記ターゲットトランザクションに基づいて得られ、前記第2のストレージエンジンが前記ターゲットトランザクションの実行をサポートするステップと、
前記第2のインデックステーブルから、前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定するステップであって、前記インデックスデータは、前記ターゲットインデックスデータに含まれるステップと、を含む。
【0007】
別の態様では、本出願の実施例は、データインデックス付け装置を提供し、
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得するための取得ユニットと、
前記ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定するための決定ユニットであって、前記ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれる決定ユニットと、
前記第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定するマッピングユニットであって、前記第2のインデックステーブルは、前記第1のインデックステーブルに基づいて行識別子を追加することによって得られ、前記行識別子が、前記ターゲットインデックスデータにおける行データを指示するためのものであり、前記行データが、前記ターゲットインデックスデータにおけるインデックス列に対応し、前記インデックス列が、前記ターゲットトランザクションに基づいて得られ、前記第2のストレージエンジンが前記ターゲットトランザクションの実行をサポートするマッピングユニットと、
前記第2のインデックステーブルから、前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定するためのインデックスユニットであって、前記インデックスデータが前記ターゲットインデックスデータに含まれるインデックスユニットと、を含む。
【0008】
別の態様では、本出願の実施例は、メモリ、プロセッサー及びバスシステムを含むコンピュータ装置を提供し、前記メモリは、プログラムコードを記憶し、前記プロセッサーは、前記プログラムコードにおける命令に基づき、上記の態様で説明したデータインデックス付け方法を実行する。
【0009】
さらに別の態様では、本出願の実施例は、記憶媒体を提供し、前記記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムは、上記の態様で説明したデータインデックス付け方法を実行する。
【0010】
さらに別の態様では、本出願の実施例は、コンピュータ上で実行されるときに、上記の態様のデータインデックス付け方法を前記コンピュータに実行させるための命令を含むコンピュータプログラム製品を提供する。
【0011】
以上の技術的解決策から分かるように、本出願の実施例は、以下の利点を有する。
【0012】
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得し、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定し、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれ、次に、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定し、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、行識別子は、ターゲットインデックスデータにおける行データを指示するために使用され、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートし、さらに、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現し、新しいストレージエンジン導入による開発の複雑さが軽減されるため、複数のストレージエンジンのコード再利用を実現し、データベースのインデックス付け効率が向上し、さらに、第2のストレージエンジンの機能設計により、第1のストレージエンジンは、それ自体には搭載されていない機能を実行することができるようになり、データベースの適用範囲及びインデックス付け効率をさらに向上させる。
【図面の簡単な説明】
【0013】
図1】データインデックス付けシステムの動作のネットワークアーキテクチャ図である。
図2】本出願の実施例によるデータインデックス付けのフローアーキテクチャ図である。
図3】本出願の実施例によるデータインデックス付け方法のフローチャートである。
図4】本出願の実施例によるインデックステーブルの更新フローの概略図である。
図5】本出願の実施例による別のデータインデックス付け方法のフローチャートである。
図6】本出願の実施例によるデータ挿入操作フローの概略図である。
図7】本出願の実施例によるデータリカバリの方法のフローチャートである。
図8】本出願の実施例によるデータインデックス付け装置の構成概略図である。
図9】本出願の実施例による別のデータインデックス付け装置の構成概略図である。
【発明を実施するための形態】
【0014】
本出願の実施例は、端末装置におけるデータインデックス付け機能を含むシステム又はプログラムに適用することができるデータインデックス付け方法及び関連装置を提供する。データインデックス付けプロセスを指示するターゲットトランザクションを取得し、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定し、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれる。次に、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定し、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、行識別子は、ターゲットインデックスデータにおける行データを指示するためのものであり、行データは、ターゲットインデックスデータにおけるインデックス列に対応し、インデックス列は、ターゲットトランザクションに基づいて得られ、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートする。さらに、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現し、新しいストレージエンジン導入による開発の複雑さが軽減されるため、複数のストレージエンジンのコード再利用を実現し、データベースのインデックス付け効率を向上させる。さらに、第2のストレージエンジンの機能設計により、第1のストレージエンジンは、それ自体には搭載されない機能を実行することができるようになり、データベースの適用範囲及びインデックス付け効率をさらに向上させる。
【0015】
まず、本出願の実施例に現れるいくつかの用語について説明する。
【0016】
MySQL:リレーショナルデータベース管理システムであり、プラグウインアーキテクチャを使用し、複数のストレージエンジンを同時にサポートすることができる。
【0017】
ストレージエンジン:データベース管理システムのデータ記憶及びトランザクション管理などの機能を担当し、データベースシステムのコアモジュールである。MySQLは、複数の異なるストレージエンジンを同時にサポートして、異なるシナリオに最適化されたデータ記憶及びトランザクション管理機能を提供することができ、よく見られるストレージエンジンには、InnoDB、MyISAMなどがある。
【0018】
トランザクション(transaction):様々なデータアイテムにアクセスし操作する1つのデータベース操作シーケンスである。トランザクションは、トランザクションの開始からトランザクションの終了までの間に実行される全てのデータベース操作で構成される。トランザクションには、ACID特性、即ち、原子性(Atomicity)、一致性(Consistency)、分離性(Isolation)、耐久性(Durability)がある。
【0019】
データベーススキーマ定義言語(Data Definition Language、DDL):即ち、データベーススキーマ情報であり、データベースに格納されるライブラリテーブルの構成を記述するための言語である。例えば、CREATE、ALTER、DROPなどがある。
【0020】
データ操作言語(Data Manipulation Language、DML):即ち、ユーザーがデータベースに対する基本的な操作を実現するためのデータ操作情報である。例えば、INSERT、DELETE、UPDATEなどがある。
【0021】
XAメカニズム:データベース接続トランザクションにおけるXAは、X/Open組織によって提案された分散トランザクション処理の仕様を指す。
【0022】
行識別子(rowno):テーブルにおける現在の列セグメントデータの現在の行数を返すための関数識別子であり、即ち、行データのセット識別子である。
【0023】
行データ:インデックステーブルにおける同じキー値に対応するインデックス値のセットである。
【0024】
インデックステーブル:論理レコードと物理レコードの対応関係を示すテーブルであり、データベースにおけるデータを識別するためのものである。
【0025】
なお、本出願によって提供されるデータインデックス付け方法は、データベースを含むか、又は、データの読み書きを必要とするシステム又はプログラム、例えば、MySQLデータベース又はMySQLに基づいて実行される関連プログラムなどに適用することができ、具体的に、データインデックス付けシステムは、図1に示すシステムアーキテクチャで実行でき、図1に示すように、データインデックス付けシステムの動作のシステムアーキテクチャ図であり、以下に、MySQLを例として説明する。MySQLは、アクセス層、サービス層、ストレージエンジン層及びシステムファイル層を含み、アクセス層は、主に接続処理、認可認証、セキュリティなどの事項を担当し、サービス層は、主に、クエリ解析、分析、最適化、キャッシュ及び全ての組み込み関数を担当し、ストレージプロセス、トリガー、ビュー、binlog、テーブルログなどのストレージエンジンを跨ぐ全ての機能は、この層で実現される。ストレージエンジン層は、主に、MySQLにおけるデータのストレージ及び抽出を担当し、サービス層は、APIを介してストレージエンジンと通信し、ストレージエンジンは、数十個のロウワー関数APIを含み、各エンジンは、一連の特定の実現を提供し、システムファイル層は主に、ロウワーファイルシステムの読み書きを担当する。本出願によって提供されるデータインデックス付け方法は、ストレージエンジン層のプラグインタイプに設置された複数のストレージエンジンのインタラクションプロセスに適用でき、第1のストレージエンジンのトランザクションを第2のストレージエンジンを介して再利用することで、ロウワー関数の統合適用を実現する。なお、図面は、1つの第1のストレージエンジン及び1つの第2のストレージエンジンを示しているが、実際のシナリオでは、より多くの第1のストレージエンジン又はより多くの第2のストレージエンジンであってもよく、具体的な数は、実際のシナリオによって決定され、ここでは制限しない。具体的に、ストレージエンジンのタイプは、InnoDB、MyISAM又はNEWDBなどであってもよい。
【0026】
なお、上記のデータインデックス付けシステムは、サーバー上で実行でき、例えば、クラウドデータストレージのアプリケーションとして、端末装置上で実行することができ、サードパーティー装置で実行して、データインデックスを提供して、データインデックス付け後のノード分散結果を取得することもでき、具体的に、データインデックス付けシステムは、プログラムの形態で上記の装置上で実行でき、上記の装置におけるシステム構成要素として実行することもでき、クラウドサービスプログラムの1つとして使用してもよく、具体的実行モードは、実際のシナリオに応じて決定され、ここでは、制限しない。
【0027】
本出願の実施例は、クラウド技術(Cloud technology)の適用であってもよく、クラウド技術とは、ワイドエリアネットワーク又はローカルネットワークにおいてハードウェア、ソフトウェア、ネットワークなどの一連のリソースを統合して、データの計算、記憶、処理及び共有を実現するホスティング技術である。
【0028】
具体的に、クラウド技術は、クラウドコンピューティングビジネスモードに適用されるネットワーク技術、情報技術、統合技術、管理プラットフォーム技術、アプリケーション技術などの総称であり、リソースプールを形成でき、オンデマンドで柔軟かつ便利に使用できる。クラウドコンピューティング技術は、重要なサポートになる。ビデオウェブサイト、写真ウェブサイト及びその他のポータルウェブサイトなどの技術ネットワークシステムのバックグラウンドは、大量の計算、記憶リソースを必要とする。インターネット業界の高度な発展及び適用により、将来、各製品に独自の認識マークが作成られる可能性があり、バックグラウンドシステムに送信して論理処理する必要があり、異なるレベルのデータは個別に処理され、各種の業界データは、強力なシステムバッキングサポートを必要とし、クラウドコンピューティングによって実現するしかない。
【0029】
クラウド技術では、データベースの参加が必要である。データベースは、簡単に言えば、電子ファイルが保存される電子ファイリングキャビネットと見なすことができ、ユーザーは、ファイルにおけるデータに対して追加、クエリ、更新、削除などの操作を行うことができる。
【0030】
「データベース」とは、特定の方式で一緒に記憶され、複数のユーザーと共有でき、可能な限り小さい冗長性を有し、アプリケーションプログラムと互いに独立しているデータセットである。
【0031】
データベース管理システム(Database Management System、DBMS)は、データベースを管理するために設計されたコンピュータソフトウェアシステムであり、一般的に、ストレージ、インターセプト、セキュリティ、バックアップなどの基本的な機能を有する。データベース管理システムは、そのサポートするデータベースモデルに基づき、例えばリレーショナル、XMLなどに分類でき、又は、そのサポートするコンピュータのタイプに基づき、例えばサーバークラスター、携帯電話などに分類でき、又は、使用するクエリ言語に基づき、例えばSQL、XQueryなどに分類でき、又は、パフォーマンスインパルスの焦点、例えば最大規模、最大実行速度などに基づき分類でき、他の分類方式もある。使用する分類方式に関係なく、一部のDBMSは、例えば、複数のクエリ言語を同時にサポートするなど、カテゴリを跨ることができる。
【0032】
クラウド技術の発展に伴い、人々の生活に登場するアプリケーションはますます増えており、クラウド技術では、データのインタラクションを実現するために、データベースの参加を必要とする。
【0033】
一般的に、複数のストレージエンジンをサポートするデータベース管理システムであるMySQLを異なる適用シナリオに使用することができる。異なるストレージエンジンは、トランザクションのサポート能力が異なる。例えば、InnoDBストレージエンジンは、完全なトランザクションのサポートを実現し、分散トランザクションのXAプロトコルもサポートし、MyISAMストレージエンジンは、簡単に拡張でき、また、NEWDBエンジンは、シングルステートメントのトランザクションをサポートし、これにより、様々なシナリオのデータインデックス付けプロセスを実現する。
【0034】
しかしながら、MySQLのプラグインアーキテクチャでは、各ストレージエンジンのコードは独立しており、1つの新しいストレージエンジンを開発するたびに、完全なデータ記憶及びトランザクションメカニズムを個別に開発する必要があり、この開発プロセスの複雑さは高く、コードの冗長性を引き起こしやすく、データベースのインデックス付け効率に影響を与える。
【0035】
上記の課題を解決するために、本出願は、データインデックス付け方法を提案し、当該方法は、図2に示すデータインデックス付けプロセスのフレームワークに適用され、図2に示すように、本出願の実施例によって提供されるデータインデックス付けのフローアーキテクチャ図であり、第1のストレージエンジンを介してターゲットトランザクションにアクセスし、ターゲットトランザクションに基づいて、第2のストレージエンジンにおいてインデックステーブルのマッピングを実行し、これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現する。一般的に、第2のストレージエンジンは、例えば、InnoDBなどの、完全なトランザクション機能を備えたストレージエンジンを使用するため、第1のストレージエンジンは、ストレージエンジン層におけるロウワー関数を簡単に再利用して、データインデックス付けプロセスを実行することができる。
【0036】
なお、本出願によって提供される方法は、ハードウェアシステムにおける処理論理として、プログラムの記述であってもよく、集積又は外作成の方式で上記の処理論理を実現するためのデータインデックス付け装置としてもよい。1つの実現方式として、当該データインデックス付け装置は、データインデックス付けプロセスを指示するターゲットトランザクションを取得し、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定し、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれる。次に、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定し、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、行識別子は、ターゲットインデックスデータにおける行データを指示するためのものであり、行データは、ターゲットインデックスデータにおけるインデックス列に対応し、インデックス列は、ターゲットトランザクションに基づいて得られ、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートし、さらに、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現し、新しいストレージエンジン導入による開発の複雑さが軽減されるため、複数のストレージエンジンのコード再利用を実現し、データベースのインデックス付け効率が向上し、さらに、第2のストレージエンジンの機能設計により、第1のストレージエンジンは、それ自体に搭載されていない機能を実行することができるようになり、データベースの適用範囲及びインデックス付け効率をさらに向上させる。
【0037】
上記のプロセスアーキテクチャを結合し、図3を参照して、本出願におけるデータインデックスの方法を以下に説明する。図3は、本出願の実施例によるデータインデックス付け方法のフローチャートであり、コンピュータ装置に適用され、本出願の実施例は、少なくとも以下のステップを含む。
【0038】
ステップ301、コンピュータ装置は、ターゲットトランザクションを取得する。
【0039】
本実施例では、ターゲットトランザクションは、データインデックス付けプロセスを指示し、ターゲットトランザクションは、現在のデータベースが常に実行しているトランザクションであってもよく、新たに発行されるトランザクションであってもよい。第1のストレージエンジンについて、ロウワー関数の設計を実行せず、第2のストレージエンジンのロウワー関数によって、データインデックス付け機能を実現することができる。
【0040】
ステップ302、コンピュータ装置は、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定する。
【0041】
本実施例では、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれ、第1のインデックステーブルは、異なるバージョンの第1のストレージエンジンにおけるターゲットインデックスデータを記録し、可能なシナリオでは、第1のストレージエンジンはNEWDBであり、当該データベースストレージエンジンは、シングルステートメントのトランザクションのみをサポートし、当該エンジンが新しく追加された場合、インターフェースによってデータインタラクションを実行するように、当該シングルステートメントのトランザクションに対してロウワー関数を設計する必要がある。
【0042】
ステップ303、コンピュータ装置は、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定する。
【0043】
本実施例では、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、行識別子は、ターゲットインデックスデータにおける行データを指示するために使用され、行データは、ターゲットインデックスデータにおけるインデックス列に対応し、インデックス列は、ターゲットトランザクションに基づいて得られ、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートする。挿入又は削除される各レコードは、独立した行識別子(rowno)を有するため、rownoによって、ある行データを直接取得して、バッチ操作を実行することができる。
【0044】
なお、異なるストレージエンジン機能の対応性により、本実施例では、第1のストレージエンジンは、マルチステートメント同時トランザクションをサポートせず、第2のストレージエンジンは、マルチステートメント同時トランザクションをサポートすることを例として説明し、完全な機能を備えたストレージエンジンを使用して単一機能のストレージエンジンを再利用する、ストレージエンジン再利用プロセスにおける機能特徴を示す。以下、第1のストレージエンジンがNEWDBであり、第2のストレージエンジンがInnoDBであることを例として説明し、ここでは制限しない。
【0045】
任意選択で、データベースの使用で、データのインタラクションに係るため、例えば、DDL及びDMLステートメントの実現などの、データに変更がある可能性があり、この場合、関連データを更新する必要があり、本出願におけるデータインデックス付け方法に基づいて、以下の操作を実行してデータ更新を実現することができる。
【0046】
一、DDLステートメントの場合。
本実施例では、まず、ターゲットトランザクションにおけるデータベーススキーマ情報、即ち、DDLステートメントを決定し、次に、DDLステートメントに基づき、第2のインデックステーブルを更新する。DDLステートメントは、CREATE、ALTER、DROPなどを含む。具体的に、図4に示すように、本出願の実施例によるインデックステーブルの更新フローの概略図であり、まず、第1のストレージエンジンにおいて、トランザクションにアクセスして、DDLステートメントを決定し、次に、対応する第1のインデックステーブルを決定し、第1のインデックステーブルに基づいて、第2のストレージエンジンにマッピングされた第2のインデックステーブルを検索して、インデックステーブルの作成プロセスを実行する。
【0047】
CREATEステートメントについて、インデックス付きNEWDBテーブルを作成しているかどうかを判断し、そうである場合、1つの対応するインデックステーブルを追加して作成する。当該インデックステーブルは、NEWDBテーブルと同様に定義されたインデックス列、及び1つの追加の列rownoを含み、そのデータタイプは、BIGINTであり、NEWDBエンジンに記録された行番号を表し、即ち、インデックス付けモードに基づいて第2のインデックステーブルを分類して、第2のインデックステーブルを更新し、インデックス付けモードは、主キーインデックス、ユニークインデックス又は通常のインデックスを含む。
【0048】
可能なシナリオでは、第2のインデックステーブルtに複数の列c1、c2、c3、c4、c5があり、主キーインデックス列は、c1、c2であり、ユニークインデックス列はc3、c4であり、通常のインデックス列はc5であると仮定する。InnoDBにおいて、インデックスに対応する3つのインデックステーブル、即ち、t_pk(c1,c2,owno)、t_unique1(c3,c4,rowno)、t_index1(c5,rowno)を作成する。
【0049】
具体的に、以下のステートメントによって上記のプロセスを実行することができる。
主キーインデックスについて
CREATE TABLE_NDB_INDEX.t_pk(c1<Type>//主キーインデックス命令を決定する;
,c2<Type>//インデックス条件を入力する;
,rowno BIGINT//行識別子を入力する;
,PRIMARY KEY(c1,c2))//主キーインデックス列を決定する;
ENGINE=InnoDB;//ストレージエンジンを指示する
ユニークインデックスについて
CREATE TABLE_NDB_INDEX.t_uniq1(c3<Type>//ユニークインデックス命令を決定する;
,c4<Type>//インデックス条件を入力する;
,rowno BIGINT//行識別子を入力する;
,UNIQUE INDEX(c3,c4))//ユニークインデックス列を決定する
ENGINE=InnoDB;//ストレージエンジンを指示する
通常のインデックスについて
CREATE TABLE_NDB_INDEX.t_index1(c5<Type>//通常のインデックス命令を決定する;
,rowno BIGINT//行識別子を入力する;
,INDEX(c5))//通常のインデックス列を決定する;
ENGINE=InnoDB;//ストレージエンジンを指示する。
【0050】
CREATEステートメントによって第2のインデックステーブルを更新するプロセスは、上記の実現方式で実現することができる。
【0051】
また、NEWDBエンジンに対してDROP TABLEステートメントを実行する場合、テーブルにインデックスがあれば、_NDB_INDEXデータベースにおける対応するインデックステーブルを削除して、DDLステートメントにおける行データに対する処理情報を取得し、処理情報に基づいて、対応するインデックス列の変更データを抽出し、インデックス列の変更データに基づき、第2のインデックステーブルを更新する。
【0052】
ALTERE TABLEステートメントを実行する場合、ADD COLUMNであれば、第2のインデックステーブルに新しい列を追加し、既存のインデックステーブルを処理する必要がない。DROP COLUMNであれば、第2のインデックステーブルにおける対応する列を削除する必要がある。ADD INDEX、DROP INDEXなどであれば、対応するインデックステーブルを追加又は削除する必要がある。
【0053】
なお、上記のステートメントを例として説明したが、他のDDLステートメントの実行は、上記のCREATE、ALTER又はDROPステートメントの実行プロセスを参照してもよい。ここでは、制限しない。
【0054】
二、DMLステートメントの場合。
本実施例では、DMLステートメントは、INSERT、UPDATE、DELETEを含み、これらのステートメントを実行するときに、対応するインデックステーブルを同時に維持する必要がある。具体的に、ターゲットトランザクションにおけるDMLステートメントを決定し、DMLステートメントは、データの挿入、更新又は削除を指示するためのものであり、次に、DMLステートメントに基づき、第2のインデックステーブルを更新する。
【0055】
INSERTステートメントについて、まず、テーブルにおける各主キーインデックス及びユニークインデックスの場合、インデックステーブルにおいて、挿入対象のレコードが既に存在するかどうかをチェックし、レコードが既に存在する場合、トランザクションを終了して、INSERT失敗を返し、さもなければ、NEWDBエンジンにレコードを挿入し、全てのレコードのインデックス列及びrownoの比較表を返し、次に、1つ前のステップで返された比較表に基づき、インデックステーブルにおいて一括挿入する。
【0056】
DELETEステートメントについて、まず、DELETEステートメントにおけるWHERE条件に従って、NEWDBエンジンにおいて条件を満たすレコードを検索し、次に、NEWDBエンジンにおいて、条件を満たすレコードを削除し、そのrownoを記録し、次に、rownoに従って、インデックステーブルにおいて削除操作を順次に実行する。
【0057】
任意選択で、DELETEステートメントのWHERE条件にインデックス列が含まれ、即ち、データインデックス条件にインデックス列が含まれる場合、まず、インデックステーブルにおいて、WHERE条件におけるインデックス列条件に従って、マッチングするレコードのrownoを検索することができる。次に、クエリ条件におけるインデックス列条件を検索されたrownoに切り替えて、削除操作を実行する。データインデックス条件に基づき、対応する行識別子を決定して、削除操作を実行し、これにより、データ処理の量が低減され、プロセスの効率を向上させる。
【0058】
DELETEステートメントについて、まず、UPDATEステートメントにおけるWHERE条件に従ってNEWDBエンジンにおいて条件を満たすレコードを検索し、次に、NEWDBエンジンにおいて条件を満たすレコードを削除し、そのrownoを記録し、次に、NEWDBエンジンにおいてUPDATEステートメントに基づき、新しい値を算出してレコードを挿入し、新しいレコードのrownoを記録し、記録された新しいrownoと古いrownoに従って、インデックステーブルにおいて更新動作を順次に実行する。
【0059】
任意選択で、UPDATEステートメントのWHERE条件にインデックス列が含まれる場合、データインデックス条件に基づき対応する行識別子を決定して、更新操作を実行し、これにより、データ処理の量が低減され、プロセスの効率を向上させる。
【0060】
なお、行識別子を指定するクエリ及び修正を提供することによって、操作の実行効率を大幅に向上させることができ、いくつかの業務シナリオでは、より効果的であり、例えば、業務が複数行のデータをバッチで処理する必要がある場合、行番号を指定したクエリにより、処理中にデータが繰り返されたり間違ったりしないようにすることができる。
【0061】
304、コンピュータ装置は、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。
【0062】
本実施例では、インデックスデータは、ターゲットインデックスデータに含まれる。インデックス付けのプロセスは、行識別子に基づいて実行することができ、具体的に、まず、第1のストレージエンジンにおけるターゲットトランザクションのデータインデックス条件を取得して、データインデックス条件によって指示される行識別子を決定し、次に、データインデックス条件によって指示される行識別子に基づき、第2のインデックステーブルにおける対応する行識別子を決定して、行データを取得し、行データに基づき、対応するインデックスデータを決定する。行識別子は、複数の行データに対応し、NEWDBエンジンにおいて行識別子の位置に対応するレコードを直接検索して結果を返し、全てのデータを読み取って順番に検索する必要がないため、クエリ速度を大幅に向上させる。
【0063】
任意選択で、データインデックス条件がインデックス値を指示する場合、ターゲットインデックス値に基づき、前記少なくとも1つの第2のインデックステーブルから、対応する第2のインデックステーブルを決定し、次に、これらのインデックステーブルから、ターゲットインデックス値に対応する行データを選別して、対応するインデックスデータを取得することができる。例えば、WHERE条件でインデックス値が指定されている場合、まずインデックステーブルでクエリし、条件を満たす全てのインデックステーブルにおけるレコードをクエリしてから、インデックステーブルに記録されているrowno値に基づき、実際のレコード値を素早く検索する。
【0064】
可能なシナリオでは、次のステートメントによって上記のデータクエリのプロセスを実現することができる。
SELECT_rowno FROM t;//行識別子を選択する;
SELECT_rowno FROM t WHERE a=12;//データインデックス条件における行識別子を決定する;
SELECT*FROM t WHERE_rowno=12;//対応する行識別子をクエリする
DELETE FROM t WHERE_rowno=12;//クエリ結果を抽出する
【0065】
上記のクエリ加速プロセスによって、第2のインデックステーブルから第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する効率を向上させることができる。
【0066】
上記の実施例から分かるように、データインデックス付けプロセスを指示するターゲットトランザクションを取得し、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定し、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれ、次に、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定し、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、インデックス列は、ターゲットトランザクションに基づいて得られ、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートし、さらに、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現し、新しいストレージエンジン導入による開発の複雑さが軽減されるため、複数のストレージエンジンのコード再利用を実現し、データベースのインデックス付け効率が向上し、さらに、第2のストレージエンジンの機能設計により、第1のストレージエンジンは、それ自体に搭載されていない機能を実行することができるようになり、データベースの適用範囲及びインデックス付け効率をさらに向上させる。
【0067】
上記の実施例は、データインデックスのプロセスを説明し、可能なシナリオでは、データの一致性を保証するために、データ更新プロセスを検出してもよい。本出願の実施例による別のデータインデックス付け方法のフローチャートである図5を参照し、本出願の実施例は、少なくとも以下のステップを含む。
【0068】
ステップ501、コンピュータ装置は、ターゲットトランザクションを取得する。
【0069】
ステップ502、コンピュータ装置は、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを取得する。
【0070】
ステップ503、コンピュータ装置は、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定する。
【0071】
本実施例では、ステップ501―503は、図3に示した前述の実施例のステップ301―303と類似しており、関連する特徴の説明を参照することができ、ここで、説明を繰り返さない。
【0072】
ステップ504、コンピュータ装置は、ターゲットトランザクションにおけるデータ操作情報を実行する。
【0073】
本実施例では、図3に示した前述の実施例のステップ303におけるDMLステートメントの実行に対する関連する説明を参照することができ、ここでは、説明を繰り返さない。
【0074】
ステップ505、コンピュータ装置は、実行プロセスで少なくとも1つの故障検出点を設置する。
【0075】
本実施例では、実行プロセスで、データを記憶するために複数のバージョンを使用し、各インデックステーブルは、バージョン番号によってデータの変更を表し、バージョン番号は、逓増する整数であり、即ち、トランザクションがコミットされるとバージョンを切り替え、さもなければ、古いバージョンを使用する。具体的に、まず、変更情報に基づき、第1のストレージエンジンに対応するバージョン番号を決定して、第2のストレージエンジンにおいてログテーブルを生成し、次に、変更情報に対応する処理フローを決定し、処理フローに少なくとも1つの故障検出点を設置し、故障検出点は、第1のストレージエンジン及び第2のストレージエンジンのインタラクションプロセスに基づいて決定され、さらに、故障検出点に基づいて、隣接する第1のストレージエンジンのバージョン番号のデータ対応状況を決定する。
【0076】
任意選択で、ログテーブルは、次の構成を使用できる。
CREATE TABLE_newdb.wal(dbid BIGINT//ログテーブルを確立する
,tableid BIGINT//インデックステーブルを記録する
,version BIGINT//バージョン番号を記録する
,PRIMARY KEY(dbid.tableid))//関連関係を記録する
ENGINE=InnoDB;//データベースタイプ
【0077】
具体的に、特定のDMLステートメントの実行プロセスに対応する。INSERTステートメントについて、図6に示すプロセスを参照することができ、図6は、本出願の実施例によるデータ挿入操作フローの概略図である。当該プロセスは、以下のステップを含む。
【0078】
ステップ601、コンピュータ装置は、挿入を開始する。
【0079】
ステップ602、コンピュータ装置は、レコードが存在するかどうかを判断する。
【0080】
本実施例では、第2のインデックステーブルにおける各主キーインデックス及びユニークインデックスについて、インデックステーブルにおいて挿入対象のレコードが既に存在するかどうかをチェックし、レコードが既に存在する場合、トランザクションを終了し、INSERT失敗を返す。
【0081】
ステップ603、コンピュータ装置は、エラーで終了する。
【0082】
ステップ604、コンピュータ装置は、ログテーブルレコードを挿入する。
【0083】
本実施例では、ステップ602における第2のインデックステーブルのバージョンを記録し、次に、インデックステーブル_newdb.walに、レコード(dbid,tableid,version)、即ち、ストレージエンジンID、インデックステーブルID及びバージョン番号を挿入する。
【0084】
ステップ605、コンピュータ装置は、第2のストレージエンジントランザクションをコミットする。
【0085】
ステップ606、コンピュータ装置は、第1のストレージエンジンログテーブルを挿入する。
【0086】
本実施例では、ログテーブルを比較する方法によってデータ一致性を判断し、この場合、第1のストレージエンジンにおいてログテーブルの挿入プロセスを実行し、即ち、NEWDBテーブルレコードデータを挿入し、NEWDBのトランザクションのコミットを実行し、コミット後のNEWDBテーブルのバージョンをバージョンversion+1に切り替える。
【0087】
ステップ607、コンピュータ装置は、第1のストレージエンジントランザクションをコミットする。
【0088】
ステップ608、コンピュータ装置は、インデックステーブルレコードを挿入する。
【0089】
本実施例では、NEWDBテーブル插入した後に返されたレコードインデックス列及びrownoを対応するインデックステーブルに挿入する。
【0090】
ステップ609、コンピュータ装置は、ログテーブルレコードを削除する。
【0091】
本実施例では、テーブル_newdb.walにおけるステップ604で挿入されたレコードを削除する。
【0092】
ステップ610、コンピュータ装置は、第2のストレージエンジントランザクションをコミットする。
【0093】
ステップ611、コンピュータ装置は挿入に成功し、プロセスを終了する。
【0094】
上記の挿入プロセスでは、4つの故障点を設置することができ、ステップ601-ステップ605は、故障点1の検出プロセスであり、ステップ606-ステップ607は、故障点2の検出プロセスであり、ステップ608-ステップ610は、故障点3の検出プロセスであり、ステップ611は、故障点4の検出プロセスである。
【0095】
具体的に、故障点1の場合、可能な故障の理由は、_newdb.walテーブルにレコードが挿入されていないこと、又はレコードが挿入されたがコミットされていないことである。この場合、_newdb.walテーブルは、完全なトランザクションをサポートするストレージエンジンを使用するため、リカバリ後に、トランザクション原子性の保証のため、挿入されたがコミットされていないレコードは、ロールバックされる。そのため、当該故障点は、追加の故障リカバリプロセスを実行せずに、NEWDBのデータ及びインデックスが一致していることを保証することができる。
【0096】
故障点2の場合、この時点で、_newdb.walテーブルに、新しいデータが既に記録されているが、NEWDBテーブルのトランザクションはコミットされていない。データ及びインデックスに矛盾がないが、_newdb.walテーブルのレコードが正しくない可能性があるため、リカバリする必要がある。リカバリ中に、dbid及びtableidフィールドに基づき、例えば1などの_newdb.walにおけるレコードのバージョンを検索し、次に、NEWDBテーブルの現在のバージョンを判断し、1の場合、_newdb.walテーブルにおけるレコードをロールバックする必要があることを示す。ロールバック操作は、_newdb.walテーブルにおける対応するレコードを直接削除することであってもよい。
【0097】
故障点3の場合、この時点で、_newdb.walテーブルに、新しいデータが既に記録され、NEWDBテーブルのトランザクションも既にコミットされたが、インデックステーブルのデータは更新されておらず、_newdb.walテーブルの記録も削除されていない。データとインデックスが一致しないので、リカバリする必要がある。リカバリ中に、dbid及びtableidフィールドに基づき、例えば1などの_newdb.walテーブルに記録されたバージョンを検索し、次に、NEWDBテーブルの現在のバージョンを判断し、2の場合、このような状況であることを説明し、リカバリプロセスをやり直す必要がある。_newdb.walテーブル及びインデックステーブルは、同じストレージエンジンであり、且つ、当該エンジンが完全なトランザクションをサポートするため、これら2つのテーブルは、3番目のステップでの操作が一致する。NEWDBテーブルにおいて、バージョン1及び2の間のレコード変更をクエリして比較し、これらの変更されたレコードrownoをインデックステーブルに書き込んでから、_newdb.walテーブルのレコードを削除して、トランザクションをコミットする。
【0098】
故障点4の場合、全てのステップのトランザクションが既にコミットされたため、データは、一致の状態にあり、データリカバリを実行しなくてもよい。
【0099】
また、DELETEステートメントについて、まず、NEWDBにおいてインデックステーブルの削除操作の前に、NEWDBテーブルのバージョンを記録し、_newdb.walにレコード(dbid、tableid、version)を挿入し、トランザクションをコミットし、次に、DELETEステートメントにおけるWHERE条件に従って、NEWDBエンジンにおいて、条件を満たすレコードを検索する。WHEREステートメントでrownoが指定されている場合、rownoによって、削除する必要のあるNEWDBテーブルのレコードを直接検索する。WHEREステートメントでインデックス列が指定されている場合、インデックステーブを介して、削除する必要のあるNEWDBテーブルのレコードrownoを検索し、次に、rownoによって、削除する必要のあるNEWDBテーブルのレコードを検索し、WHEREステートメントでrowno及びインデックス列が指定されていない場合、NEWDBテーブルを順番に検索して、削除する必要のあるレコードを検索する。検索されたNEWDBレコードを削除して、コミットし、コミット後のNEWDBテーブルのバージョンがversion+1に変更される。次に、NEWDBテーブルの削除された行のrownoに基づき、インデックステーブルにおいて対応するレコードを削除し、_newdb.walの1番目のステップで挿入されたレコードを削除する。トランザクションをコミットする。
【0100】
UPDATEステートメントについて、まず、NEWDBにおけるインデックステーブルの更新操作の前に、NEWDBテーブルのバージョンを記録し、_newdb.walにレコード(dbid、tableid、version)を挿入し、トランザクションをコミットする。次に、UPDATEステートメントにおけるWHERE条件に従って、NEWDBエンジンにおいて条件を満たすレコードを検索し、WHEREステートメントでrownoが指定されている場合、rownoによって、削除する必要のあるNEWDBテーブルのレコードを直接検索し、WHEREステートメントでインデックスが指定されている場合、インデックステーブルを介して、削除する必要のあるNEWDBテーブルのレコードのrownoを検索し、削除する必要のあるNEWDBテーブルのレコードを検索し、WHEREステートメントでrowno及びインデックスが指定されていない場合、NEWDBテーブルを順番に検索して、削除する必要のあるレコードを検索する必要がある。次に、UPDATEステートメントに基づき、新しい値を算出してレコードを挿入し、新しいレコードのrownoを記録してコミットし、コミット後のNEWDBテーブルのバージョンは、version+1に変更される。さらに、NEWDBテーブルの新しい行及び古い行のrownoに基づき、インデックステーブルにおいて対応するレコードを更新し、_newdb.walの1番目のステップで挿入されたレコードを削除する。トランザクションをコミットする。
【0101】
任意選択で、上記の故障検出プロセスにおけるログテーブルは、変更された全てのレコードの行番号が記録されたログテーブルを使用して、リカバリフェーズでは、ログテーブルにおけるデータに基づき、REDO又はUNDO操作を実行し、即ち、行識別子に基づいて、リカバリユニットに対して検出してリカバリする。
【0102】
ステップ506、コンピュータ装置は、故障しているかどうかを判断する。
【0103】
本実施例では、ステップ505で説明した異なる故障点の判断プロセスによって、判断の結果を得ることができ、故障していると判断した場合、データの一致性を保証するために、データリカバリを実行する必要があり、正常であると判断した場合、ステップ507のインデックス付けプロセスを実行する。
【0104】
507、コンピュータ装置は、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。
【0105】
本実施例では、ステップ507は、図3に示した前述の実施例のステップ304と類似しており、関連する特徴の説明を参照することができ、ここでは、説明を繰り返さない。
【0106】
上記の実施例から分かるように、完全なトランザクション機能を備えたストレージエンジンを再利用して、新しいエンジンのインデックスを実現することにより、新しいエンジンインデックスの実現の難しさ及び問題のリストが軽減される。さらに、完全なトランザクション機能を備えたストレージエンジンを使用して新しいエンジンのインデックスを実現することにより、既存の成熟したモジュールを再利用できるため、開発の作業負荷が軽減され、これにより、新しいエンジンは、B+ツリーを再実現する必要がなく、その完全なトランザクションのサポートを実現する必要もない。
【0107】
上記の実施例は、データインデックスにおける故障検出プロセスを説明し、以下に、図7を参照して、故障が検出された後のデータリカバリプロセスを説明し、図7は、本出願の実施例によるデータリカバリの方法のフローチャートであり、本出願の実施例は、少なくとも以下のステップを含む。
【0108】
ステップ701、コンピュータ装置は、リカバリを開始する。
【0109】
ステップ702、コンピュータ装置は、ログテーブルをチェックする。
【0110】
本実施例では、ログテーブルは、第2のストレージエンジンのログテーブルであり、DMLステートメントに基づき第2のストレージエンジンにおけるインデックステーブルによって実行される関連データ操作レコードが記録されている。
【0111】
ステップ703、コンピュータ装置は、レコードが存在するかどうかを判断する。
【0112】
本実施例では、操作レコードが存在する場合、ステップ704に進み、存在しない場合、ステップ711に進む。
【0113】
ステップ704、コンピュータ装置は、ログテーブルの何れかのレコードを取得する。
【0114】
本実施例では、ログテーブルにおけるレコードを取得するプロセスは、レコードのランダムな選択であってもよいし、特定の規則の順序に基づくレコードの選択であってもよく、例えば、好ましくはデータ挿入のレコードを取得する。
【0115】
ステップ705、コンピュータ装置は、ログテーブルのバージョンを取得する。
【0116】
ステップ706、コンピュータ装置は、ログテーブルの実際のバージョンを取得する。
【0117】
本実施例では、ログテーブルの実際のバージョンは、当該ログテーブルに対応するトランザクションが実行された後のストレージエンジンのデータ状態である。
【0118】
ステップ707、コンピュータ装置は、差異を判断する。
【0119】
本実施例では、ログテーブルのバージョンに対応するデータとログテーブルの実際のバージョンのデータを比較して、データの差異を決定する。
【0120】
ステップ708、コンピュータ装置は、バージョンの差異を取得する。
【0121】
ステップ709、コンピュータ装置は、インデックステーブルを更新する。
【0122】
本実施例では、バージョンの差異に基づき、対応する差異データを決定し、差異データに対してインデックステーブルにおいて対応する修正を実行して、インデックステーブルを更新し、具体的に、インデックステーブルを、ログテーブルの実際のバージョンに対応するデータに更新することができる。
【0123】
ステップ710、コンピュータ装置は、ログテーブルの対応するレコードを削除する。
【0124】
ステップ711、コンピュータ装置は、リカバリを終了する。
【0125】
上記の実施例から分かるように、第2のストレージエンジンにおけるログテーブルに記録されたバージョン番号を決定し、変更情報に基づき、第1のストレージエンジンのバージョン番号を決定し、ログテーブルに記録されたバージョン番号と第1のストレージエンジンのバージョン番号を比較して、差異レコードを生成し、さらに、差異レコードに基づき、第1のインデックステーブル及び第2のインデックステーブルを更新する。これにより、データ故障のリカバリプロセスを実現し、データの一致性を保証し、ストレージエンジンのデータ処理の正確性を向上させる。
【0126】
本出願の実施例による上記の解決策をよく実施するために、以下、上記の解決策を実施するための関連装置をさらに提供する。本出願の実施例によるデータインデックス付け装置の構成概略図である図8を参照し、データインデックス付け装置800は、
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得するための取得ユニット801と、
前記ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定するための決定ユニット802であって、前記ターゲットインデックスデータが、少なくとも1つの第1のインデックステーブルに含まれる決定ユニット802と、
前記第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定するためのマッピングユニット803であって、前記第2のインデックステーブルは、前記第1のインデックステーブルに基づいて行識別子を追加することによって得られ、前記行識別子は、前記ターゲットインデックスデータにおける行データを指示するためのものであり、前記第2のストレージエンジンは前記ターゲットトランザクションの実行をサポートするマッピングユニット803と、
前記第2のインデックステーブルから、前記第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定するためのインデックスユニット804であって、前記インデックスデータは、前記ターゲットインデックスデータに含まれるインデックスユニット804と、を含む。
【0127】
任意選択で、本出願のいくつかの可能な実現方式では、前記インデックスユニット804は、具体的に、前記第1のストレージエンジンにおける前記ターゲットトランザクションのデータインデックス条件を取得して、前記データインデックス条件によって指示される行識別子を決定し、
前記インデックスユニット804は、具体的に、前記データインデックス条件によって指示される行識別子に基づき、前記第2のインデックステーブルにおける行識別子に対応する行データを決定し、
前記インデックスユニット804は、具体的に、前記第2のインデックステーブルにおける行識別子に対応する行データに基づき、対応するインデックスデータを決定する。
【0128】
任意選択で、本出願のいくつかの可能な実現方式では、前記データインデックス条件は、ターゲットインデックス値を含み、前記インデックスユニット804は、具体的に、前記ターゲットインデックス値に基づき、前記少なくとも1つの第2のインデックステーブルから、対応する第2のインデックステーブルを決定し、
前記インデックスユニット804は、具体的に、前記対応する第2のインデックステーブルにおける前記ターゲットインデックス値に対応する行データを決定して、対応するインデックスデータを取得する。
【0129】
任意選択で、本出願のいくつかの可能な実現方式では、前記マッピングユニット803はさらに、前記ターゲットトランザクションにおけるデータ操作情報を決定し、前記データ操作情報は、データの挿入、更新又は削除を指示するためのものであり、
前記マッピングユニット803はさらに、前記データ操作情報に基づき前記第2のインデックステーブルを更新する。
【0130】
任意選択で、本出願のいくつかの可能な実現方式では、前記マッピングユニット803は、具体的に、前記データ操作情報に基づき、前記第1のインデックステーブルにおける変更情報を決定し、
前記マッピングユニット803は、具体的に、前記変更情報に基づき、前記第2のインデックステーブルにおける対応する行識別子を決定し、
前記マッピングユニット803は、具体的に、前記第2のインデックステーブルにおける対応する行識別子に基づき、前記第2のインデックステーブルにおける前記変更情報の対応するアイテムを決定して、前記第2のインデックステーブルを更新する。
【0131】
任意選択で、本出願のいくつかの可能な実現方式では、前記マッピングユニット803は、具体的に、前記変更情報に基づき前記第1のストレージエンジンに対応するバージョン番号を決定して、前記第2のストレージエンジンにおいてログテーブルを生成し、
前記マッピングユニット803は、具体的に、前記ログテーブルにおける隣接する前記第1のストレージエンジンのバージョン番号のデータ対応状況を決定して、データリカバリを実行する。
【0132】
任意選択で、本出願のいくつかの可能な実現方式では、前記マッピングユニット803は、具体的に、前記変更情報に対応する処理フローを決定し、
前記マッピングユニット803は、具体的に、前記処理フローに少なくとも1つの故障検出点を設置し、前記故障検出点は、前記第1のストレージエンジン及び前記第2のストレージエンジンのインタラクションプロセスに基づいて決定され、
前記マッピングユニット803は、具体的に、前記故障検出点に基づいて、隣接する前記第1のストレージエンジンのバージョン番号のデータ対応状況を決定して、データリカバリを実行する。
【0133】
任意選択で、本出願のいくつかの可能な実現方式では、前記インデックスユニット804は、具体的に、前記第2のストレージエンジンにおける前記ログテーブルに記録されたバージョン番号を決定し、
前記インデックスユニット804は、具体的に、前記変更情報に基づき、前記第1のストレージエンジンのバージョン番号を決定し、
前記インデックスユニット804は、具体的に、前記ログテーブルに記録されたバージョン番号と前記第1のストレージエンジンのバージョン番号を比較して、差異レコードを生成し、
前記インデックスユニット804は、具体的に、前記差異レコードに基づき、前記第1のインデックステーブル及び前記第2のインデックステーブルを更新する。
【0134】
任意選択で、本出願のいくつかの可能な実現方式では、前記マッピングユニット803はさらに、前記ターゲットトランザクションにおけるデータベーススキーマ情報を決定し、
前記マッピングユニット803はさらに、前記データベーススキーマ情報に基づき、前記第2のインデックステーブルを更新する。
【0135】
任意選択で、本出願のいくつかの可能な実現方式では、前記データベーススキーマ情報は、少なくとも1つのインデックスモードを含み、前記マッピングユニット803は、具体的に、前記インデックスモードに基づいて、前記第2のインデックステーブルを分類して、前記第2のインデックステーブルを更新し、前記インデックスモードは、主キーインデックス、ユニークインデックス又は通常のインデックスを含む。
【0136】
任意選択で、本出願のいくつかの可能な実現方式では、前記第2のインデックステーブルの行識別子によって指示される行データは、前記ターゲットインデックスデータにおけるインデックス列に対応し、前記インデックス列は、前記ターゲットトランザクションに基づいて得られ、前記マッピングユニット803は、具体的に、前記データベーススキーマ情報における前記行データに対する処理情報を取得し、
前記マッピングユニット803は、具体的に、前記処理情報に基づいて、対応するインデックス列の変更データを抽出し、
前記マッピングユニット803は、具体的に、前記インデックス列の変更データに基づき、前記第2のインデックステーブルを更新する。
【0137】
データインデックス付けプロセスを指示するためのターゲットトランザクションを取得し、ターゲットトランザクションに基づき、第1のストレージエンジンにおけるターゲットインデックスデータを決定し、ターゲットインデックスデータは、少なくとも1つの第1のインデックステーブルに含まれ、次に、第1のインデックステーブルに基づき、第2のストレージエンジンに配置される少なくとも1つの第2のインデックステーブルを決定し、第2のインデックステーブルは、第1のインデックステーブルに基づいて行識別子を追加することによって得られ、行識別子は、ターゲットインデックスデータにおける行データを指示するためのものであり、第2のストレージエンジンは、ターゲットトランザクションの実行をサポートし、さらに、第2のインデックステーブルから、第1のストレージエンジンにおけるデータインデックス条件に対応するインデックスデータを決定する。これにより、ストレージエンジンを跨ぐデータインデックス付けプロセスを実現し、新しいストレージエンジン導入による開発の複雑さが軽減されるため、複数のストレージエンジンのコード再利用を実現し、データベースのインデックス付け効率が向上し、さらに、第2のストレージエンジンの機能設計により、第1のストレージエンジンは、それ自体に搭載されていない機能を実行することができるようになり、データベースの適用範囲及びインデックス付け効率をさらに向上させる。
【0138】
本出願の実施例はまた、別のデータインデックス付け装置を提供し、本出願の実施例による別のデータインデックス付け装置の構成概略図である図9を参照し、当該データインデックス付け装置900は、異なる配置又は性能により大きく異なってもよく、1つ以上の中央処理装置(central processing units、CPU)922(例えば、1つ以上のプロセッサー)及びメモリ932、アプリケーションプログラム942やデータ944が記憶される1つ以上の記憶媒体930(例えば、1つ以上の大容量記憶装置)を含んでもよい。メモリ932及び記憶媒体930は、短期記憶又は永続記憶であってもよい。記憶媒体930に記憶されたプログラムは、1つ以上のモジュール(図示せず)を含んでもよく、各モジュールは、データインデックス付け装置に対する一連の命令操作を含んでもよい。さらに、中央処理装置922は、記憶媒体930と通信して、データインデックス付け装置900上で記憶媒体930における一連の命令操作を実行するように構成されてもよい。
【0139】
データインデックス付け装置900は、1つ以上の電源926、1つ以上の有線又は無線ネットワークインターフェース950、1つ以上の入出力インターフェース958、及び/又は、例えばWindows Server(登録商標)、Mac OS X(登録商標)、Unix(登録商標)、Linux(登録商標)、FreeBSD(登録商標)などの1つ以上のオペレーティングシステム941を含んでもよい。
【0140】
上記の実施例におけるデータインデックス付け装置が実行するステップは、当該図9に示したデータインデックス付け装置の構造に基づいてもよい。
【0141】
本出願の実施例は、コンピュータ可読記憶媒体をさらに提供し、前記記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムは、図2から図7に示される前述の実施例で説明された方法におけるデータインデックス付け装置が実行するステップを実行する。
【0142】
本出願の実施例はさらに、データインデックス命令を含むコンピュータプログラム製品を提供し、コンピュータ上で実行されるときに、図2から図7に示される前述の実施例で説明された方法におけるデータインデックス付け装置が実行するステップをコンピュータに実行させる。
【0143】
本出願の実施例はさらに、データインデックス付けシステムを提供し、前記データインデックス付けシステムは、図8で説明された実施例におけるデータインデックス付け装置、又は図8で説明されたデータインデックス付け装置を含んでもよい。
【0144】
説明の便宜及び簡潔さのために、上記のシステム、装置及びユニットの具体的な作業プロセスは、前述の方法の実施例における対応プロセスを参照でき、ここでは、説明を繰り返さない。
【0145】
なお、本出願で提供されるいくつかの実施例では、開示されたシステム、装置及び方法は、他の形態により実施されてもよい。例えば、上述した装置の実施例は、単に例示的であり、例えば、上記ユニットの区分は、論理機能の区分にすぎず、実際に実現される場合には、複数のユニット又はコンポーネントが組み合わせられるか、他のシステムに集積されてもよく、又はいくつかの特徴が省略されてもよく、又は実行されなくてもよいなどの別の区分方法が存在してもよい。また、説明又は検討されている相互の結合又は直接結合又は通信接続は、いくつかのインターフェース、装置又はユニットを介した間接結合又は通信接続であってもよいし、電気的、機械的又は他の形態であってもよい。
【0146】
上記の個別の構成要素として説明されたユニットは、物理的に分離されてもよいし、そうではなくてもよい。ユニットとして表示される構成要素は、物理的な構成要素であってもよいし、物理的な構成要素でなくてもよい。つまり、1つの場所に配置されてもよいし、複数のネットワーク構成要素に分散されてもよい。これらのユニットの一部又は全部は、実際の必要に応じて、本実施例の解決策の目的を達成するために選択されてもよい。
【0147】
また、本出願の各実施例における各機能ユニットは、1つの処理ユニットに集積されてもよいし、各ユニットが物理的に個別に存在してもよいし、2つ以上のユニットが1つのユニットに集積されてもよい。上記の集積されたユニットは、ハードウェアの形で実現してもよいし、ソフトウェア機能ユニットの形で実現してもよい。
【0148】
上記の集積されたユニットは、ソフトウェア機能ユニットの形で実現され、独立した製品として販売又は使用される場合には、1つのコンピュータ可読メモリに記憶されてもよい。このような理解に基づいて、本出願の技術的解決策が本質的に、又は従来技術に貢献する部分、又は当該技術的解決策の全部若しくは一部がソフトウェア製品の形で具現化されてもよい。当該コンピュータソフトウェア製品は、1つのメモリに記憶され、1台のコンピュータ装置(パーソナルコンピュータ、データインデックス付け装置やネットワーク装置など)に、本出願の各実施例に記載の方法の全部又は一部のステップを実行させるためのいくつかの命令を含む。前述のメモリは、Uディスク、リムーバブルハードディスク、読み取り専用メモリ(read-only memory、ROM)、ランダムアクセスメモリ(random access memory、RAM)、磁気ディスク又は光ディスクなどの、プログラムコードを記憶できる様々な媒体を含む。
【0149】
上記のように、上記の実施例は、本出願の技術的解決策を説明し、それを限定するものではない。前述の実施例を参照して本出願について詳細に説明したが、前述の各実施例で記載された技術的解決策を修正すること、又は、一部の技術的特徴に対して同等の置換を実行することは依然として可能であり、これらの修正又は置換は、対応する技術的解決策の本質を、本出願の各実施例の技術的解決策の精神及び範囲から逸脱させるものではない。
【符号の説明】
【0150】
800 データインデックス付け装置
801 取得ユニット
802 決定ユニット
803 マッピングユニット
804 インデックスユニット
900 データインデックス付け装置
922 中央処理装置
930 記憶媒体
932 メモリ
941 オペレーティングシステム
942 アプリケーションプログラム
944 データ
950 有線又は無線ネットワークインターフェース
958 入出力インターフェース
図1
図2
図3
図4
図5
図6
図7
図8
図9