(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-11
(45)【発行日】2024-03-19
(54)【発明の名称】データ記憶およびクエリ方法並びにデバイス
(51)【国際特許分類】
G06F 16/22 20190101AFI20240312BHJP
G06F 16/2453 20190101ALI20240312BHJP
【FI】
G06F16/22
G06F16/2453
(21)【出願番号】P 2020531074
(86)(22)【出願日】2018-12-03
(86)【国際出願番号】 CN2018118869
(87)【国際公開番号】W WO2019109879
(87)【国際公開日】2019-06-13
【審査請求日】2021-11-26
(31)【優先権主張番号】201711296260.8
(32)【優先日】2017-12-08
(33)【優先権主張国・地域又は機関】CN
【前置審査】
(73)【特許権者】
【識別番号】510330264
【氏名又は名称】アリババ・グループ・ホールディング・リミテッド
【氏名又は名称原語表記】ALIBABA GROUP HOLDING LIMITED
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ジーイエ トゥー
(72)【発明者】
【氏名】チュワンシエン ウェイ
(72)【発明者】
【氏名】チャオチュン ジャン
【審査官】松尾 真人
(56)【参考文献】
【文献】米国特許出願公開第2004/0181533(US,A1)
【文献】国際公開第2015/025401(WO,A1)
【文献】中国特許出願公開第104462461(CN,A)
【文献】米国特許出願公開第2007/0203925(US,A1)
【文献】松信 嘉範,新規構築もUNIXからの移行もOK! Linux-DBサーバー構築入門 第9回 インデックスのチューニング(前編),DB Magazine,日本,株式会社翔泳社,2009年02月01日,第18巻, 第10号,pp.138~146
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
コンピューティングベースのデバイスによって実行される方法であって、
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列にインデックスを作成してインデックス情報を確立することであって、前記列の前記インデックス情報は、前記列内のデータとテーブル内の行の行番号の間のマッピング関係を含み、前記マッピング関係は、前記列のそれぞれのデータサイズに従ってソートされている、ことと、
前記格納されたデータの列を走査して、前記列内のデータの統計情報を取得することであって、前記列内の前記データの前記統計情報は、前記列内のゼロ値と行番号の間のマッピング関係と、前記列内の数値の最大値と、前記列内の数値の最小値とを含む、ことと
、
クエリ条件を取得することと、
前記列内のデータの統計情報に従って、前記クエリ条件の最適化されたクエリモードを決定することと、
前記クエリモードおよび前記格納された列のインデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する行の行番号セットを取得することと
を含む方法。
【請求項2】
前記列内の前記データの前記統計情報は、前記列内の各データの出現回数、および前記列内の異なるデータの数を含む、請求項
1の方法。
【請求項3】
前記格納されたデータの列にインデックスを作成することが、
前記格納されたデータの列の全てについてインデックスを作成することを含む、請求項1の方法。
【請求項4】
個々のクエリ条件を満たす、各格納データに対応する行の行番号セットを取得する前に、前記方法がさらに、
前記格納された列の前記インデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることを含む、請求項
1の方法。
【請求項5】
前記格納された列の前記インデックス情報間の前記関連関係に従って、前記複数の個々のクエリ条件を前記単一のクエリ条件に組み合わせることが、
前記クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
前記組み合わされた結果を集計することと、を含む、請求項
4の方法。
【請求項6】
前記クエリ条件が、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの1つ以上を含む、請求項
4の方法。
【請求項7】
前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が、ゼロ値のクエリであるとき、前記列内の前記ゼロ値と前記行番号の間の前記マッピング関係の前記統計情報に従って検索を行うために、前記列内の前記ゼロ値と前記行番号の間の前記マッピング関係を使用するクエリモードを決定することと、
前記クエリモードと前記格納された列の前記インデックス情報に従って、テーブルから前記クエリ条件を満たす、前記データに対応する前記行の前記行番号セットを取得することと、を含む、請求項
6の方法。
【請求項8】
前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、前記列の前記統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
前記範囲内にない場合、ゼロセットを返すことと、
前記範囲内にある場合、前記クエリモードと前記列の前記インデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することと、を含む、請求項
6の方法。
【請求項9】
前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が等価クエリであるとき、前記列の前記統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、前記列内の行の総数に関して前記クエリされるデータの前記出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、前記列内の全ての前記データを走査して、前記個々のクエリ条件を満たす、前記データの前記行番号セットを取得することと、
そうでない場合は、前記列の前記インデックス情報から前記個々のクエリ条件を満たす、データの前記行番号セットを検索することと、を含む、請求項
8の方法。
【請求項10】
前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が等価クエリであるとき、前記列内の行数と前記列の前記統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、前記列内の行の総数に関して前記クエリされるデータの前記推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、前記列内の全ての前記データを走査して、前記個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、前記列の前記インデックス情報から前記個々のクエリ条件を満たす、データの前記行番号セットを検索することと、を含む、請求項
8の方法。
【請求項11】
前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が範囲クエリであるとき、前記クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、前記列の前記統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、前記列内の全てのデータを走査して、前記クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、前記列内の前記クエリされるデータの前記最大値と前記最小値をそれぞれ検索の開始点と終了点として使用し、前記クエリ条件を満たす、前記データの行番号セットを前記列のインデックスから検索することと、を含む、請求項
8の方法。
【請求項12】
プロセッサと、
コンピュータ実行可能命令を格納するように配設されたメモリと
を備え、前記コンピュータ実行可能命令は、実行されるとき、前記プロセッサに、
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列にインデックスを作成してインデックス情報を確立することであって、前記列の前記インデックス情報は、前記列内のデータとテーブル内の行の行番号の間のマッピング関係を含み、前記マッピング関係は、前記列のそれぞれのデータサイズに従ってソートされている、ことと、
前記格納されたデータの列を走査して、前記列内のデータの統計情報を取得することであって、前記列内の前記データの前記統計情報は、前記列内のゼロ値と行番号の間のマッピング関係と、前記列内の数値の最大値と、前記列内の数値の最小値とを含む、ことと
、
クエリ条件を取得することと、
前記列内のデータの統計情報に従って、前記クエリ条件の最適化されたクエリモードを決定することと、
前記クエリモードおよび前記格納された列のインデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する行の行番号セットを取得することと
を実行させる、コンピューティングベースのデバイス。
【請求項13】
コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、プロセッサによって実行されるとき、前記プロセッサに、
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列にインデックスを作成してインデックス情報を確立することであって、前記列の前記インデックス情報は、前記列内のデータとテーブル内の行の行番号の間のマッピング関係を含み、前記マッピング関係は、前記列のそれぞれのデータサイズに従ってソートされている、ことと、
前記格納されたデータの列を走査して、前記列内のデータの統計情報を取得することであって、前記列内の前記データの前記統計情報は、前記列内のゼロ値と行番号の間のマッピング関係と、前記列内の数値の最大値と、前記列内の数値の最小値とを含む、ことと
、
クエリ条件を取得することと、
前記列内のデータの統計情報に従って、前記クエリ条件の最適化されたクエリモードを決定することと、
前記クエリモードおよび前記格納された列のインデックス情報に従って、前記クエリ条件を満たす、格納されたデータに対応する行の行番号セットを取得することと
を実行させる、コンピュータ可読記憶媒体。
【請求項14】
コンピュータプログラムであって、
前記コンピュータプログラムは、コンピューティングベースのデバイスによって実行されると、前記コンピューティングベースのデバイスに、
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列にインデックスを作成してインデックス情報を確立することであって、前記列の前記インデックス情報は、前記列内のデータとテーブル内の行の行番号の間のマッピング関係を含み、前記マッピング関係は、前記列のそれぞれのデータサイズに従ってソートされている、ことと、
前記格納されたデータの列を走査して、前記列内のデータの統計情報を取得することであって、前記列内の前記データの前記統計情報は、前記列内のゼロ値と行番号の間のマッピング関係と、前記列内の数値の最大値と、前記列内の数値の最小値とを含む、ことと、
クエリ条件を取得することと、
前記列内のデータの統計情報に従って、前記クエリ条件の最適化されたクエリモードを決定することと、
前記クエリモードおよび前記格納された列のインデックス情報に従って、前記クエリ条件を満たす、格納されたデータに対応する行の行番号セットを取得することと
を含む処理を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2017年12月8日に出願され、「データ記憶およびクエリ方法並びにデバイス」と題された中国出願番号201711296260.8の優先権を主張する。
【0002】
本明細書は、コンピュータの分野に関し、特に、データ記憶およびクエリ方法並びにデバイスに関する。
【背景技術】
【0003】
社会と経済の発展に伴い、科学技術も急速に進歩している。近年、モバイルインターネット技術やモノのインターネット技術の人気が高まり、ビッグデータ時代の到来を告げると同時に、人々の生活に大きな利便性をもたらしている。今日、学界から業界、組織から個人に至るまで、非常に価値のあるデータが常に生成されている。このデータは、企業や実業に多大な経済的利益をもたらす可能性があり、適切に使用すれば、人間の健康や社会の発展にも利益をもたらす可能性がある。ただし、この貴重なデータには、データの欠落、乱雑なデータ、様々な形式、ソースの多様性などの問題があるだけでなく、データ量も途方もなく大きいものになる。
【0004】
IBMの調査によると、人類の文明全体によって取得された全てのデータの90%は過去2年間に生成されたものである。今後のデータ量の増加率はますます速くなる。このような膨大な量のデータに直面すると、従来のコンピューターデータ分析技術は、ますます不十分になり、大規模なデータ分析に対する人々のパフォーマンス要件に応じることが困難になっている。そのようなデータから貴重な情報を迅速かつ便利にクエリおよび選択する方法が、緊急に解決されるべき重要な問題になっている。
【0005】
大規模なデータ分析の問題を扱う場合、データはしばしば構造化表現に変換される、つまり、データは行と列で構成されるテーブル形式に変換される。各行はレコードを表し、各レコードはいくつかの列で構成される。各列は、レコードの情報の一部を表す特有のフィールドである。
【0006】
現在、構造化データのクエリを行うために使用される方法は、主に2つのタイプに分けられる。1つはディスク走査に基づくデータクエリ方法であり、もう1つは部分インデックスに基づくデータクエリ方法である。
【0007】
ディスク走査に基づくデータクエリ方法は、主に次の2つの手順で完了する。
【0008】
ステップ1:データの記憶。データを行と列の表現に変換し、それらを行ごとにディスクに継続的に格納する。
【0009】
ステップ2:データの分析。ディスクに格納されたデータを順次読み取り、入力されるフィルタ条件に従ってフィルタリングを行い、フィルタ条件に応じないデータは無視し、フィルタ条件に応じるデータを出力する。
【0010】
部分インデックスに基づくデータクエリ方法は比較的複雑であり、一般的に次のステップを含む。
【0011】
ステップ1:データの記憶。データを行と列の表現に変換し、それらを行うごとにディスクに継続的に格納する。
【0012】
手順2:指定した列にインデックスを作成する。入力から指定された列を取得し、列に部分インデックスを築く。
【0013】
ステップ3:単純なクエリ最適化。入力からクエリ条件を取得し、手順2で構築したインデックスに従って最適化を行い、クエリ条件を、より短い時間で等価クエリ条件に変換する。
【0014】
ステップ4:データクエリ。手順3で最適化されたクエリ条件に基づいてデータフィルタリングを行い、条件を満たさないデータは無視し、条件を満たすデータを保持する。
【0015】
構造化データの2つのクエリ方法、ディスク走査に基づくデータクエリ方法と、部分インデックスに基づくデータクエリ方法について、上記で簡単に記載した。
【0016】
ディスク走査に基づくデータクエリ方法では、データクエリ分析が行われるたびに、ディスクから全てのデータを読み取る必要がある。そのクエリ速度は非常に遅く、効率は非常に悪い。データの量が一定のレベルに達するとき、この方法で費やされる時間は非常に長くなる可能性があり、データ分析システムに関する人々のパフォーマンス要件に応じることが困難になる。さらに、条件を満たす少量のデータをクエリするためにディスク上の全てのデータを読み取ることも、リソースの大きな浪費である。
【0017】
部分インデックスに基づくデータクエリ方法は、前者の方法に基づいて改良を加え、事前に築かれた部分インデックスを利用してクエリプロセスを高速化する。各データクエリ分析では、最初にインデックスをクエリして、ディスク上の条件をかなえる特有のデータの場所を取得し、次に、対応する場所のデータをディスクから読み取るだけである。この方法により、毎回ディスク全体を読み取る必要がなくなり、時間の消費が削減される。ただし、この方法では、列の一部のインデックスのみが築かれる、つまり、インデックスが作成された列のみがディスク全体のスキャンを回避できる。インデックスが作成されていない列は、ディスク走査を介してクエリする必要がある。したがって、データクエリ分析に対するこの方法の加速効果は限られている。インデックスが作成されていない場合、パフォーマンスは低く、クエリの速度は遅くなる。この方法の別の問題は、データクエリ分析に、複数のインデックスのうちの1つのみを使用することに制限されていることである。インデックスの作成に複数の列が指定されている場合でも、クエリの最適化に複数のインデックス間の関連情報を使用できないため、不要なディスク読み取りが発生する。
【発明の概要】
【0018】
本出願の目的は、既存のソリューションにおける、大量のデータのデータクエリおよび分析の効率が悪いという問題を解決できる、データ記憶およびクエリ方法並びにデバイスを提供することである。
【0019】
本出願の一態様によれば、データ記憶方法が提供される。本方法は、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列にインデックス構築を行ってインデックス情報を確立することと、を含む。
【0020】
さらに、上記の方法は、
格納されたデータの列について、列内のデータの統計情報を取得することをさらに含む。
【0021】
さらに、本方法では、列内のデータの統計情報は、列内の数値の最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの1つ以上を含む。
【0022】
さらに、本方法では、格納されたデータの列にインデックス構築を行ってインデックス情報を確立することは、
格納されたデータを走査して格納された列のインデックス情報を確立することと、列のインデックス情報には、列内のデータとテーブル内の行の行番号の間のマッピング関係が含まれることと、マッピング関係が、列のそれぞれのデータサイズに従って順序付けられていることと、を含む。
【0023】
さらに、本方法では、格納された列のインデックス情報を確立することが、
格納された列の全てについてインデックス情報を作成することを含む。
【0024】
さらに、本方法では、格納された列のインデックス情報を確立する間、本方法は、
格納された列のインデックス情報間の関連関係を確立することをさらに含む。
【0025】
本出願の別の態様によれば、上記のデータ記憶方法を使用して格納されているデータをクエリする方法も提供される。本方法は、
クエリ条件(複数可)を取得することと、
格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【0026】
さらに、本方法では、格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
列内のデータの統計情報に従って、対応するクエリモードを決定することと、クエリモードおよび格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【0027】
さらに、この方法では、各個々のクエリ条件を満たす、格納データに対応する行の行番号セットを取得する前に、本方法は、
格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることをさらに含み、列のインデックス情報には、列内のデータと格納された行の行番号の間のマッピング関係が含まれ、マッピング関係は、列のそれぞれのデータサイズに従ってソートされている。
【0028】
さらに、この方法では、格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【0029】
さらに、本方法では、列内のデータの統計情報は、列内のデータの最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの1つ以上を含む。
【0030】
さらに、本方法では、クエリ条件(複数可)は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの1つ以上を含む。
【0031】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が、ゼロ値のクエリであるとき、列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を行うために、列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードと格納された列のインデックス情報に従って、テーブルからクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することと、を含む。
【0032】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードと列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【0033】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の前記行番号セットを取得することは、
クエリ条件(複数可)が等価クエリであるとき、列の統計情報の各データの出現回数から、列でクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0034】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が等価クエリであるとき、列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0035】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が範囲クエリであるとき、クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内のクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用し、クエリ条件(複数可)を満たす、データの行番号セットを列のインデックスから検索することと、を含む。
【0036】
本出願の別の態様によれば、データ記憶デバイスも提供される。本デバイスは、
行および列記憶構造に従ってデータを格納するように構成されたデータフォーマットモジュールと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立するように構成されたインデックス構築モジュールと、を含む。
【0037】
本出願の別の態様によれば、上記のデータ記憶デバイスによって格納されたデータをクエリするためのデバイスも提供される。本デバイスは、
クエリ条件(複数可)を取得し、格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得するように構成された、クエリ最適化およびデータクエリモジュールを含む。
【0038】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ(複数可)と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、前記プロセッサ(複数可)に、
行と列の記憶構造に従ってデータを格納させ、かつ
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【0039】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ(複数可)と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ(複数可)に、
クエリ条件(複数可)を取得させ、かつ
テーブルの列内のデータの統計情報に従って、対応するクエリモードを決定させ、クエリモードに従ってクエリ条件(複数可)を満たす、テーブル内のデータに対応する行の行番号セットを取得させ、テーブルには行と列が含まれ、テーブルの行は行番号でコンパイルされている。
【0040】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ(複数可)によって実行されるとき、プロセッサ(複数可)に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【0041】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ(複数可)によって実行されるとき、プロセッサ(複数可)に、
クエリ条件(複数可)を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【0042】
本出願の別の態様によれば、データ記憶方法も提供され、それは、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列および/または行にインデックス構築を行ってインデックス情報を確立することと、を含む。
【0043】
本出願は、テーブル内の列のインデックスを構築するため、その後、クエリインデックスを介してクエリ結果を迅速に取得できる。さらに、テーブル内のデータを走査して列内のデータの統計情報を取得することにより、その後のクエリで、列内のデータの統計情報を使用してコストを見積もり、最低のコストと最高のパフォーマンスでデータクエリモードを取得し、クエリの効率を向上させるのに便利である。
【図面の簡単な説明】
【0044】
非限定的な実施形態の詳細な説明のために次の図面を読み、参照することにより、本出願の他の特徴、目的、および利点がより明らかになるであろう。図面中の同じまたは類似の参照番号は、同じまたは類似の構成要素を表す。
【
図1】本出願の一実施形態によるデータ記憶方法およびデバイスのモジュール図を示す。
【
図2】本出願の一実施形態による、行および列を含むテーブルに各データを格納するフローチャートを示す。
【
図3】本出願の一実施形態によるインデックス構築のフローチャートを示す。
【
図4】本出願の一実施形態による列のインデックスストレージの構造図を示す。
【
図5】本出願の一実施形態によるクエリ結果の組み合わせツリーの例示的な図を示す。
【
図6】本出願の一実施形態による例示的な組み合わせの図を示す。
【
図7】本出願の一実施形態による等価クエリのプロセスのフローチャートを示す。
【
図8】出願の実施形態による範囲クエリのプロセスのフローチャートを示す。
【発明を実施するための形態】
【0045】
以下、図面を参照して、本出願についてさらに詳細に記載する。
【0046】
本出願の典型的な構成では、端末、サービスネットワークのデバイス、および信頼できる当事者は全て、1つ以上のプロセッサ(CPU)、入力/出力インターフェース、ネットワークインターフェース、およびメモリを含む。
【0047】
メモリは、揮発性メモリ、ランダムアクセスメモリ(RAM)および/または不揮発性メモリ、例えば読み取り専用メモリ(ROM)、またはフラッシュRAMなどのコンピュータ可読媒体の形態を含み得る。メモリは、コンピュータ可読媒体の例である。
【0048】
コンピュータ可読媒体は、任意の方法または技術を使用して情報の記憶を達成することができる揮発性または不揮発性タイプ、取り外し可能または取り外し不可能媒体を含むことができる。情報は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを含み得る。コンピュータ可読メディアの例には、相変化メモリ(PRAM)、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、その他のタイプのランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電子的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)、クイックフラッシュメモリもしくはその他の内部記憶テクノロジー、コンパクトディスク読み取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)もしくはその他の光学ストレージ、磁気カセットテープ、磁気ディスクストレージもしくはその他の磁気ストレージデバイス、またはコンピューティングデバイスがアクセスできる情報を格納するために使用できるその他の非伝送メディアが含まれるが、これらに限定されない。本明細書で定義されるように、コンピュータ可読媒体は、変調されたデータ信号および搬送波などの一時的な媒体を含まない。
【0049】
図1に示されるように、本出願の一実施形態によるデータクエリおよび記憶デバイスは、データフォーマットモジュール、インデックス構築モジュール、クエリ最適化モジュール、およびクエリ実行モジュールの4つのモジュールを含み得る。
【0050】
データフォーマットモジュールは、データフォーマット変換に使用され、複数のデータを含む元のデータを必要な構造化データに変換する、つまり、行と列を含むテーブルに各データを格納し、テーブルの行に行番号を割り当てる。
【0051】
インデックス構築モジュールは、テーブル内のデータを走査し、テーブル内の列のインデックスを確立し、かつ列内のそれぞれのデータの統計情報を取得するために使用され、列のインデックスは、列内のそれぞれのデータとテーブルの行の行番号との間のマッピング関係を含み、マッピング関係は、各列のそれぞれのデータサイズに従ってソートされている。
【0052】
クエリ最適化モジュールは、構築されたテーブルの列内のそれぞれのデータの統計情報に基づいて、クエリ条件の最適化されたクエリモードを決定し、および/またはクエリ条件の等価な書き換えを実行するために使用され、その目的は、クエリをより高速かつ低コストで実行することである。
【0053】
データクエリモジュールは、決定された最適化されたクエリモードおよび/または等価に書き換えられたクエリ条件に従って実際のクエリ動作を最終的に行い、クエリ条件をかなえるデータの行番号セット、つまり結果セットを取得するために使用される。
【0054】
本出願はまた、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立することと、を含むデータ記憶方法も提供する。
【0055】
本出願の一実施形態では、データ記憶方法は、
格納されたデータの列について列内のデータの統計情報を取得することをさらに含む。
【0056】
本出願はまた、
行と列を含むテーブルに各データを格納する(ここでは、複数のデータを含む元のデータを、行と列の構造の表形式に変換できる)ステップS11と、
テーブルの行に行番号を割り当てるステップS12と、
テーブル内のデータを走査することにより、列内のそれぞれのデータの統計情報を取得するステップS13と、を含むデータ記憶方法を提供する。
【0057】
具体的には、
図2に示されるように、行と列を含むテーブルに各データを格納するには、次のステップ、すなわち、
1)テーブルに含まれる列の数、各列のタイプ、各列の名称、行セパレータ、列セパレータを含む、ユーザーが入力した表構造の定義を入力インターフェースから取得することを含めることができる。サポートされる列のタイプには、次のタイプ、すなわち、short、int、long、float、double、varchar、byte、boolean、decimalがある。行セパレータはデフォルトでは改行であってもよく、列セパレータはデフォルトではコンマであってもよい。
2)入力インターフェースからユーザーが入力したデータソース、つまりデータの記憶場所を取得すること。
3)データソースからユーザーデータを読み取り、行セパレータに従ってユーザーデータをセグメント化して、複数行のデータのコレクションを取得すること。
4)列セパレータに従ってデータの各行をセグメント化し、セグメント化されたデータをテーブルの対応するセルに配置すること。
5)セグメント化されたデータをディスクに格納すること。
【0058】
本実施形態は、テーブルのデータを走査することにより、列内のそれぞれのデータの統計情報を取得するので、列内のそれぞれデータの統計情報を、コスト推定を行うその後のクエリで使用して、最小のコストと最適なパフォーマンスを有するデータクエリモードを取得し、クエリの効率を向上させることができる。
【0059】
本出願の実施形態によるデータ記憶方法では、列内のそれぞれのデータの統計情報は、最大値(Max)、最小値(Min)、列内のゼロ値(Null)と行番号の間のマッピング関係、列内の各データの出現回数(ヒストグラム、His)、および列内の異なるデータの数(別個の値の数、Distinct)のうちの1つ以上を含むことができる。
【0060】
具体的には、データに関連する統計情報の収集には、次のもの、すなわち、
1)データの各列について、その列の全てのデータを走査し、いくつかの変数、最大値(Max)、最小値(Min)、列内のゼロ値(Null)から行番号へのマッピング関係、列内の各データの出現回数(ヒストグラム、His)、および列内の異なるデータの数(別個の値の数、Distinct)を維持し、
2)現在走査されているデータについて、Maxより大きい場合は、Maxを現在走査されている値に更新し、
3)現在走査されているデータについて、Minより小さい場合は、Minを現在走査されている値に更新し、
4)現在走査されているデータについて、ゼロの場合、Nullを1つだけ追加し、Null->DocIdのマッピングを確立し、
5)現在走査されているデータについて、Histに既に存在する場合は、そのようなデータの数を1つだけ蓄積し、存在しない場合は、そのデータをHistに配置し、初期値を1に設定し、
6)全てのデータが走査されたら、Distinctの値を取得するためにHist内のデータ(値)の数を計算する、ことが含まれる。
【0061】
本出願の一実施形態によるデータ記憶方法では、ステップS13で、列内のそれぞれのデータの統計情報を取得しながら、本方法は、
テーブル内のデータを走査して、テーブル内の列のインデックスを築くことをさらに含み、列のインデックスには、列内のそれぞれのデータとテーブル内の対応する行の行番号との間のマッピング関係が含まれ、マッピング関係は、列のデータサイズに従って並べ替えられている。
【0062】
本実施形態では、柱状の記憶構造を採用している。テーブル内の列のインデックスを築くことにより、その後の段階でインデックスをクエリしてクエリ結果を迅速に取得するのに便利である。
【0063】
本出願の一実施形態によるデータ記憶方法では、テーブル内の列のインデックスを構築することは、
テーブル内の全ての列のインデックスを築くことを含む。
【0064】
具体的には、
図3に示されるように、テーブル内の各列のインデックスを確立することは、次のステップを含むことができる。
1)行と列を含むテーブルに各データを格納した後では、データは、行と列で構成されるテーブルの形式で格納されている。まず、テーブル内の行には昇順でシリアル番号が順に割り当てられ、DocIdを使用して識別される。例えば、第1の行のDocId=1、第2の行のDocId=2などである。次に、以下の動作が各行について行われる。
2)データの各行はDocIdを使用して、前のステップでそれぞれの行のシリアル番号を識別し、テーブルの各行は複数の列に分割されている。したがって、テーブルのセルのデータ(Value)のために、セルの値からDocIdへのマッピング関係を構築できる(Value->DocId)。
3)列内の複数のセルのデータが同じである場合、次のマッピング関係、Value->DocId1、DocId2、DocId3~、つまり、そのデータが位置している行番号へのデータのマッピングが取得される。記憶フォーマットの構造図は、
図4に示されるようなものであり得、ここで、データV1、V2、V3~Vnは徐々に増加する。
【0065】
テーブルの全ての列についてインデックスが作成されると、テーブルの完全なインデックス構造が取得される。その後のクエリでは、ユーザーは検索するデータを入力する。上記のマッピング関係を介して、対応する行番号(DocID)セットを見つけることができ、対応する行をDocIdセットから読み取ることができる。
【0066】
本実施形態では、全ての列の完全インデックス技術を採用している。各列には個別のインデックス構造があり、これにより、任意の条件および任意の列に対するその後のクエリでインデックスの事前選択機能を使用できるため、ディスクの読み取りと書き込みの使用が削減される。
【0067】
本出願の一実施形態によるデータ記憶方法では、テーブル内の列のインデックスを築くことはまた、
テーブル内の列のインデックス間の関連関係を確立することも含む。
【0068】
本実施形態では、テーブル内の列のインデックス間の関連関係を確立することにより、その後のクエリが、複数のインデックス間の関連付け情報を最大限に活用し、元のクエリ条件を最小のコストと最適なパフォーマンスで、等価クエリ条件に書き換え、データフィルタリングの機能をさらに改善し、ディスクの読み取りと書き込みの消費量を減らすのに便利である。
【0069】
本出願の別の態様によれば、前述の実施形態のデータ記憶方法を使用することによって格納されたデータをクエリする方法も提供される。本方法には、
クエリ条件(複数可)を取得することと、
格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、が含まれる。
【0070】
本出願の実施形態によるデータクエリ方法では、格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
列内のデータの統計情報に従って、対応するクエリモードを決定することと、クエリモードおよび格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【0071】
本出願の実施形態によるデータクエリ方法では、各個々のクエリ条件を満たすデータの行番号セットを取得する前に、本方法は、
格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることであって、列のインデックス情報には、列内のデータと格納された行の行番号の間のマッピング関係が含まれ、マッピング関係が、列のそれぞれのデータサイズに従ってソートされている、複数の個々のクエリ条件を単一のクエリ条件に結合することをさらに含む。
【0072】
本出願の実施形態によるデータクエリ方法では、格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【0073】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報は、列内のデータの最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの1つ以上を含む。
【0074】
本出願の実施形態によるデータクエリ方法では、クエリ条件(複数可)は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの1つ以上を含む。
【0075】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が、ゼロ値のクエリであるとき、列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を行うために、列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードと格納された列のインデックス情報に従って、テーブルからクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することと、を含む。
【0076】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
個々のクエリ条件で各々クエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードと列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【0077】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が等価クエリであるとき、列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0078】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が等価クエリであるとき、列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックスから個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0079】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件(複数可)が範囲クエリであるとき、クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲の閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内のクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用し、クエリ条件(複数可)を満たす、データの行番号セットを列のインデックスから検索することと、を含む。
【0080】
本出願の実施形態によるデータクエリ方法は、
クエリ条件を取得するステップS21と、
テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従ってクエリ条件(複数可)をかなえるテーブル内のデータに対応する行の行番号セットを取得し、テーブルには行と列が含まれ、テーブルの行は行番号でコンパイルされている、ステップS22と、を含む。
【0081】
本実施形態では、列内のそれぞれのデータの統計情報は、コストを見積もるためにクエリを行うときに使用され、コストが最も低く、パフォーマンスが最も高いデータクエリモードが取得され、クエリの効率を向上させる。
【0082】
本出願の実施形態によるデータクエリ方法では、取得されたクエリ条件(複数可)が複数のクエリ条件の組み合わせである場合、ステップS22において、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従ってクエリ条件(複数可)をかなえるテーブル内のデータに対応する行の行番号セットを取得することは、
複数のクエリ条件の組み合わせを個々のクエリ条件に分割する、例えば、複数のクエリ条件を、AND、OR、NOTなどの論理演算子に従って複数の個々のクエリ条件に分割することと、
テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリ方法を決定し、クエリモードに従って各個々のクエリ条件を満たす、データのそれぞれの行番号セットを取得することと、
複数のクエリ条件の組み合わせに従って、個々のクエリ条件全てに応じる、取得したデータの行番号セットを組み合わせることと、を含む。
【0083】
複数のクエリ条件の組み合わせを個々のクエリ条件に分割すると、クエリの効率をさらに向上させることができる。
【0084】
本出願の実施形態によるデータクエリ方法では、クエリ条件(複数可)は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの1つ以上を含む。
【0085】
具体的には、ゼロ値クエリは主に、ゼロである指定された列のデータのクエリの処理と、AND、ORおよび/またはNOTを介した多数のそのようなクエリで構成される複合クエリの処理を担当する。
【0086】
等価クエリは主に、指定された列が特有のデータと等しいクエリと、AND、ORおよび/またはNOTなどの論理演算子を介して基本的なクエリによって形成されるクエリの処理を主に担当する。例えば、ID=5、名前=lucy AND 住所=USAなど。
【0087】
範囲クエリは主に、特定の列が一定の範囲内にあるかどうかの処理と、AND、ORおよび/またはNOTなどの論理演算子を介してそのようなクエリの数によって形成される複合クエリを担当する。例えば、ID>3またはID>2AND ID<5など。
【0088】
本出願の実施形態によるデータクエリ方法では、テーブルの列内のそれぞれのデータの統計情報に従って各個々のクエリ条件を満たす、データの行番号セットを取得する前に、本方法は、
テーブルの列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることをさらに含み、列のインデックス情報には、列内のデータと行の行番号の間のマッピング関係が含まれ、マッピング関係は、列のそれぞれのデータサイズに従ってソートされている。
【0089】
上記の等価クエリ、範囲クエリおよびゼロ値クエリの実行中に、異なるインデックス間の関連関係が使用される場合がある。インデックス間の関連関係に基づいて、AND、OR、NOTなどの複数の条件で組み合わせ演算を実行できる。例えば、DATE>20170202 AND TIME>´20170202 12:12:00´のクエリの場合、これら2つの条件は、DATEとTIMEの間の関連関係を使用して、TIME>´20170202 12:12:00´の条件に組み合わせることができ、これにより、インデックスクエリのコストがさらに削減される。
【0090】
本出願の実施形態によるデータクエリ方法では、複数のクエリ条件の組み合わせに従って、個々のクエリ条件の全てに応じるデータの取得された行番号セットを組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【0091】
具体的には、本実施形態の処理フローは、次のステップ、すなわち、
1)クエリ最適化モジュールによる処理後、個々のクエリ条件の各々を満たす、それぞれの行セットを個別に取得することと、
2)AND、OR、NOTなどのような元のクエリ条件における論理関係に従って、個々のクエリ条件から
図5に示されるような結果の組み合わせツリーを構築することと、
3)
図6に示されるように、個々のクエリ条件の各々を満たす、それぞれの行セットのリーフノードから開始して毎回結果を取得し、ルートノードに到達するまでブランチに沿って追跡し、中間ノードに従って論理演算を実行することと、
4)ルートノードから収集された行セットが結果の要件を満たす場合、計算プロセスを早期に終了することと、を含み得る。
【0092】
本実施形態は、複数のインデックスクエリ結果セットを組み合わせるコストを最小化し、システムリソースを節約し、計算プロセスを加速し、クエリパフォーマンスを向上させるストリーミング組み合わせ方法を採用する。
【0093】
本出願の実施形態によるデータ記憶方法では、列内のそれぞれのデータの統計情報は、最大値(Max)、最小値(Min)、列内のゼロ値(Null)と行番号の間のマッピング関係、列内の各データの出現回数(ヒストグラム、His)、および列内の異なるデータの数(別個の値の数、Distinct)のうちの1つ以上を含むことができる。
【0094】
本出願の実施形態によるデータクエリ方法において、クエリ条件(複数可)が、ゼロ値のクエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
テーブルの列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を実行するために、テーブルの列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することと、を含む。
【0095】
統計的なゼロ情報を検索してゼロ値をクエリするステップは、次のように、
1)AND、OR、および/またはNOTに従って、複合クエリを複数の個々のクエリ条件に分割することと、
2)インデックスで確立されたNull->DocIdマッピング関係を検索して、個々のクエリ条件の各々の個々のクエリ条件を満たす、行のセットを取得することと、であり得る。
【0096】
本出願の実施形態によるデータクエリ方法では、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
テーブルの列の各データの統計情報に従って、対応するクエリ方法を決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することを含む。
【0097】
クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得すると、クエリ効率をさらに向上させることができる。
【0098】
本出願の実施形態によるデータクエリ方法において、クエリ条件(複数可)が等価クエリまたは範囲クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブルの列のインデックス情報に従って、クエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することと、を含む。
【0099】
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内にないと決定したとき、これは、条件をかなえるデータが存在しないことを示し、クエリの効率を向上させるために、クエリモードがクエリを終了して空のセットを返すことを決定できる。
【0100】
本出願の実施形態によるデータクエリ方法において、クエリ条件(複数可)が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報の個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0101】
具体的には、
図7に示されるように、本実施形態における等価クエリのステップは、以下を含むことができる。
1)AND、OR、NOTなどの論理演算子に従ってクエリ条件を複数の個々のクエリ条件に分割し、次のステップを個別に実行する。
2)個々のクエリ条件に各々含まれる各列の最小値と最大値をチェックし、検索する値が[最小、最大]の範囲内にあるかどうかを確認する。範囲内にない場合、これは条件に応じるデータが存在しないことを意味する。範囲内にある場合、次のステップが行われる。
3)Histヒストグラムをチェックして、検索する値が列に現れる回数を確認する。出現回数が占める行の、総数に対する割合が一定の閾値を超えると、現在の検索プロセスが停止し、列内の全てのデータを直接走査するように変更される。出現回数が占める行の、総数に対する割合が一定の閾値未満の場合は、次のステップが実行される。
4)列の確立されたインデックスを介して、値に対応するDocIdセットを検索する、つまり、個々のクエリ条件を満たす、全ての行のセットを取得する。
5)全ての列に対して上記のステップを行った後、個々のクエリ条件を満たす、行番号のセットを取得する。
【0102】
本実施形態では、列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得することにより、クエリされるデータの取得された出現回数が占める行の、総数に対する割合が、事前設定された割合閾値を超えているかどうかが決定され、これにより、クエリ効率を向上させるために、好ましいクエリモードが決定される。
【0103】
本出願の実施形態によるデータクエリ方法において、クエリ条件が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックスから個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0104】
本実施形態と前の実施形態との違いは、列内のクエリされるデータの出現回数は、列内の行数とその列の統計情報内の異なるデータ数に従って推定されることであり、クエリされるデータの推定された出現回数が占める列内の行の総数に対する割合が、事前設定された割合閾値を超えているかどうかが決定され、これにより、クエリ効率を向上させるために、好ましいクエリモードが決定される。
【0105】
本出願の実施形態によるデータクエリ方法において、クエリ条件が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件(複数可)を満たす、データに対応する行の行番号セットを取得することは、
クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内でクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用して、クエリ条件を満たす、データの行番号セットを検索することと、を含む。
【0106】
具体的には、
図8に示されるように、本実施形態における範囲クエリのステップは、
1)AND、OR、NOTなどに従って、組み合わされたクエリを複数の個々のクエリ条件に分割することと、
2)関与する列の範囲情報[最小、最大]に基づいて、個々のクエリ条件をそれぞれ比較し、クエリ範囲がその範囲内にない場合、空のセットが返され、クエリ範囲がこの範囲内にある場合、次のステップが行われることと、
3)個々のクエリ条件の範囲を[最小、最大]と比較し、クエリ範囲のカバレッジの範囲が[最小、最大]の半分以上の場合、現在のインデックスクエリプロセスが停止し、直接走査によってその列の全てのデータを検索するように条件が変更され、カバレッジの範囲が[最小、最大]の半分未満の場合、次のステップが行われることと、
4)クエリ条件のデータ範囲の最小値を開始点として使用し、クエリ条件のデータ範囲の最大値を終了点として使用することと、
5)構築されたインデックスで検索を実行し、開始点から終了点までの全ての値とこれらの値に対応する行のセットを収集する、つまり、個々のクエリ条件のクエリをかなえるデータの全ての行のセットを取得することと、を含むことができる。
【0107】
本出願の別の態様によれば、データ記憶デバイスも提供される。本デバイスは、
行および列記憶構造に従ってデータを格納するように構成されたデータフォーマットモジュールと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立するように構成されたインデックス構築モジュールと、を含む。
【0108】
本出願の別の態様によれば、上記のデータ記憶デバイスによって格納されたデータをクエリするためのデバイスも提供される。本デバイスは、
クエリ条件(複数可)を取得し、格納された列のインデックス情報に従ってクエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得するように構成された、クエリ最適化およびデータクエリモジュールを含む。
【0109】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ(複数可)と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ(複数可)に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【0110】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ(複数可)と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ(複数可)に、
クエリ条件(複数可)を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【0111】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ(複数可)によって実行されるとき、プロセッサ(複数可)に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【0112】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ(複数可)によって実行されるとき、プロセッサ(複数可)に、
クエリ条件(複数可)を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件(複数可)を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【0113】
本出願のデバイスの実施形態の特有の内容は、方法の実施形態の対応する部分を参照することができ、ここでは繰り返さない。
【0114】
明らかに、当業者は、本出願の精神および範囲から逸脱することなく、本出願に様々な改変および変形をすることができる。このようにして、本出願のこれらの改変および変形が、本出願およびそれらの等価な技術の特許請求の範囲内にある場合、本出願はまた、これらの改変および変形を含むことを意図する。
【0115】
本出願は、ソフトウェアおよび/またはソフトウェアとハードウェアの組み合わせで実装されてもよいことに留意されたい。例えば、本出願は、特定用途向け集積回路(ASIC)、汎用コンピュータ、または他の任意の同様なハードウェアデバイスを使用して実装され得る。実施形態では、本出願のソフトウェアプログラムは、上記のステップまたは機能を実装するためにプロセッサによって実行され得る。同様に、本出願の(関連するデータ構造を含む)ソフトウェアプログラムは、RAM記憶デバイス、磁気もしくは光学ドライブ、またはフロッピーディスク、および類似のデバイスなどのコンピュータ可読記録媒体に格納することができる。加えて、本出願のいくつかのステップまたは機能は、ハードウェアによって、例えば、様々なステップまたは機能を行うためにプロセッサと協働する回路として実装されてもよい。
【0116】
加えて、本出願の一部は、コンピュータプログラム製品、例えば、コンピュータプログラム命令として適用されてもよい。コンピュータプログラム命令がコンピュータによって実行されるとき、本出願による方法および/または技術的解決策は、コンピュータの動作を介して呼び出されるか、または提供されてもよい。本出願の方法を呼び出すためのプログラム命令は、固定または取り外し可能な記録媒体に格納され、および/または放送または他の信号伝達媒体のデータストリームを介して送信され、および/またはプログラムの命令に従って走行するコンピューターデバイスの作業メモリに格納される。本出願による実施形態は、装置を含み、装置は、コンピュータプログラム命令を格納するように構成されたメモリと、プログラム命令を実行するように構成されたプロセッサとを含み、コンピュータプログラム命令は、プロセッサによって実行されるとき、デバイスをトリガして、本出願の前述の実施形態による方法および/または技術的解決策を走行させる。
【0117】
本出願が、上記の例示的な実施形態の詳細に限定されないこと、および本出願が、本出願の精神または基本的特徴から逸脱することなく他の特有の形態で実装できることは当業者には明らかである。したがって、どの観点にも関係なく、実施形態は例示的で非限定的なものと見なされるべきである。本出願の範囲は、上記の説明ではなく添付の特許請求の範囲によって定義され、したがって、本出願に含まれる特許請求の範囲の等価な要素の意味および範囲内の全ての変更に含まれるものとする。請求項における図面の参照ラベルは、関連する請求項を限定するものと見なされるべきではない。さらに、「含む」という用語は、明らかに他のユニットまたはステップを除外せず、単数形は複数形を除外しない。装置の請求項に記載されている複数のユニットまたは装置は、ソフトウェアまたはハードウェアを介して1つのユニットまたは装置によって実装することもできる。「第1」および「第2」などの用語は、名称を示すために使用され、特定の順序を表すものではない。