(57)【要約】本出願の目的は、テーブルの列のインデックスを確立することにより、その後の段階でインデックスクエリを介してクエリ結果の迅速な取得を容易にする、データ記憶およびクエリ方法並びにデバイスを提供することである。さらに、テーブル内のデータを走査して列内のデータの統計情報を取得することにより、列内のデータの統計情報を使用して、その後のクエリでコスト見積もりを行い、最小のコストと最高のパフォーマンスにより、クエリの効率が向上する。
2021506012.tif 000002
【特許請求の範囲】
【請求項１】
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列にインデックス構築を行ってインデックス情報を確立することと、を含む、データ記憶方法。
【請求項２】
前記格納されたデータの列について、前記列内のデータの統計情報を取得することをさらに含む、請求項１の方法。
【請求項３】
前記列内の前記データの前記統計情報が、前記列内の数値の最大値と最小値、前記列内のゼロ値と行番号の間のマッピング関係、前記列内の各データの出現回数、および前記列内の異なるデータの数のうちの１つ以上を含む、請求項２の方法。
【請求項４】
前記格納されたデータの前記列に前記インデックス構築を行って前記インデックス情報を確立することが、
前記格納されたデータを走査して前記格納された列のインデックス情報を確立することと、前記列の前記インデックス情報には、前記列内のデータとテーブル内の行の行番号の間のマッピング関係が含まれることと、前記マッピング関係が、前記列のそれぞれのデータサイズに従って順序付けられていることと、を含む、請求項１の方法。
【請求項５】
前記格納された列の前記インデックス情報を確立することが、
前記格納された列の全てについてインデックス情報を作成することを含む、請求項４の方法。
【請求項６】
前記格納された列の前記インデックス情報を確立する間、前記方法が、
前記格納された列の前記インデックス情報間の関連関係を確立することをさらに含む、請求項４の方法。
【請求項７】
請求項１乃至６のいずれか一項に記載のデータ記憶方法を使用して格納されているデータをクエリする方法であって、
クエリ条件を取得することと、
格納された列のインデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する行の行番号セットを取得することと、を含む、方法。
【請求項８】
前記格納された列の前記インデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する前記行の行番号セットを取得することが、
前記列内のデータの統計情報に従って、対応するクエリモードを決定することと、前記クエリモードおよび前記格納された列の前記インデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することと、を含む、請求項７の方法。
【請求項９】
個々のクエリ条件を満たす、各格納データに対応する行の行番号セットを取得する前に、前記方法がさらに、
前記格納された列の前記インデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることを含み、前記列の前記インデックス情報には、前記列内の前記データと格納された行の行番号の間のマッピング関係が含まれ、前記マッピング関係が、前記列のそれぞれのデータサイズに従ってソートされている、請求項８の方法。
【請求項１０】
前記格納された列の前記インデックス情報間の前記関連関係に従って、前記複数の個々のクエリ条件を前記単一のクエリ条件に組み合わせることが、
前記クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
前記組み合わされた結果を集計することと、を含む、請求項９の方法。
【請求項１１】
前記列内の前記データの前記統計情報が、前記列内の前記データの最大値と最小値、前記列内のゼロ値と行番号の間のマッピング関係、前記列内の各データの出現回数、および前記列内の異なるデータの数のうちの１つ以上を含む、請求項９の方法。
【請求項１２】
前記クエリ条件が、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの１つ以上を含む、請求項９の方法。
【請求項１３】
前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が、ゼロ値のクエリであるとき、前記列内の前記ゼロ値と前記行番号の間の前記マッピング関係の前記統計情報に従って検索を行うために、前記列内の前記ゼロ値と前記行番号の間の前記マッピング関係を使用するクエリモードを決定することと、
前記クエリモードと前記格納された列の前記インデックス情報に従って、テーブルから前記クエリ条件を満たす、前記データに対応する前記行の前記行番号セットを取得することと、を含む、請求項１２の方法。
【請求項１４】
前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、前記列の前記統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
前記範囲内にない場合、ゼロセットを返すことと、
前記範囲内にある場合、前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードと前記列の前記インデックス情報に従って、前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することと、を含む、請求項１２の方法。
【請求項１５】
前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が等価クエリであるとき、前記列の前記統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、前記列内の行の総数に関して前記クエリされるデータの前記出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、前記列内の全ての前記データを走査して、前記個々のクエリ条件を満たす、前記データの前記行番号セットを取得することと、
そうでない場合は、前記列の前記インデックス情報から前記個々のクエリ条件を満たす、データの前記行番号セットを検索することと、を含む、請求項１４の方法。
【請求項１６】
前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が等価クエリであるとき、前記列内の行数と前記列の前記統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、前記列内の行の総数に関して前記クエリされるデータの前記推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、前記列内の全ての前記データを走査して、前記個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、前記列の前記インデックス情報から前記個々のクエリ条件を満たす、データの前記行番号セットを検索することと、を含む、請求項１４の方法。
【請求項１７】
前記列内の前記データの前記統計情報に従って、前記対応するクエリモードを決定し、前記クエリモードおよび前記格納された列の前記インデックス情報に従って前記クエリ条件を満たす、前記格納されたデータに対応する前記行の前記行番号セットを取得することが、
前記クエリ条件が範囲クエリであるとき、前記クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、前記列の前記統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、前記列内の全てのデータを走査して、前記クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、前記列内の前記クエリされるデータの前記最大値と前記最小値をそれぞれ検索の開始点と終了点として使用し、前記クエリ条件を満たす、前記データの行番号セットを前記列のインデックスから検索することと、を含む、請求項１４の方法。
【請求項１８】
行および列記憶構造に従ってデータを格納するように構成されたデータフォーマットモジュールと、
前記格納されたデータの列にインデックス構築を行って、インデックス情報を確立するように構成されたインデックス構築モジュールと、を備えた、データ記憶デバイス。
【請求項１９】
請求項１８に記載の前記データ記憶デバイスによって格納されたデータをクエリするためのデバイスであって、
クエリ条件を取得し、格納された列のインデックス情報に従ってクエリ条件を満たす、格納されたデータに対応する行の行番号セットを取得するように構成された、クエリ最適化およびデータクエリモジュールを備えた、デバイス。
【請求項２０】
プロセッサと、
コンピュータ実行可能命令を格納するように配設されたメモリと
を備え、前記コンピュータ実行可能命令は、実行されるとき、前記プロセッサに、
行と列の記憶構造に従ってデータを格納させ、かつ
前記格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる、コンピューティングベースのデバイス。
【請求項２１】
プロセッサと、
コンピュータ実行可能命令を格納するように配設されたメモリと
を備え、前記コンピュータ実行可能命令は、実行されるとき、前記プロセッサに、
クエリ条件を取得させ、
格納された列のインデックス情報に従って、前記クエリ条件を満たす、データに対応する、行の行番号セットを取得させる、コンピューティングベースのデバイス。
【請求項２２】
コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、プロセッサによって実行されるとき、前記プロセッサに、
行と列の記憶構造に従ってデータを格納させ、
前記格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる、コンピュータ可読記憶媒体。
【請求項２３】
コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令は、プロセッサによって実行されるとき、前記プロセッサに、
クエリ条件を取得させ、
前記格納された列のインデックス情報に従って、前記クエリ条件を満たす、格納されたデータに対応する行の行番号セットを取得させる、コンピュータ可読記憶媒体。
【請求項２４】
行と列の記憶構造に従ってデータを格納することと、
前記格納されたデータの列および／または行にインデックス構築を行ってインデックス情報を確立することと、を含むデータ記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、2017年12月8日に出願され、「データ記憶およびクエリ方法並びにデバイス」と題された中国出願番号201711296260.8の優先権を主張する。
【０００２】
本明細書は、コンピュータの分野に関し、特に、データ記憶およびクエリ方法並びにデバイスに関する。
【背景技術】
【０００３】
社会と経済の発展に伴い、科学技術も急速に進歩している。近年、モバイルインターネット技術やモノのインターネット技術の人気が高まり、ビッグデータ時代の到来を告げると同時に、人々の生活に大きな利便性をもたらしている。今日、学界から業界、組織から個人に至るまで、非常に価値のあるデータが常に生成されている。このデータは、企業や実業に多大な経済的利益をもたらす可能性があり、適切に使用すれば、人間の健康や社会の発展にも利益をもたらす可能性がある。ただし、この貴重なデータには、データの欠落、乱雑なデータ、様々な形式、ソースの多様性などの問題があるだけでなく、データ量も途方もなく大きいものになる。
【０００４】
ＩＢＭの調査によると、人類の文明全体によって取得された全てのデータの９０％は過去２年間に生成されたものである。今後のデータ量の増加率はますます速くなる。このような膨大な量のデータに直面すると、従来のコンピューターデータ分析技術は、ますます不十分になり、大規模なデータ分析に対する人々のパフォーマンス要件に応じることが困難になっている。そのようなデータから貴重な情報を迅速かつ便利にクエリおよび選択する方法が、緊急に解決されるべき重要な問題になっている。
【０００５】
大規模なデータ分析の問題を扱う場合、データはしばしば構造化表現に変換される、つまり、データは行と列で構成されるテーブル形式に変換される。各行はレコードを表し、各レコードはいくつかの列で構成される。各列は、レコードの情報の一部を表す特有のフィールドである。
【０００６】
現在、構造化データのクエリを行うために使用される方法は、主に２つのタイプに分けられる。１つはディスク走査に基づくデータクエリ方法であり、もう１つは部分インデックスに基づくデータクエリ方法である。
【０００７】
ディスク走査に基づくデータクエリ方法は、主に次の２つの手順で完了する。
【０００８】
ステップ１：データの記憶。データを行と列の表現に変換し、それらを行ごとにディスクに継続的に格納する。
【０００９】
ステップ２：データの分析。ディスクに格納されたデータを順次読み取り、入力されるフィルタ条件に従ってフィルタリングを行い、フィルタ条件に応じないデータは無視し、フィルタ条件に応じるデータを出力する。
【００１０】
部分インデックスに基づくデータクエリ方法は比較的複雑であり、一般的に次のステップを含む。
【００１１】
ステップ１：データの記憶。データを行と列の表現に変換し、それらを行うごとにディスクに継続的に格納する。
【００１２】
手順２：指定した列にインデックスを作成する。入力から指定された列を取得し、列に部分インデックスを築く。
【００１３】
ステップ３：単純なクエリ最適化。入力からクエリ条件を取得し、手順２で構築したインデックスに従って最適化を行い、クエリ条件を、より短い時間で等価クエリ条件に変換する。
【００１４】
ステップ４：データクエリ。手順３で最適化されたクエリ条件に基づいてデータフィルタリングを行い、条件を満たさないデータは無視し、条件を満たすデータを保持する。
【００１５】
構造化データの２つのクエリ方法、ディスク走査に基づくデータクエリ方法と、部分インデックスに基づくデータクエリ方法について、上記で簡単に記載した。
【００１６】
ディスク走査に基づくデータクエリ方法では、データクエリ分析が行われるたびに、ディスクから全てのデータを読み取る必要がある。そのクエリ速度は非常に遅く、効率は非常に悪い。データの量が一定のレベルに達するとき、この方法で費やされる時間は非常に長くなる可能性があり、データ分析システムに関する人々のパフォーマンス要件に応じることが困難になる。さらに、条件を満たす少量のデータをクエリするためにディスク上の全てのデータを読み取ることも、リソースの大きな浪費である。
【００１７】
部分インデックスに基づくデータクエリ方法は、前者の方法に基づいて改良を加え、事前に築かれた部分インデックスを利用してクエリプロセスを高速化する。各データクエリ分析では、最初にインデックスをクエリして、ディスク上の条件をかなえる特有のデータの場所を取得し、次に、対応する場所のデータをディスクから読み取るだけである。この方法により、毎回ディスク全体を読み取る必要がなくなり、時間の消費が削減される。ただし、この方法では、列の一部のインデックスのみが築かれる、つまり、インデックスが作成された列のみがディスク全体のスキャンを回避できる。インデックスが作成されていない列は、ディスク走査を介してクエリする必要がある。したがって、データクエリ分析に対するこの方法の加速効果は限られている。インデックスが作成されていない場合、パフォーマンスは低く、クエリの速度は遅くなる。この方法の別の問題は、データクエリ分析に、複数のインデックスのうちの１つのみを使用することに制限されていることである。インデックスの作成に複数の列が指定されている場合でも、クエリの最適化に複数のインデックス間の関連情報を使用できないため、不要なディスク読み取りが発生する。
【発明の概要】
【００１８】
本出願の目的は、既存のソリューションにおける、大量のデータのデータクエリおよび分析の効率が悪いという問題を解決できる、データ記憶およびクエリ方法並びにデバイスを提供することである。
【００１９】
本出願の一態様によれば、データ記憶方法が提供される。本方法は、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列にインデックス構築を行ってインデックス情報を確立することと、を含む。
【００２０】
さらに、上記の方法は、
格納されたデータの列について、列内のデータの統計情報を取得することをさらに含む。
【００２１】
さらに、本方法では、列内のデータの統計情報は、列内の数値の最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの１つ以上を含む。
【００２２】
さらに、本方法では、格納されたデータの列にインデックス構築を行ってインデックス情報を確立することは、
格納されたデータを走査して格納された列のインデックス情報を確立することと、列のインデックス情報には、列内のデータとテーブル内の行の行番号の間のマッピング関係が含まれることと、マッピング関係が、列のそれぞれのデータサイズに従って順序付けられていることと、を含む。
【００２３】
さらに、本方法では、格納された列のインデックス情報を確立することが、
格納された列の全てについてインデックス情報を作成することを含む。
【００２４】
さらに、本方法では、格納された列のインデックス情報を確立する間、本方法は、
格納された列のインデックス情報間の関連関係を確立することをさらに含む。
【００２５】
本出願の別の態様によれば、上記のデータ記憶方法を使用して格納されているデータをクエリする方法も提供される。本方法は、
クエリ条件（複数可）を取得することと、
格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【００２６】
さらに、本方法では、格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
列内のデータの統計情報に従って、対応するクエリモードを決定することと、クエリモードおよび格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【００２７】
さらに、この方法では、各個々のクエリ条件を満たす、格納データに対応する行の行番号セットを取得する前に、本方法は、
格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることをさらに含み、列のインデックス情報には、列内のデータと格納された行の行番号の間のマッピング関係が含まれ、マッピング関係は、列のそれぞれのデータサイズに従ってソートされている。
【００２８】
さらに、この方法では、格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【００２９】
さらに、本方法では、列内のデータの統計情報は、列内のデータの最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの１つ以上を含む。
【００３０】
さらに、本方法では、クエリ条件（複数可）は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの１つ以上を含む。
【００３１】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が、ゼロ値のクエリであるとき、列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を行うために、列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードと格納された列のインデックス情報に従って、テーブルからクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することと、を含む。
【００３２】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードと列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【００３３】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の前記行番号セットを取得することは、
クエリ条件（複数可）が等価クエリであるとき、列の統計情報の各データの出現回数から、列でクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【００３４】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が等価クエリであるとき、列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【００３５】
さらに、この方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が範囲クエリであるとき、クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内のクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用し、クエリ条件（複数可）を満たす、データの行番号セットを列のインデックスから検索することと、を含む。
【００３６】
本出願の別の態様によれば、データ記憶デバイスも提供される。本デバイスは、
行および列記憶構造に従ってデータを格納するように構成されたデータフォーマットモジュールと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立するように構成されたインデックス構築モジュールと、を含む。
【００３７】
本出願の別の態様によれば、上記のデータ記憶デバイスによって格納されたデータをクエリするためのデバイスも提供される。本デバイスは、
クエリ条件（複数可）を取得し、格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得するように構成された、クエリ最適化およびデータクエリモジュールを含む。
【００３８】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ（複数可）と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、前記プロセッサ（複数可）に、
行と列の記憶構造に従ってデータを格納させ、かつ
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【００３９】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ（複数可）と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ（複数可）に、
クエリ条件（複数可）を取得させ、かつ
テーブルの列内のデータの統計情報に従って、対応するクエリモードを決定させ、クエリモードに従ってクエリ条件（複数可）を満たす、テーブル内のデータに対応する行の行番号セットを取得させ、テーブルには行と列が含まれ、テーブルの行は行番号でコンパイルされている。
【００４０】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ（複数可）によって実行されるとき、プロセッサ（複数可）に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【００４１】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ（複数可）によって実行されるとき、プロセッサ（複数可）に、
クエリ条件（複数可）を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【００４２】
本出願の別の態様によれば、データ記憶方法も提供され、それは、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列および／または行にインデックス構築を行ってインデックス情報を確立することと、を含む。
【００４３】
本出願は、テーブル内の列のインデックスを構築するため、その後、クエリインデックスを介してクエリ結果を迅速に取得できる。さらに、テーブル内のデータを走査して列内のデータの統計情報を取得することにより、その後のクエリで、列内のデータの統計情報を使用してコストを見積もり、最低のコストと最高のパフォーマンスでデータクエリモードを取得し、クエリの効率を向上させるのに便利である。
【図面の簡単な説明】
【００４４】
非限定的な実施形態の詳細な説明のために次の図面を読み、参照することにより、本出願の他の特徴、目的、および利点がより明らかになるであろう。図面中の同じまたは類似の参照番号は、同じまたは類似の構成要素を表す。
【図１】本出願の一実施形態によるデータ記憶方法およびデバイスのモジュール図を示す。
【図２】本出願の一実施形態による、行および列を含むテーブルに各データを格納するフローチャートを示す。
【図３】本出願の一実施形態によるインデックス構築のフローチャートを示す。
【図４】本出願の一実施形態による列のインデックスストレージの構造図を示す。
【図５】本出願の一実施形態によるクエリ結果の組み合わせツリーの例示的な図を示す。
【図６】本出願の一実施形態による例示的な組み合わせの図を示す。
【図７】本出願の一実施形態による等価クエリのプロセスのフローチャートを示す。
【図８】出願の実施形態による範囲クエリのプロセスのフローチャートを示す。
【発明を実施するための形態】
【００４５】
以下、図面を参照して、本出願についてさらに詳細に記載する。
【００４６】
本出願の典型的な構成では、端末、サービスネットワークのデバイス、および信頼できる当事者は全て、１つ以上のプロセッサ（ＣＰＵ）、入力／出力インターフェース、ネットワークインターフェース、およびメモリを含む。
【００４７】
メモリは、揮発性メモリ、ランダムアクセスメモリ（ＲＡＭ）および／または不揮発性メモリ、例えば読み取り専用メモリ（ＲＯＭ）、またはフラッシュＲＡＭなどのコンピュータ可読媒体の形態を含み得る。メモリは、コンピュータ可読媒体の例である。
【００４８】
コンピュータ可読媒体は、任意の方法または技術を使用して情報の記憶を達成することができる揮発性または不揮発性タイプ、取り外し可能または取り外し不可能媒体を含むことができる。情報は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを含み得る。コンピュータ可読メディアの例には、相変化メモリ（ＰＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、その他のタイプのランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電子的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）、クイックフラッシュメモリもしくはその他の内部記憶テクノロジー、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）もしくはその他の光学ストレージ、磁気カセットテープ、磁気ディスクストレージもしくはその他の磁気ストレージデバイス、またはコンピューティングデバイスがアクセスできる情報を格納するために使用できるその他の非伝送メディアが含まれるが、これらに限定されない。本明細書で定義されるように、コンピュータ可読媒体は、変調されたデータ信号および搬送波などの一時的な媒体を含まない。
【００４９】
図１に示されるように、本出願の一実施形態によるデータクエリおよび記憶デバイスは、データフォーマットモジュール、インデックス構築モジュール、クエリ最適化モジュール、およびクエリ実行モジュールの４つのモジュールを含み得る。
【００５０】
データフォーマットモジュールは、データフォーマット変換に使用され、複数のデータを含む元のデータを必要な構造化データに変換する、つまり、行と列を含むテーブルに各データを格納し、テーブルの行に行番号を割り当てる。
【００５１】
インデックス構築モジュールは、テーブル内のデータを走査し、テーブル内の列のインデックスを確立し、かつ列内のそれぞれのデータの統計情報を取得するために使用され、列のインデックスは、列内のそれぞれのデータとテーブルの行の行番号との間のマッピング関係を含み、マッピング関係は、各列のそれぞれのデータサイズに従ってソートされている。
【００５２】
クエリ最適化モジュールは、構築されたテーブルの列内のそれぞれのデータの統計情報に基づいて、クエリ条件の最適化されたクエリモードを決定し、および／またはクエリ条件の等価な書き換えを実行するために使用され、その目的は、クエリをより高速かつ低コストで実行することである。
【００５３】
データクエリモジュールは、決定された最適化されたクエリモードおよび／または等価に書き換えられたクエリ条件に従って実際のクエリ動作を最終的に行い、クエリ条件をかなえるデータの行番号セット、つまり結果セットを取得するために使用される。
【００５４】
本出願はまた、
行と列の記憶構造に従ってデータを格納することと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立することと、を含むデータ記憶方法も提供する。
【００５５】
本出願の一実施形態では、データ記憶方法は、
格納されたデータの列について列内のデータの統計情報を取得することをさらに含む。
【００５６】
本出願はまた、
行と列を含むテーブルに各データを格納する（ここでは、複数のデータを含む元のデータを、行と列の構造の表形式に変換できる）ステップＳ１１と、
テーブルの行に行番号を割り当てるステップＳ１２と、
テーブル内のデータを走査することにより、列内のそれぞれのデータの統計情報を取得するステップＳ１３と、を含むデータ記憶方法を提供する。
【００５７】
具体的には、図２に示されるように、行と列を含むテーブルに各データを格納するには、次のステップ、すなわち、
１）テーブルに含まれる列の数、各列のタイプ、各列の名称、行セパレータ、列セパレータを含む、ユーザーが入力した表構造の定義を入力インターフェースから取得することを含めることができる。サポートされる列のタイプには、次のタイプ、すなわち、ｓｈｏｒｔ、ｉｎｔ、ｌｏｎｇ、ｆｌｏａｔ、ｄｏｕｂｌｅ、ｖａｒｃｈａｒ、ｂｙｔｅ、ｂｏｏｌｅａｎ、ｄｅｃｉｍａｌがある。行セパレータはデフォルトでは改行であってもよく、列セパレータはデフォルトではコンマであってもよい。  
２）入力インターフェースからユーザーが入力したデータソース、つまりデータの記憶場所を取得すること。  
３）データソースからユーザーデータを読み取り、行セパレータに従ってユーザーデータをセグメント化して、複数行のデータのコレクションを取得すること。  
４）列セパレータに従ってデータの各行をセグメント化し、セグメント化されたデータをテーブルの対応するセルに配置すること。  
５）セグメント化されたデータをディスクに格納すること。
【００５８】
本実施形態は、テーブルのデータを走査することにより、列内のそれぞれのデータの統計情報を取得するので、列内のそれぞれデータの統計情報を、コスト推定を行うその後のクエリで使用して、最小のコストと最適なパフォーマンスを有するデータクエリモードを取得し、クエリの効率を向上させることができる。
【００５９】
本出願の実施形態によるデータ記憶方法では、列内のそれぞれのデータの統計情報は、最大値（Ｍａｘ）、最小値（Ｍｉｎ）、列内のゼロ値（Ｎｕｌｌ）と行番号の間のマッピング関係、列内の各データの出現回数（ヒストグラム、Ｈｉｓ）、および列内の異なるデータの数（別個の値の数、Ｄｉｓｔｉｎｃｔ）のうちの１つ以上を含むことができる。
【００６０】
具体的には、データに関連する統計情報の収集には、次のもの、すなわち、
１）データの各列について、その列の全てのデータを走査し、いくつかの変数、最大値（Ｍａｘ）、最小値（Ｍｉｎ）、列内のゼロ値（Ｎｕｌｌ）から行番号へのマッピング関係、列内の各データの出現回数（ヒストグラム、Ｈｉｓ）、および列内の異なるデータの数（別個の値の数、Ｄｉｓｔｉｎｃｔ）を維持し、
２）現在走査されているデータについて、Ｍａｘより大きい場合は、Ｍａｘを現在走査されている値に更新し、
３）現在走査されているデータについて、Ｍｉｎより小さい場合は、Ｍｉｎを現在走査されている値に更新し、
４）現在走査されているデータについて、ゼロの場合、Ｎｕｌｌを１つだけ追加し、Ｎｕｌｌ−＞ＤｏｃＩｄのマッピングを確立し、
５）現在走査されているデータについて、Ｈｉｓｔに既に存在する場合は、そのようなデータの数を１つだけ蓄積し、存在しない場合は、そのデータをＨｉｓｔに配置し、初期値を１に設定し、
６）全てのデータが走査されたら、Ｄｉｓｔｉｎｃｔの値を取得するためにＨｉｓｔ内のデータ（値）の数を計算する、ことが含まれる。
【００６１】
本出願の一実施形態によるデータ記憶方法では、ステップＳ１３で、列内のそれぞれのデータの統計情報を取得しながら、本方法は、
テーブル内のデータを走査して、テーブル内の列のインデックスを築くことをさらに含み、列のインデックスには、列内のそれぞれのデータとテーブル内の対応する行の行番号との間のマッピング関係が含まれ、マッピング関係は、列のデータサイズに従って並べ替えられている。
【００６２】
本実施形態では、柱状の記憶構造を採用している。テーブル内の列のインデックスを築くことにより、その後の段階でインデックスをクエリしてクエリ結果を迅速に取得するのに便利である。
【００６３】
本出願の一実施形態によるデータ記憶方法では、テーブル内の列のインデックスを構築することは、
テーブル内の全ての列のインデックスを築くことを含む。
【００６４】
具体的には、図３に示されるように、テーブル内の各列のインデックスを確立することは、次のステップを含むことができる。  
１）行と列を含むテーブルに各データを格納した後では、データは、行と列で構成されるテーブルの形式で格納されている。まず、テーブル内の行には昇順でシリアル番号が順に割り当てられ、ＤｏｃＩｄを使用して識別される。例えば、第１の行のＤｏｃＩｄ＝１、第２の行のＤｏｃＩｄ＝２などである。次に、以下の動作が各行について行われる。  
２）データの各行はＤｏｃＩｄを使用して、前のステップでそれぞれの行のシリアル番号を識別し、テーブルの各行は複数の列に分割されている。したがって、テーブルのセルのデータ（Ｖａｌｕｅ）のために、セルの値からＤｏｃＩｄへのマッピング関係を構築できる（Ｖａｌｕｅ−＞ＤｏｃＩｄ）。  
３）列内の複数のセルのデータが同じである場合、次のマッピング関係、Ｖａｌｕｅ−＞ＤｏｃＩｄ１、ＤｏｃＩｄ２、ＤｏｃＩｄ３〜、つまり、そのデータが位置している行番号へのデータのマッピングが取得される。記憶フォーマットの構造図は、図４に示されるようなものであり得、ここで、データＶ１、Ｖ２、Ｖ３〜Ｖｎは徐々に増加する。
【００６５】
テーブルの全ての列についてインデックスが作成されると、テーブルの完全なインデックス構造が取得される。その後のクエリでは、ユーザーは検索するデータを入力する。上記のマッピング関係を介して、対応する行番号（ＤｏｃＩＤ）セットを見つけることができ、対応する行をＤｏｃＩｄセットから読み取ることができる。
【００６６】
本実施形態では、全ての列の完全インデックス技術を採用している。各列には個別のインデックス構造があり、これにより、任意の条件および任意の列に対するその後のクエリでインデックスの事前選択機能を使用できるため、ディスクの読み取りと書き込みの使用が削減される。
【００６７】
本出願の一実施形態によるデータ記憶方法では、テーブル内の列のインデックスを築くことはまた、
テーブル内の列のインデックス間の関連関係を確立することも含む。
【００６８】
本実施形態では、テーブル内の列のインデックス間の関連関係を確立することにより、その後のクエリが、複数のインデックス間の関連付け情報を最大限に活用し、元のクエリ条件を最小のコストと最適なパフォーマンスで、等価クエリ条件に書き換え、データフィルタリングの機能をさらに改善し、ディスクの読み取りと書き込みの消費量を減らすのに便利である。
【００６９】
本出願の別の態様によれば、前述の実施形態のデータ記憶方法を使用することによって格納されたデータをクエリする方法も提供される。本方法には、
クエリ条件（複数可）を取得することと、
格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、が含まれる。
【００７０】
本出願の実施形態によるデータクエリ方法では、格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
列内のデータの統計情報に従って、対応するクエリモードを決定することと、クエリモードおよび格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【００７１】
本出願の実施形態によるデータクエリ方法では、各個々のクエリ条件を満たすデータの行番号セットを取得する前に、本方法は、
格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることであって、列のインデックス情報には、列内のデータと格納された行の行番号の間のマッピング関係が含まれ、マッピング関係が、列のそれぞれのデータサイズに従ってソートされている、複数の個々のクエリ条件を単一のクエリ条件に結合することをさらに含む。
【００７２】
本出願の実施形態によるデータクエリ方法では、格納された列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【００７３】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報は、列内のデータの最大値と最小値、列内のゼロ値と行番号の間のマッピング関係、列内の各データの出現回数、および列内の異なるデータの数のうちの１つ以上を含む。
【００７４】
本出願の実施形態によるデータクエリ方法では、クエリ条件（複数可）は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの１つ以上を含む。
【００７５】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が、ゼロ値のクエリであるとき、列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を行うために、列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードと格納された列のインデックス情報に従って、テーブルからクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することと、を含む。
【００７６】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が、等価クエリまたは範囲クエリであるとき、個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
個々のクエリ条件で各々クエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードと列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することと、を含む。
【００７７】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が等価クエリであるとき、列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報から個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【００７８】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が等価クエリであるとき、列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックスから個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【００７９】
本出願の実施形態によるデータクエリ方法では、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードおよび格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得することは、
クエリ条件（複数可）が範囲クエリであるとき、クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲の閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内のクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用し、クエリ条件（複数可）を満たす、データの行番号セットを列のインデックスから検索することと、を含む。
【００８０】
本出願の実施形態によるデータクエリ方法は、
クエリ条件を取得するステップＳ２１と、
テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従ってクエリ条件（複数可）をかなえるテーブル内のデータに対応する行の行番号セットを取得し、テーブルには行と列が含まれ、テーブルの行は行番号でコンパイルされている、ステップＳ２２と、を含む。
【００８１】
本実施形態では、列内のそれぞれのデータの統計情報は、コストを見積もるためにクエリを行うときに使用され、コストが最も低く、パフォーマンスが最も高いデータクエリモードが取得され、クエリの効率を向上させる。
【００８２】
本出願の実施形態によるデータクエリ方法では、取得されたクエリ条件（複数可）が複数のクエリ条件の組み合わせである場合、ステップＳ２２において、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従ってクエリ条件（複数可）をかなえるテーブル内のデータに対応する行の行番号セットを取得することは、
複数のクエリ条件の組み合わせを個々のクエリ条件に分割する、例えば、複数のクエリ条件を、ＡＮＤ、ＯＲ、ＮＯＴなどの論理演算子に従って複数の個々のクエリ条件に分割することと、
テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリ方法を決定し、クエリモードに従って各個々のクエリ条件を満たす、データのそれぞれの行番号セットを取得することと、
複数のクエリ条件の組み合わせに従って、個々のクエリ条件全てに応じる、取得したデータの行番号セットを組み合わせることと、を含む。
【００８３】
複数のクエリ条件の組み合わせを個々のクエリ条件に分割すると、クエリの効率をさらに向上させることができる。
【００８４】
本出願の実施形態によるデータクエリ方法では、クエリ条件（複数可）は、ゼロ値クエリ、等価クエリ、および範囲クエリのうちの１つ以上を含む。
【００８５】
具体的には、ゼロ値クエリは主に、ゼロである指定された列のデータのクエリの処理と、ＡＮＤ、ＯＲおよび／またはＮＯＴを介した多数のそのようなクエリで構成される複合クエリの処理を担当する。
【００８６】
等価クエリは主に、指定された列が特有のデータと等しいクエリと、ＡＮＤ、ＯＲおよび／またはＮＯＴなどの論理演算子を介して基本的なクエリによって形成されるクエリの処理を主に担当する。例えば、ＩＤ＝５、名前＝ｌｕｃｙ  ＡＮＤ  住所＝ＵＳＡなど。
【００８７】
範囲クエリは主に、特定の列が一定の範囲内にあるかどうかの処理と、ＡＮＤ、ＯＲおよび／またはＮＯＴなどの論理演算子を介してそのようなクエリの数によって形成される複合クエリを担当する。例えば、ＩＤ＞３またはＩＤ＞２ＡＮＤ  ＩＤ＜５など。
【００８８】
本出願の実施形態によるデータクエリ方法では、テーブルの列内のそれぞれのデータの統計情報に従って各個々のクエリ条件を満たす、データの行番号セットを取得する前に、本方法は、
テーブルの列のインデックス情報間の関連関係に従って、複数の個々のクエリ条件を単一のクエリ条件に組み合わせることをさらに含み、列のインデックス情報には、列内のデータと行の行番号の間のマッピング関係が含まれ、マッピング関係は、列のそれぞれのデータサイズに従ってソートされている。
【００８９】
上記の等価クエリ、範囲クエリおよびゼロ値クエリの実行中に、異なるインデックス間の関連関係が使用される場合がある。インデックス間の関連関係に基づいて、ＡＮＤ、ＯＲ、ＮＯＴなどの複数の条件で組み合わせ演算を実行できる。例えば、ＤＡＴＥ＞２０１７０２０２  ＡＮＤ  ＴＩＭＥ＞´２０１７０２０２  １２：１２：００´のクエリの場合、これら２つの条件は、ＤＡＴＥとＴＩＭＥの間の関連関係を使用して、ＴＩＭＥ＞´２０１７０２０２  １２：１２：００´の条件に組み合わせることができ、これにより、インデックスクエリのコストがさらに削減される。
【００９０】
本出願の実施形態によるデータクエリ方法では、複数のクエリ条件の組み合わせに従って、個々のクエリ条件の全てに応じるデータの取得された行番号セットを組み合わせることは、
クエリ条件の組み合わせに従って、個々のクエリ条件を各々満たす、データの取得された行番号セットからのそれぞれの結果を毎回組み合わせて、組み合わされた結果を得ることと、
組み合わされた結果を集計することと、を含む。
【００９１】
具体的には、本実施形態の処理フローは、次のステップ、すなわち、
１）クエリ最適化モジュールによる処理後、個々のクエリ条件の各々を満たす、それぞれの行セットを個別に取得することと、
２）ＡＮＤ、ＯＲ、ＮＯＴなどのような元のクエリ条件における論理関係に従って、個々のクエリ条件から図５に示されるような結果の組み合わせツリーを構築することと、
３）図６に示されるように、個々のクエリ条件の各々を満たす、それぞれの行セットのリーフノードから開始して毎回結果を取得し、ルートノードに到達するまでブランチに沿って追跡し、中間ノードに従って論理演算を実行することと、
４）ルートノードから収集された行セットが結果の要件を満たす場合、計算プロセスを早期に終了することと、を含み得る。
【００９２】
本実施形態は、複数のインデックスクエリ結果セットを組み合わせるコストを最小化し、システムリソースを節約し、計算プロセスを加速し、クエリパフォーマンスを向上させるストリーミング組み合わせ方法を採用する。
【００９３】
本出願の実施形態によるデータ記憶方法では、列内のそれぞれのデータの統計情報は、最大値（Ｍａｘ）、最小値（Ｍｉｎ）、列内のゼロ値（Ｎｕｌｌ）と行番号の間のマッピング関係、列内の各データの出現回数（ヒストグラム、Ｈｉｓ）、および列内の異なるデータの数（別個の値の数、Ｄｉｓｔｉｎｃｔ）のうちの１つ以上を含むことができる。
【００９４】
本出願の実施形態によるデータクエリ方法において、クエリ条件（複数可）が、ゼロ値のクエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
テーブルの列内のゼロ値と行番号の間のマッピング関係の統計情報に従って検索を実行するために、テーブルの列内のゼロ値と行番号の間のマッピング関係を使用するクエリモードを決定することと、
クエリモードに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することと、を含む。
【００９５】
統計的なゼロ情報を検索してゼロ値をクエリするステップは、次のように、
１）ＡＮＤ、ＯＲ、および／またはＮＯＴに従って、複合クエリを複数の個々のクエリ条件に分割することと、
２）インデックスで確立されたＮｕｌｌ−＞ＤｏｃＩｄマッピング関係を検索して、個々のクエリ条件の各々の個々のクエリ条件を満たす、行のセットを取得することと、であり得る。
【００９６】
本出願の実施形態によるデータクエリ方法では、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
テーブルの列の各データの統計情報に従って、対応するクエリ方法を決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することを含む。
【００９７】
クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得すると、クエリ効率をさらに向上させることができる。
【００９８】
本出願の実施形態によるデータクエリ方法において、クエリ条件（複数可）が等価クエリまたは範囲クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
個々のクエリ条件からクエリされる列とクエリされるデータを取得することと、
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内であるかどうかを決定することと、
範囲内にない場合、ゼロセットを返すことと、
範囲内にある場合、列内のデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブルの列のインデックス情報に従って、クエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することと、を含む。
【００９９】
各々、個々のクエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲内にないと決定したとき、これは、条件をかなえるデータが存在しないことを示し、クエリの効率を向上させるために、クエリモードがクエリを終了して空のセットを返すことを決定できる。
【０１００】
本出願の実施形態によるデータクエリ方法において、クエリ条件（複数可）が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得し、列内の行の総数に関してクエリされるデータの出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックス情報の個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【０１０１】
具体的には、図７に示されるように、本実施形態における等価クエリのステップは、以下を含むことができる。  
１）ＡＮＤ、ＯＲ、ＮＯＴなどの論理演算子に従ってクエリ条件を複数の個々のクエリ条件に分割し、次のステップを個別に実行する。  
２）個々のクエリ条件に各々含まれる各列の最小値と最大値をチェックし、検索する値が［最小、最大］の範囲内にあるかどうかを確認する。範囲内にない場合、これは条件に応じるデータが存在しないことを意味する。範囲内にある場合、次のステップが行われる。  
３）Ｈｉｓｔヒストグラムをチェックして、検索する値が列に現れる回数を確認する。出現回数が占める行の、総数に対する割合が一定の閾値を超えると、現在の検索プロセスが停止し、列内の全てのデータを直接走査するように変更される。出現回数が占める行の、総数に対する割合が一定の閾値未満の場合は、次のステップが実行される。  
４）列の確立されたインデックスを介して、値に対応するＤｏｃＩｄセットを検索する、つまり、個々のクエリ条件を満たす、全ての行のセットを取得する。  
５）全ての列に対して上記のステップを行った後、個々のクエリ条件を満たす、行番号のセットを取得する。
【０１０２】
本実施形態では、列の統計情報の各データの出現回数から、列内のクエリされるデータの出現回数を取得することにより、クエリされるデータの取得された出現回数が占める行の、総数に対する割合が、事前設定された割合閾値を超えているかどうかが決定され、これにより、クエリ効率を向上させるために、好ましいクエリモードが決定される。
【０１０３】
本出願の実施形態によるデータクエリ方法において、クエリ条件が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
列内の行数と列の統計情報の異なるデータの数に従って、列内のクエリされるデータの出現回数を推定し、列内の行の総数に関してクエリされるデータの推定された出現回数が、事前設定された割合の閾値を超えているかどうかを決定することと、
肯定の場合、列内の全てのデータを走査して、個々のクエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列のインデックスから個々のクエリ条件を満たす、データの行番号セットを検索することと、を含む。
【０１０４】
本実施形態と前の実施形態との違いは、列内のクエリされるデータの出現回数は、列内の行数とその列の統計情報内の異なるデータ数に従って推定されることであり、クエリされるデータの推定された出現回数が占める列内の行の総数に対する割合が、事前設定された割合閾値を超えているかどうかが決定され、これにより、クエリ効率を向上させるために、好ましいクエリモードが決定される。
【０１０５】
本出願の実施形態によるデータクエリ方法において、クエリ条件が等価クエリであるとき、テーブルの列内のそれぞれのデータの統計情報に従って、対応するクエリモードを決定し、クエリモードとテーブル内の列のインデックスに従って、テーブル内のクエリ条件（複数可）を満たす、データに対応する行の行番号セットを取得することは、
クエリ条件でクエリされる列のデータの最大値と最小値の間の範囲が、列の統計情報のデータの最大値と最小値の間の範囲の事前設定範囲閾値であるかどうかを比較することと、
肯定の場合、列内の全てのデータを走査して、クエリ条件を満たす、データの行番号セットを取得することと、
そうでない場合は、列内でクエリされるデータの最大値と最小値をそれぞれ検索の開始点と終了点として使用して、クエリ条件を満たす、データの行番号セットを検索することと、を含む。
【０１０６】
具体的には、図８に示されるように、本実施形態における範囲クエリのステップは、
１）ＡＮＤ、ＯＲ、ＮＯＴなどに従って、組み合わされたクエリを複数の個々のクエリ条件に分割することと、
２）関与する列の範囲情報［最小、最大］に基づいて、個々のクエリ条件をそれぞれ比較し、クエリ範囲がその範囲内にない場合、空のセットが返され、クエリ範囲がこの範囲内にある場合、次のステップが行われることと、
３）個々のクエリ条件の範囲を［最小、最大］と比較し、クエリ範囲のカバレッジの範囲が［最小、最大］の半分以上の場合、現在のインデックスクエリプロセスが停止し、直接走査によってその列の全てのデータを検索するように条件が変更され、カバレッジの範囲が［最小、最大］の半分未満の場合、次のステップが行われることと、
４）クエリ条件のデータ範囲の最小値を開始点として使用し、クエリ条件のデータ範囲の最大値を終了点として使用することと、
５）構築されたインデックスで検索を実行し、開始点から終了点までの全ての値とこれらの値に対応する行のセットを収集する、つまり、個々のクエリ条件のクエリをかなえるデータの全ての行のセットを取得することと、を含むことができる。
【０１０７】
本出願の別の態様によれば、データ記憶デバイスも提供される。本デバイスは、
行および列記憶構造に従ってデータを格納するように構成されたデータフォーマットモジュールと、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立するように構成されたインデックス構築モジュールと、を含む。
【０１０８】
本出願の別の態様によれば、上記のデータ記憶デバイスによって格納されたデータをクエリするためのデバイスも提供される。本デバイスは、
クエリ条件（複数可）を取得し、格納された列のインデックス情報に従ってクエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得するように構成された、クエリ最適化およびデータクエリモジュールを含む。
【０１０９】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ（複数可）と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ（複数可）に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【０１１０】
本出願の別の態様によれば、コンピューティングベースのデバイスも提供され、本デバイスは、
プロセッサ（複数可）と、
コンピュータ実行可能命令を格納するように配設されたメモリと、を含み、コンピュータ実行可能命令は、実行されるとき、プロセッサ（複数可）に、
クエリ条件（複数可）を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【０１１１】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ（複数可）によって実行されるとき、プロセッサ（複数可）に、
行と列の記憶構造に従ってデータを格納させ、
格納されたデータの列にインデックス構築を行って、インデックス情報を確立させる。
【０１１２】
本発明はまた、コンピュータ実行可能命令が格納されるコンピュータ可読記憶媒体も提供し、コンピュータ実行可能命令は、プロセッサ（複数可）によって実行されるとき、プロセッサ（複数可）に、
クエリ条件（複数可）を取得させ、かつ
格納された列のインデックス情報に従って、クエリ条件（複数可）を満たす、格納されたデータに対応する行の行番号セットを取得させる。
【０１１３】
本出願のデバイスの実施形態の特有の内容は、方法の実施形態の対応する部分を参照することができ、ここでは繰り返さない。
【０１１４】
明らかに、当業者は、本出願の精神および範囲から逸脱することなく、本出願に様々な改変および変形をすることができる。このようにして、本出願のこれらの改変および変形が、本出願およびそれらの等価な技術の特許請求の範囲内にある場合、本出願はまた、これらの改変および変形を含むことを意図する。
【０１１５】
本出願は、ソフトウェアおよび／またはソフトウェアとハードウェアの組み合わせで実装されてもよいことに留意されたい。例えば、本出願は、特定用途向け集積回路（ＡＳＩＣ）、汎用コンピュータ、または他の任意の同様なハードウェアデバイスを使用して実装され得る。実施形態では、本出願のソフトウェアプログラムは、上記のステップまたは機能を実装するためにプロセッサによって実行され得る。同様に、本出願の（関連するデータ構造を含む）ソフトウェアプログラムは、ＲＡＭ記憶デバイス、磁気もしくは光学ドライブ、またはフロッピーディスク、および類似のデバイスなどのコンピュータ可読記録媒体に格納することができる。加えて、本出願のいくつかのステップまたは機能は、ハードウェアによって、例えば、様々なステップまたは機能を行うためにプロセッサと協働する回路として実装されてもよい。
【０１１６】
加えて、本出願の一部は、コンピュータプログラム製品、例えば、コンピュータプログラム命令として適用されてもよい。コンピュータプログラム命令がコンピュータによって実行されるとき、本出願による方法および／または技術的解決策は、コンピュータの動作を介して呼び出されるか、または提供されてもよい。本出願の方法を呼び出すためのプログラム命令は、固定または取り外し可能な記録媒体に格納され、および／または放送または他の信号伝達媒体のデータストリームを介して送信され、および／またはプログラムの命令に従って走行するコンピューターデバイスの作業メモリに格納される。本出願による実施形態は、装置を含み、装置は、コンピュータプログラム命令を格納するように構成されたメモリと、プログラム命令を実行するように構成されたプロセッサとを含み、コンピュータプログラム命令は、プロセッサによって実行されるとき、デバイスをトリガして、本出願の前述の実施形態による方法および／または技術的解決策を走行させる。
【０１１７】
本出願が、上記の例示的な実施形態の詳細に限定されないこと、および本出願が、本出願の精神または基本的特徴から逸脱することなく他の特有の形態で実装できることは当業者には明らかである。したがって、どの観点にも関係なく、実施形態は例示的で非限定的なものと見なされるべきである。本出願の範囲は、上記の説明ではなく添付の特許請求の範囲によって定義され、したがって、本出願に含まれる特許請求の範囲の等価な要素の意味および範囲内の全ての変更に含まれるものとする。請求項における図面の参照ラベルは、関連する請求項を限定するものと見なされるべきではない。さらに、「含む」という用語は、明らかに他のユニットまたはステップを除外せず、単数形は複数形を除外しない。装置の請求項に記載されている複数のユニットまたは装置は、ソフトウェアまたはハードウェアを介して１つのユニットまたは装置によって実装することもできる。「第１」および「第２」などの用語は、名称を示すために使用され、特定の順序を表すものではない。
【図１】
2021506012.tif 000003
【図２】
2021506012.tif 000004
【図３】
2021506012.tif 000005
【図４】
2021506012.tif 000006
【図５】
2021506012.tif 000007
【図６】
2021506012.tif 000008
【図７】
2021506012.tif 000009
【図８】
2021506012.tif 000010
【国際調査報告】
2021506012.tif 000011
2021506012.tif 000012
2021506012.tif 000013
2021506012.tif 000014