JP4907600B2 - 繰り返し値を有するテーブルのブロック圧縮 - Google Patents

繰り返し値を有するテーブルのブロック圧縮 Download PDF

Info

Publication number
JP4907600B2
JP4907600B2 JP2008132427A JP2008132427A JP4907600B2 JP 4907600 B2 JP4907600 B2 JP 4907600B2 JP 2008132427 A JP2008132427 A JP 2008132427A JP 2008132427 A JP2008132427 A JP 2008132427A JP 4907600 B2 JP4907600 B2 JP 4907600B2
Authority
JP
Japan
Prior art keywords
block
value
column
identifier
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008132427A
Other languages
English (en)
Other versions
JP2008287723A (ja
Inventor
フランツ・フェーバー
ギュンター・ラーデシュトック
アンドリュー・ロス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SAP SE
Original Assignee
SAP SE
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SAP SE filed Critical SAP SE
Publication of JP2008287723A publication Critical patent/JP2008287723A/ja
Application granted granted Critical
Publication of JP4907600B2 publication Critical patent/JP4907600B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

この開示はデジタルコンピュータによるデータ処理に関し、より詳しくは、繰り返し値を有するテーブルのブロック圧縮に関する。
検索エンジンは、結果を見つけるために関係テーブルのようなデータベーステーブル内の大量のデータを検索する。
数百万のレコードを含むテーブルの結合のような膨大な量のデータのために、データ処理はたくさんのハードウェア資源を必要とする。例えば、ユーザ要求の実行に関係する全てのレコードを記憶するために大量のランダムアクセスメモリ領域が必要とされる。
ここで開示される発明は、繰り返し値を有するテーブルのブロック圧縮に関する技術を実現する、コンピュータプログラム製品を含む方法および装置を提供する。
一態様において、値識別子の列を生成するために辞書を基にした圧縮によりデータの列が圧縮され、値識別子は整列され、ブロック識別子のリストが生成され、ブロック辞書の列が生成され、ブロックのオフセットの列が生成される。値識別子の各ブロックについて、各々のユニークな値識別子についてユニークなブロック識別子が存在し、同一の値識別子について同一のブロック識別子が存在する。各ブロック辞書についてブロック識別子のリストが存在し、各ブロック識別子は値識別子と対応付けされ、ブロック識別子の各々のユニークな値についてブロック辞書内に存在するブロック識別子が存在する。ブロックのオフセットの列の各々の値は、ブロック辞書の列においてブロックが開始するオフセットを示す。
関係する態様において、圧縮されたデータの列を表わす値識別子が整列され、ブロック辞書が生成される。ブロック辞書は値識別子の各ブロックについて生成される。ブロック辞書の各々はブロック識別子のリストを含み、各ブロック識別子は値識別子と対応付けされ、ブロック内の各々のユニークな値についてブロック識別子が存在する。
本発明は、例えば、コンピュータプログラム製品(例えば、コンピュータ読み取り可能な媒体に有形に実現されたソースコードまたはコンパイルされたコード)、コンピュータ実装される方法、および、システムとして実現されうる。
変形は、次の特徴のうち1つまたは複数を含みうる。
値識別子は、テーブルの同一の行にわたってデータの依存関係を有する構造化ビジネスデータを表わす値としうる。ビジネスデータは、結合されたテーブルの集合としてモデル化されたビジネスオブジェクトを含みうる。
ブロック辞書、ブロックベクトル等は、複数のハードウェアサーバ上で並列に生成されうる。
データの列への変更は、データの列から分離された差分バッファ内に記憶され、変更は非同期に統合されうる。
ブロック辞書、(例えば、ブロックベクトルまたはブロックベクトルの列内の)ブロック識別子、ブロックのオフセット値は記憶され、ブロック辞書における検索が可能とされうる。
値識別子の各ブロックのサイズは固定された行の数でありうる。
データの列は、構造化データのテーブル内の他の列とともに整列されうる。整列は、値識別子のグループを生成するようにデータの列を整列する処理と、前の列に基づいて続く列のブロックを選択的に整列する処理とを含みうる。前の列のブロックが1つの同一の値識別子を有するならば、続く列のブロックが整列される。
ブロック識別子は、値識別子の各々について割り当てられうる。ブロック識別子の順序付けは、値識別子の順序付けに合致しうる。ブロック識別子は、各ブロックについて開始する番号付けされた系列を含みうる。各ブロック辞書についてブロック識別子を表わすために最小のビット長が使用されるように、各ブロック辞書が2進数符号化により圧縮されうる。各ブロック辞書について、ブロック識別子の各々のユニークな値についてブロック識別子が1回のみ存在しうる。
ここで説明される発明は、次の効果のうち1つまたは複数を実現するように実装することができる。大量のデータを含む関係テーブルのような大量のデータベースのデータの効果的な処理は、設置されたメモリ(例えば、揮発性メモリ)内、または、ディスク記憶装置上にデータボリュームを保持するために、および、(例えば、ハードディスクドライブからメモリへ)データを移動するときの効果的なデータフローのために、高レベルのデータ圧縮を要求しうる。減少されたデータボリュームはより少ない設置されたメインメモリまたはハードディスクの容量を必要とし、減少されたデータフローはプロセッサのキャッシュ、プロセッサのアーキテクチャ、ネットワークの帯域幅において、より少ない需要を生じうるので、情報処理ハードウェアの状況において複数の効果を有しうる。これら全ては、ハードウェアの要求条件、応答時間、全体のシステム性能における有益な効果を有しうる。データのかなりの圧縮がコスト効果の高いデータのメモリ内の処理を可能とする(サーバ数または物理メモリ量が減少されうる)ので、ビジネスデータのようなデータはメモリ内で圧縮および検索されうる。ブロック識別子のベクトル、および、データの列の1つまたは複数のブロックについての圧縮されたブロック辞書を生成することによって圧縮を実現しうる。好ましくは、ブロック辞書およびブロック内の値の出現を表わすベクトルの組み合わせによって圧縮された方法で、複数の頻繁に出現するデータの列の値が表わされうる。ブロック辞書によって占有される領域を最小化するため、ブロック辞書内のブロック識別子を符号化するために最小のビット数が使用されうる。ブロック辞書のメモリ消費を減少させるためにデータの複数のブロックにわたってブロック辞書が再使用されうる。複数のデータの列はブロック辞書およびフロック識別子のベクトルを使用して圧縮されうる。構造化データのために、データの依存関係が存在する他のデータの列に基づいてデータの列を整列することによって、データの依存関係が維持されうる。
添付図面および以下の説明において1つまたは複数の実施形態の詳細を述べる。さらなる特徴、態様、効果は、発明の詳細な説明、図面、特許請求の範囲から明らかになる。
各図面における同様な参照符号および記号は同様の構成要素を示す。
概して、図1〜10において、辞書を基にした圧縮、ビットベクトル圧縮(またはベクトルを基にした圧縮)、整列ビットベクトル圧縮(または短縮ベクトルを基にした圧縮)、ブロックベクトル圧縮と呼ばれる技術の組み合わせを使用してデータが圧縮される。データは構造化ビジネスデータとすることが可能であり、ここで、データはテーブルのようなデータ構造に組織化された属性またはキー数値(key figure)とすることが可能であり、属性またはキー数値は依存関係を有することが可能である、という意味でデータは構造化されている。例えば、情報のテーブルにおいて、行は行内のデータの間で依存関係を有し、行の各列内のデータは行の他の列内の他のデータと対応付けされている。テーブル内のある行内のようなデータ構造の一部の中で、または、全データ構造にわたって、数千または数百万の行にわたって、非常に多くの場合、ヌル(null)のデータ値のような特別な値が実例とされうるという意味で、データは疎な分布を形成しうる。例えば、2000万のエントリを有するデータの列は1900万のヌルのエントリを含み、1900万のヌルのエントリは必ずしも近接していない様々な行内に位置しうる。
図1Aは、構造化データのテーブル105、そのテーブルの列についての辞書110、属性テーブル115、インデックス120を表わすブロック図である。概して、図1Aは、テーブル105内の列125に、列125内の値について値識別子130(ValueId)を指定する辞書110、それぞれの文書識別子140(DocID)について値識別子135を列挙する属性テーブル115、それぞれの値識別子150について文書識別子リスト(DocIDList)145を列挙するインデックス120がどのように設けられるかを表わす。
辞書110は、辞書を基にした圧縮と呼ぶものを提供するために使用され、辞書を基にした圧縮は、より少ないメモリを占める識別子を用いてテーブル内の値を表わすことによって、テーブル内に記憶されるデータ量を削減するために辞書110を使用することを含む。概して、辞書110は、整列されうる、列内に現れる値およびその値の識別子(すなわち、値識別子)のリストである。
一例として、辞書を基にした圧縮によってデータテーブルからの列によって占有されるメモリまたはディスク領域を削減するために、列内に現れる異なる値の整列されたリストが生成され、その異なる値は番号が付けられる。(例えば、値それ自体を表わす文字列ではなく整数として実現される)番号は、値が現れるテーブル内の値の位置保持記号として使用される。値を表わすために必要な最大の番号が留意される。列の基数(cardinality)Cがその中に現れる異なる値の数であるように定義され、かつ、列の全体の長さがNならば、Cの値がNよりずっと小さい場合、辞書を基にした圧縮は、テーブル内の値を記憶するのとは異なり削減されたメモリ消費のような利益をもたらす。整列されたCの値のリストは辞書と呼ばれ、これらの値が、例えば、ユーザに読み取り可能な結果を返却することが決定される必要があってもなくても、テーブル内に現れる番号の値を検索するために使用される。
例えば、テーブル105は列125を含み、列125はINTEL、ABB、HPのような値を有する。辞書110は値識別子130を含み、値識別子130は列125内に存在する異なる値を表わす。例えば、属性テーブル115は列125の各行についての値識別子を含む。例えば、第1行160は文書識別子1(“DocID 1”)と呼ばれ、値INTELと対応付けされた値識別子4を有する辞書110に基づいて、値識別子4を用いて属性テーブル115内に表わされる値INTELを含む。テーブル105の列125の値は、属性テーブル115の値識別子と置換することが可能であり、これは列125によって表わされるデータのメモリ領域を減少させる。新たなテーブル内の値識別子は、辞書110とともに、列125の値に再構成するために使用される。
値の検索を容易にし、従って、クエリーの実行のためにより適合した形式で列の内容を表現するために、インデックス120が生成され、そのインデックスは列125を置換する。インデックス120は、それらの値識別子によって組織化された列125の行のリストのテーブルである。例えば、1つのリスト155は、第4の値識別子が列125の行1、4、8と対応付けされていることを示す。
テーブルのメモリへの影響の一例として、図1Aのテーブル105のようなテーブルT内の行数は1,000,000であるNに等しく、各行を符号化するために必要とされるバイト数は500であり、ここで500バイトは4,000ビットに等しく、4キロバイトに等しい。圧縮なしで、テーブルTは1,000,000×500バイトの領域を必要とし、これは500メガバイトのメモリ領域に等しく、1秒でテーブルTを移動するために必要とされる帯域幅は4ギガバイト/秒である。
データがどのように組織化されるかの一例として、テーブルTの列A内の異なる値の数は、250であるAの基数Cに等しい。この例において、列Aについての辞書は0から250の整数によって番号付けされたCの値のリストである。250までの整数の2進数表現は、(2の8乗が256に等しいので)1バイトである8ビットを必要とする。列Aと同様の10個の列からなる例示のテーブルTについて、任意の列内の平均の圧縮されていない列のエントリは50バイトを占める(500バイトが10個の列に分割されて列あたり50バイトである)。列Aについての辞書は約100キロビットを必要とする(250のエントリ×(1個の1バイトの値識別子+辞書のエントリ内の対応する値を表わす50バイト)が約12キロバイトであることから、約100キロビットである)。従って、辞書を基にした圧縮を使用して、列Aは1,000,000バイトを占め、これは辞書を基にした圧縮を使用して列Aによって必要とされる約1.01メガバイトである合計の領域(圧縮された列+対応する辞書の領域)を有する約1メガバイトであるが、圧縮なしで列Aによって占有される名目上の領域は50メガバイトである。従って、圧縮率は約50である。
図1Bは、構造化データのテーブル170、そのテーブルの列についての辞書172、属性テーブル174、差分インデックス(delta index)176を表わすブロック図である。概して、図1Bのブロック図の特徴は、図1Aの特徴と同様に作用する。例えば、テーブル105、170の両方は、上述した図1A、1Bのそれぞれの辞書110、172を使用して辞書を基にした圧縮を用いて圧縮されたレコードを記憶する。
図1Aのブロック図と異なり、図1Bのブロック図は差分インデックス176を含み、これは列のデータへの追加、修正、削除を含む変更を記憶するために使用される。特に、差分インデックス176は、圧縮された列内のデータへの変更の結果を含む。差分インデックス176の辞書の値は、典型的な差分インデックスの場合には、時系列順に順序付けされる。時系列順の順序は、示された文書識別子との差分インデックス176内の値の対応付けによって示されるように、時間にわたってデータに行われる変更の順序付けを反映する。例えば、値識別子3と対応付けされた文書識別子1、4、8のリスト178は、文書識別子1が文書識別子4の前に追加され、文書識別子4が文書識別子8の前に追加されたことを示す。差分インデックス176の辞書の値の時系列順の順序付けは、前のエントリの修正なしで差分の書き込みを効果的に可能とする。
図1Bのテーブル170は、図1Aのテーブル105への変更または差分を反映する。例えば、差分インデックス176に対応するテーブル170の各行は、メインインデックス(main index)120に対応するテーブル105に追加する行を表わす。もう1つの例として、テーブル170内の行がテーブル105の行と同一のレコード識別子を有する場合、差分インデックス176に対応するテーブル170内の行は、テーブル105内の行の置換を表わす。もう1つの例として、テーブル170内の行は、テーブル105内の同一のレコード識別子を有する行の間の差(例えば、同一のレコードの様々な列内の値における正または負の差分)を表わす。
差分インデックス176の実装は異なりうる。例えば、図1Bは、差分値の辞書を基にした圧縮を含むものとして差分インデックス176を表わすが、その通りである必要はない。
図1Cは、メインおよび差分インデックスからの結果の集合の生成を表わす例である。例えば、差分インデックス176は、(例えば、図1Aのメインインデックス120のような)圧縮された列のデータのインデックスとともに使用され、差分インデックス176はインデックス内のデータへの変更を記憶する。(例えば、差分バッファを参照して以下で説明するように、)差分インデックス176および圧縮された列のデータのインデックスの両方が検索され、2つの情報源からの結果は、圧縮されたデータに行われる変更を反映する合成された結果を生成するために結合される。
この例において、(“IBM”とラベルが付された)会社についての総売上は、メインインデックスから総売上を見つけ出し、それを差分インデックスからの総売上を用いて増加させることによって計算される。特に、コマンド180“RETURN TOTAL REVENUE FOR IBM SALES”(IBMの販売について総売上を返答せよ)は、サーバプログラムによって2つの操作に分割され、2つの操作は、メインインデックスからのIBMについての売上についての第1操作182(図1Aの行5および6は、メインインデックス内の“IBM”について、3の値識別子に対応し、11ユーロの総売上を有する)と、差分インデックスからのIBMについての売上についての第2操作184(図1Bの行5および6は、差分インデックス内の“IBM”について、4の値識別子に対応し、10ユーロの総売上を有する)とを含む。そして、それら2つの操作からの結果は、オペランド186によって結合され、この結合は、差分インデックスの結果を用いてメインインデックスの結果を増加させることを含む。差分は正または負でありうる。メインインデックス内のエントリへの更新は、まず古い行を削除し、そして更新された行を挿入することによって処理され、一実施形態において、削除は差分インデックスにおける負の差分によって表わし、挿入は正の差分によって表わすことができる。
図2A、2Bは、構造化データのテーブル202、204を表わすブロック図である。概して、第1テーブル202は辞書を基にした圧縮により圧縮されたのではない販売テーブルの実装を表わし、第2テーブル204は辞書を基にした圧縮により圧縮された第1テーブル202の実装を表わす。
第1テーブル202は、異なる種類のデータの組み合わせに基づいて、異なる種類のデータを表わす列、および、異なるレコードを表わす行を含む。例えば、列は、販売番号206、日付208、場所コード210、製品コード121、販売製品数214、パッケージング属性216、通貨単位218、セントにおける合計値220、請求番号222を表わす。第1行224は、販売番号S2551、日付20040904、場所L164、製品コードP21191等を含むレコードである情報の組み合わせを含む。
第2テーブル204は、辞書を基にして圧縮された値として第1テーブルの列206〜222の値を表わす。圧縮された値の種類は、(値の圧縮に関係がないという理由のために)属性を含むがキー数値を含まず、属性は辞書232内の識別子によって表わされる。例えば、第1テーブル202の販売数206の値は、第2テーブル204の第1列228内の6桁の整数値(約25万までの値について18ビットの整数の識別子によって表わされる)として圧縮され、それらの整数値は、第1辞書230内の値を表わすが、第1テーブル202の販売数のキー数値214は辞書内に表わされない(値の圧縮に関係する必要がないという理由のために浮動小数点数として表わされる)。第1辞書230内の第1販売識別子0000は、第2テーブル204の第1列228の値S2500を表わす。
図2A、2Bは、ある種類の辞書を基にした圧縮を含むが、そのような圧縮は異なりうる。例えば、図2Bの第2テーブル204において、キー数値は辞書を基にした圧縮により圧縮されないが、ある実施形態において、キー数値と属性の組み合わせが辞書を基にした圧縮により圧縮され、または、キー数値のみが圧縮され、または、選択されたキー数値と属性の組み合わせが圧縮される。
図3は、属性およびキー数値の基数を表わすテーブル300である。例えば、テーブル300は、図2A、2Bの第1、第2テーブル202、204のそれぞれの列の基数のリストを含む。基数を表わすことに加えて、テーブル300は、各基数について、それぞれの列を符号化するために必要とされるビット数を含む。例えば、2の2乗は4であり、これは3以上で最小の2の整数乗であるので、基数3の列M3を符号化するために必要とされるビット数は2である。
テーブル300の列は、もう1つのテーブルの列を識別する第1列305、対応付けされた列内の値の基数を示す第2列310、対応付けされた基数に基づいて対応付けされた列を符号化するために必要とされるビット数を示す第3列315を含む。例えば、テーブル300の第1エントリ320は、M1として識別される属性の列が24の基数を有することを示し、(2の5乗は24以上である最小の2の整数乗であるので)2進数で符号化するために5ビットを必要とする。
テーブル300は、値の基数に基づいて列の値の幅を生成することによってテーブルのメモリへの影響を減少させるために使用され、辞書を基にした圧縮と組み合わせて使用される。
図4A、4Bは、ベクトルを基にした圧縮により圧縮される列を表わすブロック図である。この圧縮は、ビットベクトル圧縮と呼ばれる。概して、この圧縮は、列内の最も頻度の高い値を発見し、列についてのビットベクトルを使用して値が出現することまたは出現しないことを表わすことを含む。例えば、1は値が出現することを表わし、0は値が出現しないことを表わす。さらに、この圧縮は、頻出値(frequently occurring value)の出現数を生成し、より小さいまたは減少したビットベクトルを生成するためにビットベクトルから頻出値の出現を除去することを含む。例えば、図4Aにおける一連のブロック図と異なり、図4Bにおける一連のブロック図は、さらに、整列された値のビットベクトルを頻出値の出現数、および、他の値を表わす短縮ビットベクトルに減少させることを含む。図4A、4Bの列内の値は、辞書を基にした圧縮の値である。
図4Aの第1の一連のブロック図において、ビットベクトル406は、第1矢印404によって示されるように、値の列402について生成される。ビットベクトル406は、第2矢印408によって示されるように、0および1で占められ、0は頻出値0000が出現しないことを表わし、1はその値が出現することを表わす。ビットベクトルを占めるために使用される頻出値は、最頻出値(most-frequently occurring value)、または、他の値より頻繁に出現する値である。値が頻繁に出現するか否かを判定することは、データの列の走査からの値の勘定、または、最も頻繁に出現することが期待される値の統計分析(例えば、例外値のみが非ヌルである例外のテーブルにおいて、ヌル値が最頻出値であることが期待される)に基づく。値が頻繁に出現するか否かの判定についての出現の範囲は、データの列に制限される(すなわち、頻繁に発生する値は列ごとに異なりうる)。値の列402は、第3矢印410によって示されるように、最頻出値の出現を除去することによって圧縮される。例えば、値0000は、圧縮された列412を生成するために列402から除去される。圧縮された列412に基づいて列402からの値を再構成するために、ビットベクトル406は、圧縮された列412内の値の位置、および、頻出値の位置を示すために使用される。
例えば、辞書を基にした圧縮が実行されると、該当する列について次のようにビットベクトルを配置することによってさらなる圧縮を達成することができる。ヌル値のような頻繁に繰り返される値を含む所定の列Aについて、列A内に最も頻繁な値Fが発見され、その列についてビットベクトルVを使用して符号化される。ビットベクトルVはN項を有し、Nは列A内の行数を表わす正の整数である。Vが列Aと並ぶ列として書かれるならば、VはA内の値Fの各々の出現と並ぶ1、および、A内の任意の他の行と並ぶ0を含みうる。ビットベクトルVは列ベクトルAから分離され、値Fを含む全ての行は圧縮された列ベクトルAを生成するためにAから削除される。列Aは、ビットベクトルVによって指定されるように値Fを再挿入することによって圧縮された列ベクトルAから再構成され、辞書を基にした圧縮技術によって指定されるように辞書を使用することによって、圧縮されていない読み取り可能な値の列をAから再構成することができる。
メモリ内の削減がどのように実現されるかの一例として、1,000,000に等しいN行を有し、列Aを有する一例のテーブルTについて、列A内の最も頻繁な値FがA内に990,000回出現するものとする。A内の他の10,000個の値は、Aについての辞書内に列挙された残りの異なる値の集合から得られ、250である合計C個の異なる値を含みうる。この例において、列AについてのビットベクトルVは1,000,000ビットを含み、これは約1メガビット、約125キロバイトである。圧縮された列Aは10,000個のエントリを含み、各々は8ビット(すなわち、1バイト)の整数で符号化され、10キロバイト(すなわち、10,000個のエントリ×1バイト)の占有領域を与える。圧縮なしで列Aによって必要とされる全体領域は、(圧縮されていない列Aの例を参照して説明したように)50メガバイトである。ベクトル圧縮に必要とされる全体領域は、辞書のための領域、圧縮された列Aのための領域、ビットベクトルVのための領域を含む。列Aのベクトルを基にした圧縮のバージョンに必要とされる全体の領域は、147キロバイト(辞書のために12キロバイト、圧縮された列のために10キロバイト、ビットベクトルのために125キロバイト)である。約340の圧縮率が実現される(すなわち、圧縮されていない50,000キロバイト/ベクトルを基にした圧縮の実装により圧縮された147キロバイト)。
図4Aの第1の一連のブロック図と異なり、図4Bの第2の一連のブロック図は、頻出値の出現数を表わす量の生成を助けるためにデータの列を整列することを含む。図4Bの第2の一連のブロック図において、整列された列418への第1矢印416によって表わされているように、列414の整列されたバージョンが生成される。そして、ビットベクトル422および減少した列424への第2矢印420によって表わされているように、頻出値がビットベクトル422によって表わされ、整列された列418は頻出値を置換させ、減少した列424は頻出値0000が除去されている。第3矢印426によって表わされているように、頻出値の出現の量を表わす数428が生成される。さらに、減少または短縮ビットベクトル430を生成するために、頻出値のグループを除去するようにビットベクトル422が減少される。あるデータはビットベクトル422の先頭または上端に整列されないので、短縮ビットベクトル430は、減少された列424内で頻出値が後に出現するか否かを判定するために使用される。例えば、様々な列にわたるデータの間の依存関係、整列規則、または、要因の組み合わせは、列の値が、頻出値のグループに整列されることを妨げる。完全な列を再構成するために、グループにおける値の出現数428および短縮ビットベクトル430が、減少された列424と組み合わせて使用される。
例えば、辞書を基にした圧縮およびベクトルを基にした圧縮によってテーブルが圧縮されると、多くの列が頻出値の多くの実例(instance)(例えば、多くのヌルまたは0の値)を有する場合において、さらなるレベルの圧縮が可能である。(例えば、図6のテーブル600を参照して説明するように、)テーブル内の行は、列内の最頻出値のできるだけ多くをそれらの列の上端に持って行くように整列され、ビットベクトルはそれらの列について生成される。(図4Bの数428によって表わさているように、)頻出値がブロック内で何回出現するかを記録する数によって、ビットベクトル内で、頻出値の最も上端のブロックが置換される。その数の使用はビットベクトルを短縮し、全体の圧縮率を増加させることを可能とする。
より詳細な例として、一例のテーブルTは、F_1である列1内の最頻出値、F_2である列2内の最頻出値、同様にF_Mまでを有するM列を有し、列J内の値F_Jの出現数は|F_J|と書かれ、列Jは任意の列(すなわち、1からMまでの任意の列)である。列は、最も頻繁な値Fの頻度によって列の順序付けが与えられるように番号が付与され、最も多くF値を有する列は最初であり、最も少なくF値を有する列は最後である。従って、列1からMは、(例えば、図6のテーブル600内の列602の番号付与のように)|F_1|>|F_2|>・・・>|F_M|であるように番号が付与される。
テーブルTの行は、全ての値F_1が上端に存在するように列1によって整列される。整列の順序は、上端の|F_1|行の内部の順序付けに無関心であり、全ての値F_2が上端に存在するように列2によって整列されうる。ここで、整列の順序は、値F_2を有する行の上端のブロックの内部の順序付けに無関心であり、これらの行は全ての値F_3が上端に存在するように列3によって整列されうる。値F_Mを上端に置くように値F_(M-1)を有する行の最も上のブロックが整列されるまで、行の整列が継続される(例えば、最後の列M以外の全てについて継続される)。(図6のテーブル600内に表わされているように、)減少して完成させて、全てのF_1行は上端に、多数のF_2行は上端に、いくぶん少ないF_3行は上端に、等、存在する。この整列の方法は、最終的な圧縮率を最大化するために論理的に最適な整列ではないこともありうるが、実装が比較的容易であり、より複雑なアプローチより高速に実行され(例えば、より効率的に処理資源を利用する)、多くの場合、最適な整列に近い。
詳細な例を続け、列1からMについてビットベクトルV_1からV_Mが書かれ、列Jについての各ビットベクトルV_Jは、値F_Jの出現について‘1’の値、任意の他の値について‘0’の値を含む。結果は、各々が値F_Jの詰め込まれたブロックで開始するビットベクトルV_Jの集合である。各V_J、値F_Jの詰め込まれたブロックについて、V_J内で何ビットが削除されたかを記録する数n_Jをそれらの位置に書き込む。疎な(sparse)テーブルT(すなわち、値の実例が必ずしも隣接していない最も頻繁な値の頻繁な出現を有するテーブル)について、短縮ビットベクトルV*_J+数n_Jによって占められる領域は、完全なビットベクトルV_Jによって占められる領域より著しく小さい。
短縮ベクトルを基にした圧縮は、値の列の集計の効率を大きく向上させる。例えば、全ての頻繁な値F_Jが0である場合において、列のうち長さn_Jを有する最初の区分の値を集計することは(n_J×0は0であるので)些細なことであり、この些細であることを利用するコードは、短縮ベクトルを基にした圧縮なしの場合よりずっとすっきりし高速である。
どのぐらいの圧縮が実現されるかの一例として、上述したようにテーブルTが、1,000,000であるN行を有し、A_1からA_10まで10列を有し、列A_1内に最も頻繁な値F_1が990,000回出現し、A_1内の他の10,000個の値は合計で250個の異なる値を含み、各々は1バイトであるとする。最頻出値F_1について、短縮ベクトルを基にした圧縮なしでベクトルを基にした圧縮を使用して、列A*_1は10キロバイトを占有し、ビットベクトルV_1は125キロバイトを占有する。
短縮ベクトルを基にした圧縮を使用して、短縮ビットベクトルV*_1は10,000ビットを含み、1.25キロバイトを占有する。整列された列A_1についてのV_1についての1ビットのブロックを表わす番号n_1は、10進数表記で990,000とし、2進数表記で20ビット(すなわち、3バイトより少ない)を必要としうる。短縮ベクトルを基にした圧縮を使用して圧縮されたA_1によって必要とされる合計の領域は、辞書のための領域、短い列A*_1のための領域、短いビットベクトルV*_1のための領域、数n_1のための領域を含みうる。そのため、短縮ベクトルを基にした圧縮を使用したA_1のための領域は27キロバイト(12キロバイト、10キロバイト、12.5キロバイト、3バイト)より小さい。
上述のように、圧縮なしで列A_1によって必要とされる全体の領域は50メガバイトでありうる。短縮ベクトルを基にした圧縮を使用して、圧縮率は1800より大きい(50,000キロバイト/27キロバイト、適切に概数で表わした)。2から10までであるJについての値F_Jのうちいくつがそれらの列の上端に整列されるかに応じて、列A_2からA_10のような短縮ベクトルを基にした圧縮を有する他の列についての圧縮率はより小さくなりうるが、疎なテーブルについて全体の圧縮率はそのような圧縮を十分価値あるものにするためになお十分高くすることができ、必要とされるオーバーヘッドのコードが、必要に応じて列を再構成し、選択された値を読み出すことを可能とする。
ベクトルを基にした圧縮および短縮ベクトルを基にした圧縮の両方について、列の圧縮および伸長、全体の列を伸長することなく列内の値の効果的な読み出しを容易にするために、(限定しないが処理およびメモリ消費を含む)あるオーバーヘッドの資源消費が必要とされうる。追加のオーバーヘッドは、実行するために(限定しないがメインメモリ領域を含む)領域および(例えば、プロセッサコア資源のパーセンテージ利用で測定される)時間の両方を要し、(例えば、ベクトルを基にした圧縮、辞書を基にした圧縮、または、それ以外とは異なり)短縮ベクトルを基にした圧縮の使用のための閾値の設定において不利な条件が考慮されうる。閾値は、発見的に、および、各種テーブルにおける検査によって、設定されうる。大量のデータを含むテーブルを含む実装において、処理の消費の代わりにメモリ消費を最小化するために圧縮技術の選択(例えば、異なる列について異なる技術)が使用されうる。メモリ消費を最小化することによって、ブレードサーバの数および設置される物理メモリの量のような、より少ないハードウェア資源が必要とされうる。さらに、最小のメモリ領域はメインメモリ(例えば、持続的な記憶のために使用されるハードディスクドライブのような2次メモリより迅速な応答時間を有するランダムアクセスメモリのような揮発性メモリ)内のデータの圧縮および検索を可能としうるので、データを圧縮し、クエリーに応答する全体の速度は向上され、圧縮を実現するための処理のオーバーヘッドは許容可能に小さくなりうる。
図5は、データを圧縮し、圧縮されたデータを検索するシステム500を表わすブロック図である。システム500は、検索エンジン管理ツール502、ホスト504、記憶装置506を含む。概して、システム500は、検索エンジン管理ツール502を使用してホスト504の圧縮されたデータを検索するために使用され、データは、ホスト504によって組織化され、圧縮される。さらに、ホスト504においてメモリ内に保持されるデータは、記憶装置506において、圧縮された、または、圧縮されていない形式で存続する。探索エンジン管理ツール502は、(例えば、相互の監視およびバックアップを提供するような方法で)ホスト504の各々において冗長的に実現された、検索および圧縮を実行するサービスと統合されたサービスでありうる。
ホスト504の各々がデータの行の一部を保持するようにホスト504が組織化されうる。例えば、第1ホスト508は1番目の百万行を保持し、第2ホスト510は2番目の百万行を保持する。ホスト504にわたるデータの行の分散は均一とし、並列処理を向上させうる。例えば、これは、ホスト504にわたってデータの行を伸長、検索、再圧縮する並列処理を向上させるために行われる。データの分散の結果として、Mを正の数として1からMまでの一連の列の各列は、Nを正の整数として1からNまでの部分に分割され、1つの部分が各ホストに割り当てられ、各ホストはそのホストに割り当てられた部分に責任(インデックス付けおよび圧縮のための、または、割り当てられた部分の伸長、検索、再圧縮のための責任)を負う。
データのテーブルについての論理インデックスは、ホスト504の1つにおいて記憶され、ホスト504にわたってデータがどこに存在するかを判定するために、および、処理を調整するために、その論理インデックスが使用されうる。例えば、第1ホスト508は、ホスト504にわたってデータの行がどこに配置されているかを示す論理インデックス518を含む。処理を調整する一例として、検索エンジン管理ツール502は検索に応答して結果について第1ホスト508に問い合わせ、第1ホスト508は、検索エンジン管理ツール502に提供するため、ホスト504の検索および結果の結合を調整するために論理インデックス518を使用する。
ホスト504は記憶装置506を共有するブレードサーバとすることが可能である。記憶装置506は、ホスト504においてデータが圧縮されるデータベースから1つまたは複数のテーブルの各々に対応する、第1インデックス512のようなインデックスを含みうる。例えば、テーブルは、多次元のOLAP(OnLine Analytical Processing)キューブについての事実テーブル(fact table)および次元テーブル(dimension table)とすることが可能である。インデックスは、インデックス構造についてのメタデータを有する論理インデックス、および、圧縮された列の集合を含みうる。例えば、第1インデックス512は、ホスト504のデータについてのメタデータを含む論理インデックス514、および、圧縮された列の集合516を含む。
ホスト504の各々は、それぞれが責任を持つデータの行を圧縮する責任を持つ。例えば、第1ホスト508は、圧縮される列520内のデータの行を圧縮する責任を持つ。実行される圧縮は、本明細書において説明した任意の種類の圧縮とすることが可能である。短縮ベクトルを基にした圧縮のような圧縮方式は、ホストにおける各インデックスとともに記憶され、分割インデックスの場合において論理インデックスによって調整される。
また、ホスト504の各々は差分バッファを含む。例えば、第1ホスト508は第1差分バッファ522を含む。差分バッファは、ホストのそれぞれのインデックス部分への任意の変更を記憶する。例えば、第1差分バッファ522は、テーブルの第1部分についてのデータの列520内に記憶されたデータへの変更を記憶する。差分バッファは、各々の変更に応答してデータへの更新を要求する代わりに、ホスト504内のデータへの変更(例えば、データについてのクエリーの間に性能を妨げることを防止するために更新は非同期とすることが可能である)を記憶するために使用される。圧縮された列が個々の変更について更新される必要がないことは、記憶された列に同期的に変更が書き込まれるより大幅に圧縮のための全体のシステム性能を向上させることを可能とする。例えば、差分バッファ内に変更が累積され、より少ない頻度でメインインデックスを変更するために累積された変更が使用されるならば、更新を吸収することに関する処理のオーバーヘッドは減少され、そして、変更されたメインインデックスを圧縮するためのオーバーヘッドの資源はより少ない頻度で消費される。例えば、列のインデックスに1000回の小さな変更を行い、毎回、インデックスを伸長および再圧縮しなければならないことに代えて、1000回の変更は差分バッファに書き込まれ、全て一緒にメインインデックスに書き込むことができ、伸長および再圧縮のただ1回のサイクルが必要とされ、従って、オーバーヘッドの資源消費における1000倍の減少を達成する。検索結果を見つけるために、メインインデックス内の圧縮されたデータとともに差分バッファが検索され、差分バッファからの結果は、変更を含む結果を生成するためにメインインデックスからの結果と結合される。ある実施形態において、実装および構成設定の詳細に応じて、ホスト504の各々は、1つまたは複数の差分バッファ、例えば、各インデックスについての差分バッファも含む。
図6は、複数の列602にわたるデータの整列を表わすテーブル600のブロック図である。行604の各々は、列602にわたって依存する値を含む。例えば、第1行608はビジネスオブジェクトを表わす構造化データについての値の組み合わせを含み、第1行608内の値の各々は、第1行608内の他の値に依存し、第1列610の整列は他の列内のデータを整列し、第1行608の値の組み合わせは維持される。ビジネスオブジェクトは、結合されたテーブルの集合としてモデル化することが可能である。結合されたテーブルの集合としてのモデル化は、結合されたテーブルの集合としてモデル化することができるような方法で定義されるビジネスオブジェクトの結果であり、検索エンジンは、テーブルの行にわたって検索し、ビジネスオブジェクトの指定された結合を計算することによってオブジェクトを操作することが可能である。
テーブル600内のデータは、辞書を基にした圧縮の値である。テーブル600内のデータは、ベクトルを基にした圧縮技術の準備において最頻出値をグループにするためのデータの整列の結果である。例えば、値0は列602の各々についての最頻出値であり、列602の最も上部において値のグループが生成されるように行が整列されている。
テーブル600内の行604の整列は、列602にわたって最頻出値を考慮している。例えば、合計行606は、列602の各々について最頻出値の出現数を示す。第1列610の最頻出値が列602の各々の他の頻出値より頻繁に出現するように、列602が順序付けされ、列にわたってより頻繁に出現する値がA_2からA_9まで順序付けされるように他の列の最頻出値が順序付けされている。列の整列に基づいて、行の一端におけるグループでの多くの頻出値として生成されるように行が整列され、その整列は列にわたる依存関係を考慮する。
例えば、合計行606に表わされているように、0値をいくつ含むかによってA_1からA_9として列が水平方向に順序付けされる。第1列610、ラベルが付された列A_1は、その行の全てが全ての0値を上部に持って行くように整列された。そして、第2列612、ラベルが付された列A_2は、行1から19がそれらの行の0値を上部に持って行くように整列された。行1から19に制限されている第2列612の整列は、第1列610の上部の最頻出値の整列順序、および、データの行にわたるデータの依存関係を維持することに基づく。例えば、第1列610の行1から19は、行1から19内の最頻出値のグループを維持するようにその列の最頻出値を含むので、それらの行のみが第2列612内で整列された。整列のこの技術は、残りの列の各々について続く。例えば、第3列614、ラベルが付された列A_3は、行1から15がそれらの行の0値を上部に持って行くように整列され、他の行の0値はそれらの位置に維持されている(例えば、行17は0値を含む)。他の例として、第4列616、ラベルが付された列A_4は、行1から14がそれらの行の0値を上部に持って行くように整列され、第5列618、ラベルが付された列A_5は、行1から10がそれらの行の0値を上部に持って行くように整列され、第6列620、ラベルが付された列A_6は、行1から8がそれらの行の0値を上部に持って行くように整列され、第7列622、ラベルが付された列A_7は、行1から7がそれらの行の0値を上部に持って行くように整列され、第8列624、ラベルが付された列A_8は、行1から6がそれらの行の0値を上部に持って行くように整列され、第9列626、ラベルが付された列A_9は、行1から4がそれらの行の0値を上部に持って行くように整列された。
整列された列の各々は、図4Bを参照して説明した短縮ベクトルを基にした圧縮のようなベクトルを基にした圧縮を使用して圧縮される。列の整列は、列の一端に頻出値のより大きいブロックを押し上げることによって圧縮のメモリ節約を最適化し、例えば、そのような整列なしで生成されるより短いビットベクトルがその整列を用いて生成される。
テーブル600は、整列の結果であるデータのある組織化を含むが、整列は異なり、データは異なりうる。例えば、同一の値0が列602の各々について最頻出値であるが、テーブルは異なり、列602の各々について異なる値が最頻出値でありうる。もう1つの例において、1つの列についての最頻出値は、列の全てを整列するために使用され、または、列の全ては整列される必要がない。
図7A、7Bは、データを圧縮し、圧縮されたデータの検索を可能とする処理700、702を表わすフローチャートである。処理700、702は、図5のホスト504によって実現されうる。例えば、ホスト504の各々は、ホストが責任を持つ一部のデータについて処理700を実行する。圧縮されるデータは、構造化ビジネスデータとすることが可能である。かなりのデータの圧縮はコスト効果の高いデータのメモリ内処理を可能とするので(例えば、サーバの数または物理メモリの量が削減されうる)、データはメモリ内で圧縮され検索される。
概して、図7Aの処理700において、辞書を基にしたメモリ内のデータの列の値が整列され(704)、列の頻出値を表わすベクトルが生成され(706)、頻出値を表わす数が生成され(708)、数および短縮ベクトルが記憶される(710)。
辞書を基にした値の整列(704)は、1つまたは複数の列の値について最小値から最大値まで整列することを含む。複数の列の値が整列されるならば、列の順序付け(テーブルの列内の最頻出値の数に基づく順序付け)に基づいて他の列の前の列を整列することを含む。例えば、図6のテーブル600を参照して説明した列602の順序付けに基づく列602の整列が実行される。整列は列にわたるデータの依存関係を考慮することが可能である。例えば、辞書を基にした値は、同一の行についての列にわたる依存関係を用いて構造化されるデータを表わし、行内の値の対応付けが維持される。整列は、図5のホスト504の1つのようなサーバ内で実行されうる。
例えば、辞書を基にした値を整列することは、テーブルの各列について、列を順序付けすることを含み、任意の列の最頻出値(most-frequently occurring value(MFOV))を含む列は1番目に順序付けされ、他の列の整列は、前の列の最上部の範囲内のレコードに基づく(714)。
列の頻出値を表わすベクトルが生成される(706)。ベクトルは、ビットを用いて行内に頻出値が出現することまたは出現しないことを表わすビットベクトルである。ベクトルは、列の全てについて、または、列のほんのいくつかについて生成されうる。ベクトルは、データの一部について責任を持つ各サーバ(例えば、図5のホスト504のそれぞれのホスト)によって列の部分について生成されうる。頻出値は、列の範囲内の最頻出値のような最頻出値でありうるが、そうである必要はない。例えば、各列の最頻出値についてのビットベクトル表現が生成される(716)。
頻出値を表わす数が生成される(708)。各々の数は、列内の頻出値の出現数を表わす。例えば、図4Bは、頻出値0000の6つの出現を示す。出現数は、列の一端(例えば、上端または下端)における頻出値のグループ内の出現数に制限される。例えば、1つの列は上端における頻出値のグループを有し、数はそのグループ内の値の出現数を表わし、列は値の他の実例を含む。例えば、各列の最上部における最頻出値の実例を表わす数が生成される(718)。
数および短縮ベクトルが記憶される(710)。例えば、頻出値の出現を表わす数が短縮ベクトルとともに記憶される。例えば、テーブルの各列について数およびビットベクトルの組が記憶される。短縮ベクトルは、値の出現が短縮ベクトルを生成するためにベクトルから除去された数によって表わされた、頻出値の出現を表わすベクトルである。短縮ベクトルを記憶することに加えて、値のグループ内の頻出値の実例が、短縮または減少された列を生成するために列から除去される。例えば、最頻出値を含むビットベクトルの上端が除去され(720)、各列について最頻出値の出現数を表わす数および短縮ビットベクトルが記憶される(722)。また、最頻出値のグループを含む列の上端が除去され、または、最頻出値の全ての実例(例えば、最上部および存在すれば他の実例)が、短縮された列を生成するために除去される(および、例えば、ビットベクトルを使用して再構成される)。
概して、図7Aの処理700の部分処理の実装に加えて、図7Bの処理702は、辞書を基にした圧縮の値を生成すること(712、例えば、図1Aを参照した説明した)、列の値を表わすベクトルを短縮すること(720、例えば、上記段落で説明した)、メモリ内の圧縮された列を整列すること(722)、クエリーを実行するために必要とされる列を伸長および再圧縮すること(724)をさらに含む。
圧縮された列について検索を実行することは、圧縮された列のデータをメモリ(例えば、持続的な記憶装置内の圧縮されたデータから不揮発性メモリ)内にロードすること、データを一時的な構造に伸長すること、検索によって指定されたように行を選択することを含む。
図7Aおよび7Bの処理700、702はある順序でのある部分処理を含むが、追加の、より少ない、または、異なる部分処理が存在し、それらの部分処理は異なる順序で存在しうる。例えば、全体の列を整列するのではなく、列の最頻出値のビットベクトル表現に基づいて列が生成されうる(例えば、最頻出値のみが列の一端に整列され、他の値はそれらの中での整列を有する必要がない)。
もう1つの例として、存在すれば、圧縮の種類が性能を最適化する(例えば、メモリ消費を減少させる)ことが期待されるか否かについての判定に基づいて、辞書を基にした圧縮、一般のベクトルを基にした圧縮、短縮ベクトルを基にした圧縮が適用されうる。例えば、辞書を基にした値および辞書が、列の辞書を基にしていない値より少ないメモリを消費することが期待されるならば、辞書を基にした圧縮が実行される。もう1つの例として、キー数値ではなく属性を有する行のみが、任意の種類の圧縮を使用して圧縮される。
図8は、圧縮された辞書を使用したデータの列の圧縮を表わすブロック図である。図は、圧縮されたデータの列802、806、ブロック識別子のベクトル810、ブロック辞書の列814、ブロック辞書に対応するオフセット値の列820を含む。
図8に表わされている圧縮は、データのブロックが1つまたは複数のブロック識別子のベクトルに圧縮されるので、“ブロックベクトル圧縮”と呼ぶ。行のブロックのようなデータのブロックにデータの圧縮が適用されるので、この圧縮はブロック毎であると呼ぶ。この圧縮は辞書を基にした圧縮を使用し、上述したベクトルを基にした圧縮および短縮ベクトルを基にした圧縮の技術に代わりうる。図8を参照して説明する圧縮は、1つまたは複数の列が、例えば、ただ1つの多数回繰り返される値を有するのではなく、それぞれの列内で各々が多数回繰り返されるいくつかの値を含むとき、代替として適用されうる。この圧縮は、数百万または数億の行を圧縮するために特に適用可能であり、達成されるメモリ効率は、圧縮のための処理のオーバーヘッドによって引き起こされる損失を著しくまさる。
概して、図8の圧縮は、整列されたデータの列をブロックに分割すること、各ブロックについてブロック辞書を参照するブロック識別子のベクトルを生成することを含む。ブロック辞書は、ブロック内に現れる値を含みうる。ブロック識別子は最小のビット数を使用して符号化される(例えば、ブロックの全てのユニークなブロック識別子を2進数符号化するために必要とされる最小のビット長で2進数符号化される)。ブロック辞書は、各ブロック識別子をデータの列内のユニークな値を表わす値識別子にマッピングする。(辞書を基にした圧縮に関して上述したように)辞書を基にした圧縮によって生成される列の辞書内で値識別子が検索される。
図8を参照すると、圧縮されたデータの第1列802は、辞書を基にした圧縮により圧縮されたデータを表わす値識別子を含む。例えば、値識別子“0007”は文字列“INTEL”を表わす。圧縮されたデータの第1列802は、矢印804によって示されているように、圧縮されたデータの第2列806を生成するように整列される。圧縮されたデータの第2列806は、同一の値識別子が一緒にグループにされるように整列される。圧縮されたデータの第2列806の整列は、より小さく番号付けされた値識別子からより大きく番号付けされた値識別子に整列することを含み、結果として複数の値識別子が一緒にグループにされる他の整列技術を使用することが可能である。
矢印808によって示されているように、圧縮データの第2列806に基づいてブロック識別子のベクトル810が生成される。ベクトル810は、圧縮されたデータの第2列806の各々の値識別子についてのブロック識別子を含む。各々のユニークな値識別子についてユニークなブロック識別子を割り当て、同一の値識別子について同一のブロック識別子を割り当てることによってベクトル810が生成され、ブロック識別子および値識別子はデータのブロックの範囲内で少なくともユニークである(データのブロックは、この例において、値識別子のブロックである)。各ブロック識別子は、ブロックについてのブロック識別子の数に基づく最小の2進数符号化を有する整数である。ベクトル810は各ブロックについてのベクトルの集合であり、ブロックについての一連のブロック識別子はそのブロックについてのベクトルを構成する。
例えば、図8において、3行のブロックサイズが存在する(実際、ブロックサイズは、データテーブルのあるカテゴリーについて数百または数千の行であり、ブロックのサイズは有効性について検査され、任意に選択されうる)。値識別子の第1ブロック828について、全ての値識別子は同一(すなわち、“0000”)であり、同一のブロック識別子(この場合、‘0’)がベクトル810内に含まれる。第2ブロック830について、2つのユニークな値識別子(“0001”および“0002”)が存在し、ベクトル810内のそれらの値を表わすためにそのブロックについて2つのユニークなブロック識別子(‘0’および‘1’)が使用され、値識別子の列0001, 0001, 0002がブロック識別子の列0, 0, 1として表わされている。第3ブロック832について、値識別子の各々はブロックの範囲内でユニークであるので、値識別子の列0002, 0003, 0004がブロック810内のブロック識別子の列00, 01, 10として表わされている。第2ブロック830とは異なり、第3ブロック832について、ブロック識別子の各ブロックについて最小のビット数を使用してブロック識別子が表わされるので、ベクトル810内でブロック識別子を符号化するために2ビットが使用される。
ベクトル810が同一の繰り返し値を有するブロックベクトルについてのエントリを含む場合、ベクトル810のブロックベクトルは、規則により、全く何も含まず、0キロビットの合計サイズを与える。ベクトルが1,024行のブロックサイズを有するならば、2つの異なる値を含む1,024行のブロックについて、ブロック識別子のベクトルは、各々が0または1である一連の1,024ビットを含み、1キロビットの合計サイズを与える。1,024の異なる値を含む1,024行のブロックについて、ブロック識別子のベクトルは一連の10ビットの整数を含み、10キロビットの合計サイズを与える。
ブロック辞書の列814は、ブロック識別子の列816および値識別子の列818を含む。列814において、各ブロックはブロック辞書によって表わされ、ブロック辞書はブロック識別子および対応付けされた値識別子の組み合わせからなる。
矢印812によって示されているように、ブロック識別子のベクトル810に基づいてブロック識別子の列816が生成される。ブロック識別子のベクトル810とは異なり、ブロック識別子の列816はブロックについて最小数のブロック識別子を含む。ブロックの範囲について、各々の利用されるブロック識別子は、そのブロックについて列816内のリスト内に1回のみ現れるという意味で、その数は最小である。さらに、列816内にリストされるブロックについてのブロック識別子は、数値順のような正規の順序でリストされる。例えば、列0, 0, 0としてベクトル810内に表わされた値識別子の第1ブロック828は、ブロック識別子の列816内に単一のブロック識別子‘0’として表わされている。もう1つの例として、ベクトル810内の列00, 01, 10として表わされる値識別子の第3ブロック832は、ブロック識別子00, 01, 10として表わされ、各ブロック識別子はそのブロック内でユニークである。
オフセット値の列820は、ブロック辞書の列814のブロック辞書に対応する。オフセット値の列820は各ブロックについてのオフセット値を含み、各オフセット値は、ブロック辞書の列814内で、データのブロックについての辞書がどこで開始するかを示す。例えば、第1オフセット値834は、圧縮されたデータの第1ブロックについてブロック識別子が0のオフセットにおいて開始することを示す。もう1つの例として、第3オフセット値836は、圧縮されたデータの第3ブロックについてのブロック識別子が3のオフセット(すなわち、ブロック識別子の列816の上端から3行)において開始することを示す。ブロック識別子の列822は列810と同一であり、オフセット値の列820のオフセット値と各ブロックについての列822のブロック識別子との間の対応関係、および、ブロックベクトルの列822内のブロックベクトルのブロック識別子がオフセット値の列820のオフセット値とどのように対応付けされるか、を表わすように繰り返される。オフセット値は、高速な値の検索をたいへん容易にし、ブロック辞書が再使用されるならば必須である。例えば、1Kまたは1,024のブロックサイズについて、オフセット値の列820をスクロールダウンすることは、ブロックが、1000倍高速に配置されることを可能とする。さらに、オフセット値はブロック辞書の再使用を可能とする実用的な方法である。
サーバの揮発性メモリ領域のような領域を節約するために、ブロック識別子の辞書の列814、オフセット値の列、ブロック識別子のベクトル810のみが、値識別子の列802のような値識別子の列の代わりに保存される必要がある。
図8を参照して説明した圧縮または類似の技術は、図5のホスト504のような1つまたは複数のサーバにおいて実装されうる。この技術は異なるデータの列について(例えば、ホスト504の各々における列を用いて)並列に実行することが可能である。
例えば、ブロックが1,024回繰り返される単一の値を含み、ブロックサイズが1,024であり、単一の値がそのブロックについてのブロック辞書内にリストされるならば、値が繰り返される事実を符号化するために0のビットが使用される(例えば、ブロック識別子‘0’および対応付けされた値識別子のみがブロック内の値の1,024個の実例を表わし、規則により、ブロックベクトルは存在しない)ので、圧縮は効果的である。もう1つの例として、ブロックが2つの値(例えば、ブロックの範囲内でユニークな2つの値)を含み、これらの2つの値がそのブロックについてブロック辞書内にリストされるならば、
ブロックベクトル内の各々の行についてどの値が出現するかを指定するために1ビット(例えば、ブロックベクトル内のエントリのリストについて0または1)が必要とされる。もう1つの例として、ブロックが3つまたは4つの異なる値を含み、ブロック辞書内にリストされるならば、ブロックベクトル内の各々の行についてどの値が出現するかを指定するために2ビット(例えば、00, 01, 10または11)が必要とされる。従って、概して、ブロックが、Nより大きいか等しい最小の2の整数乗が2のP乗であるようなN個の異なる値を含むならば、ブロックベクトル内の各々の行についてブロック辞書内のどの値をとるかを指定するためにPビットが必要とされる。最悪の場合のシナリオにおいて、ブロックが1,024個の異なる値を含むならば、(1,024は2の10乗に等しいので)各々の行についてどの値をとるかを指定するために10ビットが必要とされる。
ブロックベクトル圧縮についてのブロック辞書のもう1つの例として、列(例えば、値識別子の列806)がCの基数を有し、Cが全体の列内で異なる値の数であり、これらの値の多くがブロックベクトル圧縮が適用可能なように多数回繰り返していると仮定する。Cが524,288(すなわち、2^19)と1,048,576(すなわち、2^20)の間に存在するならば、列についての値識別子は20ビットを必要とする。
単一の繰り返し値を含む1,024行のブロックについて、ブロック辞書は20ビットによって指定される単一のエントリを含む。2つの異なる値を含む1,024行のブロックについて、ブロック辞書は2つのブロック識別子のビットおよび2つの20ビットの値識別子ビットを含み、全体で42ビット(すなわち、各々の値識別子について20ビット、各々のブロック識別子について1ビット)を与える。1,024の異なる値を含む1,024行のブロックについて、ブロック辞書は、各々が10ビットを有する1,024のブロック識別子、各々が20ビットを有する1,024の値識別子を含み、全体で30キロビット(すなわち、30ビット×1,024エントリ)を与える。
各々の場合において、オフセットを符号化するためにさらにいくつかのビットが必要とされ、ビット数は全体のブロック辞書の長さに依存する。上記の場合についてブロックベクトルのビット合計をブロック辞書のビット合計に加えると、検討した3つの例の場合について、それぞれ、20ビット、43ビット、40キロビットを与える。辞書を基にした圧縮およびビットベクトル圧縮を一緒に使用した最悪の場合のシナリオの合計は、列について、辞書を基にした圧縮のみを使用して必要とされる全体の領域の2倍となり、これは、ブロックの大多数が多くの繰り返し値を含む場合に列についてビットベクトル圧縮のみが効果的に適用可能であることを示す。
所定のブロック識別子と対応付けされたユーザが読み取り可能な値を見つけるために、2つの辞書検索が存在するが、両方の検索は巧妙に実行を要求される。例えば、所定の値を有する全てのレコードについてのクエリーに応答して、まず、(キー数値または属性のような)値と対応付けされた値識別子を検索するために列についての辞書が使用され、そして、所定のブロック内の値識別子と対応付けされたブロック識別子を検索するためにブロック辞書が使用される。もう1つの例として、ブロック識別子から値へ、ブロック識別子に対応する値識別子を検索するためにブロック辞書814が使用され、そして、値識別子に対応する値を検索するために列802についての辞書が使用される。複数のブロック内の値を検索するため、それぞれのブロックについて対応付けされたブロック識別子を見つけるために複数のブロック辞書が使用される。
図8は、圧縮の一部として特徴の一定の組み合わせを含むが、変形が存在しうる。例えば、ブロック識別子はデータのブロックにユニークである。もう1つの例として、ブロック識別子は、ブロック識別子のブロックを表わすために最小のビット数に圧縮される必要はない。もう1つの例として、ブロック識別子は、‘0’で開始する、または、昇順である必要はない。もう1つの例として、図8の圧縮の説明において用語“各”が使用されたが、圧縮はそのように全てに適用される必要はない。例えば、各ブロックが圧縮される必要はなく、オフセット値が各ブロックについて存在する必要はない。
もう1つの例として、ブロック辞書はいくつかのブロックにわたって再使用することが可能である。例えば、ブロックの値識別子は、もう1つのブロック、例えば、前のブロックと同一のものであるか、または、たいへん類似のものとすることが可能である。そのような場合において、前の辞書は可能な限り多くの回数、再使用される。
例えば、新たなブロック(例えば、続くブロック)内の値が前のブロック内の値と同一であるか、または、その部分集合を構成するならば、前のブロック辞書はそのまま使用することが可能であり、新たなブロックについて必要とされる符号化は、(同一のブロック辞書が再使用されるので)前のブロックと同じようにそのオフセットを設定することだけである。
続く3つの条件は、前のブロックと比較して追加のブロック識別子を有する続くブロックについての辞書の再使用の前に必要とされうる。続くブロックは前のブロック内に現れる値への追加の1つまたは複数の値を含み、これをN追加値と呼ぶ。前のブロックがPビットを使用して符号化することができるM個の異なる値を含む。合計M+Nは2^Pより小さいかまたは等しく、追加のブロック識別子−値識別子の組は前の辞書に付加される。
新たな値は前の辞書に追加され、新たなブロックについてのオフセットは前のブロックと同じように設定される。この方法において、前の辞書への新たなエントリは、(前のブロックについてのブロック識別子−値識別子の組は変化しないので)前のブロックについての辞書の適用可能性を妨げるとは限らない。列内の多くのブロックが前のブロックと類似ならば、ブロック辞書の再使用は、列を記憶するために必要とされる領域を大きな率で減少させうる。
図9は、複数の列902にわたるデータの整列を表わすテーブル900のブロック図である。列902内の整列されたデータはブロックベクトル圧縮のために使用され、これは図8および図10を参照して説明する。テーブル900の列は、図5のホスト504のような複数のサーバにわたって広がる。概して、テーブル900はデータの行904の列902を含み、1つまたは複数のデータの行は列902にわたってデータの依存関係を有する構造化データを表わす。例えば、ビジネスオブジェクトは結合されたテーブルの集合としてモデル化されうる。テーブル900内のデータは列902にわたってデータの依存関係を有するので、列の整列はこれらの依存関係を考慮し、結果の整列に影響を与える。
テーブル900内の整列されたデータは、できる限り多くの繰り返し値を一緒にグループにするようにデータが整列される、ブロックベクトル圧縮のための前提条件を表わす。列902の順序付けを最適化するようにテーブル900を整列することは全体の行を整列し、他の列は結果としてより不規則になりうることが難点でありうる。テーブル900内のデータの整列は、全ての関係するテーブルの列902のよい順序付けを生成するように行904が十分に整列される整列を表わす。様々な実用上の制約を与えられるので、技術を最適化する(例えば、順序付けされたブロックの数を最適化するように数学的な意味で最適する)必要はなく、高速に実行する堅固な発見的方法は想定するアプリケーションのために十分よい。
テーブル900内のデータの整列は、ブロックベクトル圧縮に先立ってデータを整列するための多くの技術の1つである。テーブルの影のついた部分は、他の部分(例えば、同一の行の集合の他の列)の整列に起因する整列に加えて、整列が存在しない場所を示す。テーブル900内のデータは、辞書を基にした圧縮の結果である値識別子である。
列908は、ブロックのラベルおよび行のラベルを含む、データの行904のためのラベルを含む。例えば、第1行906はブロックB1内に存在し、行1である。
テーブル900内のデータは、第1列から第2列へ等、列902の系列の後方へ、列902を整列した結果である。列902は順序付けされていないが、ある実施形態において順序付けされうる。例えば、系列内のより後方の列についてブロックベクトル圧縮がより効果的であるように、より少ないユニークな値を有する列が値のより大きいグループを有することが期待されるので、より少ないユニークな値を有することが期待され、または、知られている列は、整列される一連の列内で、より前方に順序付けされる。また、ブロックベクトル圧縮は、全ての列について実行される必要はなく、ブロックベクトル圧縮から十分に利益を得るためにある指定された閾値基準を満たす列のような、選択された列のみに適用することが可能である。例えば、ブロックベクトル圧縮を使用して、または、使用しないで、列のための領域の要求条件の比較が行われ、ブロックベクトル圧縮の符号化および実行時のオーバーヘッドに影響を与えうる。領域の効率およびオーバーヘッドに関する計量は、特定の実装における1つまたは複数の列についてブロックベクトル圧縮を利用するか否かを判定するために比較される。
テーブル900内のデータは、次のような列の整列の結果である。例において、テーブル900は、5つの列A1からA5および35行を7つのブロックB1からB7に分割し、各々は5つの行を有し、各列のエントリは4つの可能な値を有し、値識別子0から3を使用して符号化される。続く列の整列に影響を及ぼす前の列の整列の結果を用いて、第1列A1から第5列A5まで列が整列される。特に、列A1は値識別子が上昇するように整列される。列A1内で一定の値識別子を有する任意のブロックは、第2列A2についてさらに整列するために利用可能である。テーブル900内に、ブロックB1、B2、B4、B6、B7が存在する。例えば、ブロックB1は列A1内に全て‘0’のエントリを有する。列A2のブロックB1、B2、B4、B6、B7は、値識別子が上昇するように、各々、内部で整列される。一定のA2の値識別子を有する任意のブロックは、さらなる整列のために利用可能であり、ブロックB1およびB6が存在する。列A3のブロックB1およびB6は、値識別子が上昇するように、各々、内部で整列される。一定のA3の値識別子を有する任意のブロックは、さらなる整列のために利用可能であり、これはブロックB1を含む。列A4のブロックB1は、値識別子が上昇するように内部で整列される。ブロックB1はある一定のA4の値識別子を含まないので、さらなる整列は存在しない(すなわち、A5内での値識別子の整列はない)。
従って、概して、整列は、昇順または降順での整列のような、同一の値識別子を一緒にグループにするように第1列を整列することを含む。続く列について、前の列内に同一の値識別子を有するブロックのみが整列され、値識別子のグループが存在するようにそれらのブロックが整列される。前の列のブロックが同一の値識別子を有さなくなるまで整列は続く。
ある実装において、整列は、テーブルの更新を妨げる望ましくない影響を有しうる。これは、テーブルの行への効果的なランダムアクセスを必要とする。更新は、(上述した)別個の差分インデックスによって収集および処理され、差分インデックスは、定期的に(すなわち、非同期に)メインテーブルインデックスと結合される。結合処理は、テーブルインデックスを再構築することを含み、上述した整列順序は、テーブルの更新を妨げるとは限らない。特に、上述した差分インデックスのアプローチのような更新を処理するためのバッファリング方式とともに、列を再整列することを含む圧縮技術が実装される場合において、妨害であるとは限らない。
図10は、データを圧縮する処理1000のフローチャートである。処理1000は図5のホスト504によって実現されうる。例えば、ホスト504の各々は、ホストが責任を持つデータの一部について処理1000を実行する。圧縮されるデータは構造化ビジネスデータとすることが可能である。データのかなりの圧縮がコスト効果の高いデータのメモリ内の処理を可能とする(例えば、サーバ数または物理メモリ量が減少されうる)ので、データはメモリ内で圧縮および検索される。
概して、処理1000はブロックベクトル圧縮と呼び、これはデータのブロック毎のベクトルへの圧縮と呼びうる。処理1000は、値識別子の列を生成するために辞書を基にした圧縮により1つまたは複数のデータの列を圧縮すること(1002)、値識別子を整列すること(1004)、ブロック識別子を生成すること(1006)、ブロック辞書を生成すること(1008)、オフセット値を生成すること(1010)を含む。
値識別子の列を生成するために辞書を基にした圧縮により1つまたは複数のデータの列が圧縮される(1002)。辞書を基にした圧縮は、列内の値の基数に基づいて値識別子を表わす最小のビット数を使用する。
値識別子が整列される(1004)。値識別子の整列は、値識別子の複数の列を整列することを含み、さらに、例えば、図9を参照して説明したように、他の列の整列された値識別子に基づいて値識別子の列を整列することを含みうる。
ブロック識別子が生成される(1006)。ブロック識別子は選択された列内の値識別子の各ブロックについて生成される。例えば、ブロックベクトル圧縮を列に適用するように判定が行われ、列の各ブロックについてブロック識別子が生成され、各ブロックについてのユニークなブロック識別子がブロック内の各々のユニークな値識別子について生成され、同一の値識別子について同一のブロック識別子が使用される。
ブロック辞書が生成される(1008)。ブロック辞書は各ブロックについて生成され、各ブロック辞書についてブロック識別子が値識別子と対応付けされ、ブロック識別子はブロックの範囲内の各々のユニークなブロック識別子のために含まれるのみである。例えば、図8を参照すると、第1ブロック828についてのブロック辞書は、1つのユニークなブロック識別子‘0’を有する(838)。
複数のブロック辞書はブロック辞書の列内に含まれうる。例えば、図8を参照すると、複数のブロック辞書がブロック辞書の列814内に含まれている。
ブロック辞書は再使用されうる。例えば、1つのブロックについてのブロック辞書は、(上述したように)同一のブロック識別子を有する、または、追加のブロック識別子を有する続くブロックについて再使用されうる。
オフセット値が生成される(1010)。オフセット値はブロック辞書の列内でブロックが開始する場所を示し、オフセット値は、ブロックベクトル内のブロック識別子と対応付けされる。オフセット値は、(例えば、ブロックベクトルの列822と対応付けされたオフセット値を有するオフセット値820の列によって表わされているように、)ブロックベクトルのベクトルと対応付けされるブロックのオフセットの列内に含まれる。
図10はある組合せおよびある種類の部分処理を含むが、処理1000、ブロックベクトル圧縮、または、両方は、より少ない、異なる、または、追加の部分処理を含みうる。例として、全ての列が整列される必要はなく、全ての列がブロックベクトル圧縮によって圧縮される必要はなく、列の辞書を基にした圧縮は全てのまたは任意の列について実行される必要はなく、列の整列は他の列の整列の結果に依存する必要はなく、ブロック辞書は再使用することが可能であり、追加の部分処理は1つまたは複数のデータの列のクエリーを受信することを含むことが可能であり、ブロックベクトルはクエリーの基準を照合するデータを見つけるためにブロック辞書とともに使用することが可能であり、差分バッファが使用され、ブロックベクトルを使用して並列に差分バッファが検索されることが可能であり、差分バッファからの結果は他の結果とともに結合されることが可能であり、ブロックベクトル、ブロック辞書、オフセット値は記憶することが可能であり、オフセット値は生成されないことが可能である、等。
各図面は特徴の一定の組み合わせを説明しているが、実装は多様でありうる。例えば、図5のシステム500には追加の、異なる、または、より少ない構成要素が含まれうる。
ここで説明された発明は、この明細書で開示された構造的手段およびその構造的な等価物を含む、デジタル電子回路で、または、コンピュータソフトウェア、ファームウェア、または、ハードウェアで、または、それらの組合せで、実現することができる。ここで説明された発明は、1つまたは複数のコンピュータプログラム製品、すなわち、データ処理装置、例えば、プログラム可能なプロセッサ、1つまたは複数のコンピュータによる実行のために、または、それらの動作を制御するために、情報運搬体の中に、例えば、機械読み取り可能な記憶装置または伝搬信号の中に、有形に実現された1つまたは複数のコンピュータプログラムとして実現することができる。コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、または、コードとしても知られる)は、コンパイル言語またはインタプリタ言語を含む任意の形態のプログラミング言語で書くことができ、スタンドアロンプログラム、または、モジュール、コンポーネント、サブルーチン、または、コンピュータ環境で使用するために適切な他のユニットを含む任意の形態で配備することができる。1つのコンピュータプログラムは1つのファイルに対応するとは限らない。1つのプログラムは、他のプログラムまたはデータを保持するファイルの一部に、当該プログラム専用の1つのファイルに、または、複数の統合されたファイル(1つまたは複数のモジュール、サブプログラム、または、コードの一部を記憶するファイル)に、記憶することができる。コンピュータプログラムは、1つのコンピュータ上で、または、1つのサイトまたは複数のサイトにわたって分散され通信ネットワークによって相互接続された複数のコンピュータ上で、実行されるように配備することができる。
ここで説明された発明の方法のステップを含む、この明細書で説明された処理およびロジックのフローは、入力データについて動作して出力を生成することによってここで説明された発明の機能を実行する1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能なプロセッサによって実行することが可能である。また、処理およびロジックのフローは、特定目的のロジック回路、例えば、FPGA(field programmable gate array)またはASIC(application-specific integrated circuit)によって実行することができ、ここで説明された発明の装置は、特定目的のロジック回路、例えば、FPGAまたはASICとして実現することができる。
コンピュータプログラムの実行のために適切なプロセッサは、例として、汎用のおよび特定目的のマイクロプロセッサの両方、および、任意の種類のデジタルコンピュータの1つまたは複数のプロセッサを含む。一般に、プロセッサは、リードオンリメモリまたはランダムアクセスメモリまたは両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実行するためのプロセッサ、および、命令およびデータを記憶するための1つまたは複数のメモリ装置である。また、一般に、コンピュータは、データを受信または送信し、または、送受信するために、データを記憶するための1つまたは複数の大容量記憶装置、例えば、磁気ディスク、光磁気ディスク、または、光ディスクを含み、または、動作可能に結合される。コンピュータプログラムの命令およびデータを実装するために適切な媒体は、全ての形態の揮発性メモリ(例えば、ランダムアクセスメモリ)、または、例として、半導体メモリ装置、例えば、EPROM(erasable programmable read only memory)、EEPROM(electrically erasable programmable read only memory)、フラッシュメモリ装置、磁気ディスク、例えば、内蔵ハードディスクまたは取り外し可能なディスク、光磁気ディスク、CD−ROM(compact disc read only memory)、DVD−ROM(digital versatile disc read only memory)ディスクを含む不揮発性メモリを含む。プロセッサおよびメモリは、特定目的のロジック回路を補い、または、特定目的のロジック回路に組み込むことができる。
ユーザとの相互作用を提供するために、ここで説明された発明は、ユーザへの情報を表示するための表示装置、例えば、CRT(cathode ray tube)またはLCD(liquid crystal display)モニタ、および、ユーザがコンピュータへの入力を与えることができるキーボード、ポインティングデバイス、例えば、マウスまたはトラックボールを有するコンピュータ上に実現することができる。ユーザとの相互作用を提供するために他の種類の装置を使用することもでき、例えば、ユーザに与えられるフィードバックは、任意の形態の知覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、または、触覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または、触覚の入力を含む任意の形態で受信することができる。
ここで説明された発明は、バックエンドコンポーネント(例えば、データサーバ)、ミドルウェアコンポーネント(例えば、アプリケーションサーバ)、または、フロントエンドコンポーネント(例えば、ユーザがここで説明された発明の実装と相互作用することができるグラフィカルユーザインタフェースまたはウェブブラウザを有するクライアントコンピュータ)、または、そのようなバックエンド、ミドルウェア、フロントエンドコンポーネントの任意の組み合わせを含むコンピュータシステム内に実現することができる。システムのコンポーネントは、デジタルデータ通信、例えば、通信ネットワークの任意の形態または媒体によって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(“LAN”)および広域ネットワーク(“WAN”)、例えば、インターネットを含む。
コンピュータシステムはクライアントおよびサーバを含む。クライアントおよびサーバは、一般に、論理的な意味で互いから離れ、典型的に、通信ネットワークを通して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で実行し、互いにクライアント−サーバの関係を有するコンピュータプログラムによって生じる。
ここで説明された発明は、特定の実施形態に関して説明されたが、他の実施形態を実現することができ、請求項の範囲内にある。例えば、動作が異なっても所望の結果を達成することができる。ある実施形態において、マルチタスクおよび並列処理が好ましい。他の実施形態は請求項の範囲内にある。
構造化データのテーブル、そのテーブルの列についての辞書、属性テーブル、メインインデックスを表わすブロック図である。 構造化データのテーブル、そのテーブルの列についての辞書、属性テーブル、差分インデックスを表わすブロック図である。 メインおよび差分インデックスからの結果の集合の生成を表わす例である。 構造化データのテーブルを表わすブロック図である。 構造化データのテーブルを表わすブロック図である。 属性およびキー数値の基数を表わすテーブルである。 ベクトルを基にした圧縮により圧縮される列を表わすブロック図である。 ベクトルを基にした圧縮により圧縮される列を表わすブロック図である。 データを圧縮し、圧縮されたデータを検索するシステムを表わすブロック図である。 複数の列にわたるデータの整列を表わすテーブルのブロック図である。 データを圧縮し、圧縮されたデータの検索を可能とする処理を表わすフローチャートである。 データを圧縮し、圧縮されたデータの検索を可能とする処理を表わすフローチャートである。 圧縮された辞書を使用したデータの列の圧縮を表わすブロック図である。 複数の列にわたるデータの整列を表わすテーブルのブロック図である。 データを圧縮する処理のフローチャートである。
符号の説明
105、170 テーブル
110、172 辞書
115、174 属性テーブル
120 メインインデックス
125 列
130、135、150 値識別子
140 文書識別子
145 文書識別子リスト
176 差分インデックス
500 システム
502 検索エンジン管理ツール
504、508、510 ホスト
506 記憶装置
512 インデックス
514、518 論理インデックス
516 圧縮された列の集合
520 列
522 差分バッファ
802、806 列
810 ブロック識別子のベクトル
814 ブロック辞書の列
816、822 ブロック識別子の列
818 値識別子の列
820 オフセット値の列

Claims (17)

  1. データ処理装置に動作を実行させるコンピュータプログラムであって、
    前記動作は、
    辞書を基にした圧縮によりデータの列を圧縮する処理を含み、前記圧縮する処理は値識別子の列を生成する処理を含み、前記値識別子の各々は前記データの列内のユニークな値を表わし、
    前記値識別子を整列する処理と、
    少なくとも1つのブロックが複数の同一の値識別子を含むように前記整列された値識別子をブロックに分割し、各ブロックについて各々の値識別子にブロック識別子を割り当てることによって第1リストを生成する処理とをさらに含み、前記第1リストを生成する処理は、ブロック内の各々のユニークな値識別子についてユニークなブロック識別子を取得する処理と、同一の値識別子について同一のブロック識別子を取得する処理とを含み、前記ブロック識別子は各ブロックのブロック識別子の数に基づく最小のビット数を使用して表わされ、
    前記動作は、
    ブロック辞書の列を生成する処理をさらに含み、前記ブロック辞書の列を生成する処理は、各ブロックについてブロック辞書を生成する処理を含み、
    前記ブロック辞書は、
    各ブロックのユニークなブロック識別子を含むブロック識別子の第2リストを含み、各ブロック識別子は値識別子と対応付けされ
    前記動作は、
    ブロックのオフセットの列を生成する処理をさらに含み、前記ブロックのオフセットの列の各値は前記ブロック辞書の列内でブロックが開始するオフセットを示すコンピュータプログラム。
  2. 前記値識別子は、テーブルの同一の行にわたってデータの依存関係を有する構造化ビジネスデータを表わす値である請求項1に記載のコンピュータプログラム。
  3. 前記ビジネスデータは、結合されたテーブルの集合としてモデル化されたビジネスオブジェクトを含む請求項2に記載のコンピュータプログラム。
  4. 前記動作は複数のハードウェアサーバ上で並列に実行される請求項1に記載のコンピュータプログラム。
  5. 前記データの列への変更は、前記データの列から分離された差分バッファ内に記憶され、前記変更は非同期に統合される請求項1に記載のコンピュータプログラム。
  6. 前記動作は、前記ブロック辞書における検索を可能とするために、前記ブロック辞書の列および前記ブロックのオフセットの列を記憶する処理をさらに含む請求項1に記載のコンピュータプログラム。
  7. 前記値識別子の各ブロックのサイズは固定された行の数である請求項1に記載のコンピュータプログラム。
  8. 前記動作は、構造化データのテーブル内の他の列とともに前記データの列を整列する処理をさらに含み、
    前記データの列を整列する処理は、
    値識別子のグループを生成するように前記データの列を整列する処理と、
    前の列に基づいて続く列のブロックを選択的に整列する処理とを含み、前の列のブロックが1つの同一の値識別子を有するならば、続く列のブロックが整列される請求項1に記載のコンピュータプログラム。
  9. ブロック識別子は、前記第1リスト内の前記値識別子の各々について割り当てられ、前記第1リスト内の前記ブロック識別子の順序付けは、前記値識別子の順序付けに合致し、前記第1リスト内の前記ブロック識別子は、各ブロックについて開始する番号付けされた系列を含み、各ブロック辞書は、各ブロック辞書についてブロック識別子を表わすために最小のビット長が使用されるように2進数符号化により圧縮され、各ブロック辞書について、ブロック識別子の各々のユニークな値についてブロック識別子が1回のみ存在する請求項1に記載のコンピュータプログラム。
  10. コンピュータ実装される方法であって、
    辞書を基にした圧縮によりデータの列を圧縮する過程を有し、前記圧縮する過程は値識別子の列を生成する過程を有し、前記値識別子の各々は前記データの列内のユニークな値を表わし、
    前記方法は、
    前記値識別子を整列する過程と、
    少なくとも1つのブロックが複数の同一の値識別子を含むように前記整列された値識別子をブロックに分割し、各ブロックについて各々の値識別子にブロック識別子を割り当てることによって第1リストを生成する過程とをさらに有し、前記第1リストを生成する過程は、ブロック内の各々のユニークな値識別子についてユニークなブロック識別子を取得する過程と、同一の値識別子について同一のブロック識別子を取得する過程とを含み、前記ブロック識別子は各ブロックのブロック識別子の数に基づく最小のビット数を使用して表わされ、
    前記方法は、
    ブロック辞書の列を生成する過程をさらに有し、前記ブロック辞書の列を生成する過程は、各ブロックについてブロック辞書を生成する過程をさらに有し、
    前記ブロック辞書は、
    各ブロックのユニークなブロック識別子を含むブロック識別子の第2リストを含み、各ブロック識別子は値識別子と対応付けされ
    前記方法は、
    ブロックのオフセットの列を生成する過程をさらに有し、前記ブロックのオフセットの列の各値は前記ブロック辞書の列内でブロックが開始するオフセットを示す方法。
  11. 前記値識別子は、テーブルの同一の行にわたってデータの依存関係を有する構造化ビジネスデータを表わす値である請求項10に記載の方法。
  12. 前記データの列への変更は、前記データの列から分離された差分バッファ内に記憶され、前記変更は非同期に統合される請求項10に記載の方法。
  13. 前記ブロック辞書における検索を可能とするために、前記ブロック辞書の列および前記ブロックのオフセットの列を記憶する過程をさらに有する請求項10に記載の方法。
  14. 前記方法は、構造化データのテーブル内の他の列とともに前記データの列を整列する過程をさらに含み、
    前記データの列を整列する過程は、
    値識別子のグループを生成するために前記データの列を整列する過程と、
    前の列に基づいて続く列のブロックを選択的に整列する過程とを含み、前の列のブロックが1つの同一の値識別子を有するならば、続く列のブロックが整列される請求項10に記載の方法。
  15. データ処理装置に動作を実行させるコンピュータプログラムであって、
    前記動作は、
    データの圧縮された列を表わす値識別子を整列する処理と、
    少なくとも1つのブロックが複数の同一の値識別子を含むように前記整列された値識別子をブロックに分割し、各ブロックについて各々の値識別子にブロック識別子を割り当てることによって第1リストを生成する処理とを含み、前記第1リストを生成する処理は、ブロック内の各々のユニークな値識別子についてユニークなブロック識別子を取得する処理と、同一の値識別子について同一のブロック識別子を取得する処理とを含み、前記ブロック識別子は各ブロックのブロック識別子の数に基づく最小のビット数を使用して表わされ、
    前記動作は、
    複数のブロック辞書を生成する処理をさらに含み、前記ブロック辞書は、前記値識別子の複数のブロックの各々について存在し、
    前記ブロック辞書の各々は、各ブロックのユニークなブロック識別子を含むブロック識別子のリストを含み、各ブロック識別子は値識別子と対応付けされコンピュータプログラム。
  16. 前記動作は、辞書を基にした圧縮により前記データの列を圧縮する処理をさらに含み、前記圧縮する処理は前記値識別子の列を生成する処理を含み、前記値識別子の各々は前記データの列内のユニークな値を表わす請求項15に記載のコンピュータプログラム。
  17. 前記動作は、前記ブロック辞書における検索を可能とするために、前記ブロック辞書を記憶する処理をさらに含む請求項15に記載のコンピュータプログラム。
JP2008132427A 2007-05-21 2008-05-20 繰り返し値を有するテーブルのブロック圧縮 Active JP4907600B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/805,186 2007-05-21
US11/805,186 US7769729B2 (en) 2007-05-21 2007-05-21 Block compression of tables with repeated values

Publications (2)

Publication Number Publication Date
JP2008287723A JP2008287723A (ja) 2008-11-27
JP4907600B2 true JP4907600B2 (ja) 2012-03-28

Family

ID=39777031

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008132427A Active JP4907600B2 (ja) 2007-05-21 2008-05-20 繰り返し値を有するテーブルのブロック圧縮

Country Status (4)

Country Link
US (4) US7769729B2 (ja)
EP (1) EP1995878B1 (ja)
JP (1) JP4907600B2 (ja)
CN (1) CN101311930B (ja)

Families Citing this family (132)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9460064B2 (en) * 2006-05-18 2016-10-04 Oracle International Corporation Efficient piece-wise updates of binary encoded XML data
US20090006399A1 (en) * 2007-06-29 2009-01-01 International Business Machines Corporation Compression method for relational tables based on combined column and row coding
US7836037B2 (en) * 2007-10-04 2010-11-16 Sap Ag Selection of rows and values from indexes with updates
KR101443221B1 (ko) * 2008-01-18 2014-09-24 삼성전자주식회사 렌더링 장치 및 방법
US8108401B2 (en) * 2008-03-28 2012-01-31 International Business Machines Corporation Applying various hash methods used in conjunction with a query with a group by clause
US7885967B2 (en) * 2008-05-30 2011-02-08 Red Hat, Inc. Management of large dynamic tables
US8498824B2 (en) * 2008-06-02 2013-07-30 Intel Corporation Nucleic acid sequencing using a compacted coding technique
US8099440B2 (en) * 2008-08-15 2012-01-17 International Business Machines Corporation Method for laying out fields in a database in a hybrid of row-wise and column-wise ordering
US8135738B2 (en) * 2008-08-20 2012-03-13 International Business Machines Corporation Efficient predicate evaluation via in-list
US8370326B2 (en) * 2009-03-24 2013-02-05 International Business Machines Corporation System and method for parallel computation of frequency histograms on joined tables
US8583692B2 (en) * 2009-04-30 2013-11-12 Oracle International Corporation DDL and DML support for hybrid columnar compressed tables
US8935223B2 (en) * 2009-04-30 2015-01-13 Oracle International Corporation Structure of hierarchical compressed data structure for tabular data
US8356060B2 (en) 2009-04-30 2013-01-15 Oracle International Corporation Compression analyzer
US9667269B2 (en) 2009-04-30 2017-05-30 Oracle International Corporation Technique for compressing XML indexes
US8645337B2 (en) * 2009-04-30 2014-02-04 Oracle International Corporation Storing compression units in relational tables
US8321390B2 (en) * 2009-06-11 2012-11-27 Vivek Swarnakar Methods and apparatus for organizing data in a database
US8296517B2 (en) 2009-08-19 2012-10-23 Oracle International Corporation Database operation-aware striping technique
US8832142B2 (en) 2010-08-30 2014-09-09 Oracle International Corporation Query and exadata support for hybrid columnar compressed data
JP5487985B2 (ja) * 2010-01-14 2014-05-14 富士通株式会社 圧縮装置、方法及びプログラム、並びに展開装置、方法及びプログラム
DE102010006931A1 (de) * 2010-02-04 2011-08-04 Bienert, Jörg, 50354 Verfahren zur Verarbeitung von Datensammlungen, insbesondere in Datenbanksystemen
US20110219037A1 (en) * 2010-03-04 2011-09-08 Src, Inc. High-Performance Persistence Framework
US20110264667A1 (en) * 2010-04-27 2011-10-27 Stavros Harizopoulos Column-oriented storage in a row-oriented database management system
AU2010201705A1 (en) * 2010-04-29 2011-11-17 IFRS System Pty Limited Automatic Report Generation System And Method Therefor
US8239421B1 (en) 2010-08-30 2012-08-07 Oracle International Corporation Techniques for compression and processing optimizations by using data transformations
US9009182B2 (en) * 2010-10-05 2015-04-14 Sap Se Distributed transaction management with tokens
US8442988B2 (en) 2010-11-04 2013-05-14 International Business Machines Corporation Adaptive cell-specific dictionaries for frequency-partitioned multi-dimensional data
US9325344B2 (en) 2010-12-03 2016-04-26 International Business Machines Corporation Encoding data stored in a column-oriented manner
US10089592B2 (en) 2010-12-29 2018-10-02 Comcast Cable Communications, Llc Measuring video asset viewing
US8365212B1 (en) 2010-12-29 2013-01-29 Robert Alan Orlowski System and method for analyzing human interaction with electronic devices that access a computer system through a network
US10945011B2 (en) 2010-12-29 2021-03-09 Comcast Cable Communications, Llc Measuring video viewing
US8898351B2 (en) * 2010-12-30 2014-11-25 Emc Corporation Dynamic compression of an I/O data block
US8423522B2 (en) 2011-01-04 2013-04-16 International Business Machines Corporation Query-aware compression of join results
US8868512B2 (en) * 2011-01-14 2014-10-21 Sap Se Logging scheme for column-oriented in-memory databases
US20120197925A1 (en) * 2011-01-28 2012-08-02 International Business Machines Corporation Optimization of Database Driver Performance
CN102651007A (zh) * 2011-02-28 2012-08-29 国际商业机器公司 一种管理数据库索引的方法和装置
JP5699715B2 (ja) * 2011-03-18 2015-04-15 日本電気株式会社 データ保存装置、データ保存方法
EP2581704A1 (en) * 2011-10-14 2013-04-17 Harman Becker Automotive Systems GmbH Method for compressing navigation map data
US8838551B2 (en) * 2011-10-21 2014-09-16 International Business Machines Corporation Multi-level database compression
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
CN104040542B (zh) 2011-12-08 2017-10-10 甲骨文国际公司 用于在易失性存储器内保持关系型数据的列向量的技术
US9342314B2 (en) 2011-12-08 2016-05-17 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
US8892586B2 (en) * 2011-12-23 2014-11-18 Sap Ag Accelerated query operators for high-speed, in-memory online analytical processing queries and operations
US10645433B1 (en) 2013-08-29 2020-05-05 Comcast Cable Communications, Llc Measuring video-content viewing
US10440428B2 (en) 2013-01-13 2019-10-08 Comcast Cable Communications, Llc Measuring video-program-viewing activity
US11627356B2 (en) * 2012-01-28 2023-04-11 Comcast Cable Communications, Llc Data translation for video-viewing activity
JPWO2013137070A1 (ja) * 2012-03-13 2015-08-03 日本電気株式会社 ログ圧縮システム、ログ圧縮方法、及びプログラム
CN102646136B (zh) * 2012-04-06 2014-04-02 北京西塔网络科技股份有限公司 一种高效数据存储查询的方法及系统
US9009155B2 (en) * 2012-04-27 2015-04-14 Sap Se Parallel set aggregation
US9171020B2 (en) 2012-04-30 2015-10-27 Sap Se Deleting records in a multi-level storage architecture
US9465844B2 (en) 2012-04-30 2016-10-11 Sap Se Unified table query processing
US10162766B2 (en) 2012-04-30 2018-12-25 Sap Se Deleting records in a multi-level storage architecture without record locks
US9165010B2 (en) 2012-04-30 2015-10-20 Sap Se Logless atomic data movement
US9465829B2 (en) 2012-04-30 2016-10-11 Sap Se Partial merge
US11010415B2 (en) * 2012-04-30 2021-05-18 Sap Se Fixed string dictionary
JP5826114B2 (ja) 2012-05-25 2015-12-02 クラリオン株式会社 データ解凍装置、データ圧縮装置、データの解凍プログラム、データの圧縮プログラム、及び、圧縮データ配信システム
US8756208B2 (en) * 2012-07-10 2014-06-17 International Business Machines Corporation Encoded data processing
US8838577B2 (en) 2012-07-24 2014-09-16 International Business Machines Corporation Accelerated row decompression
GB2505898B (en) * 2012-09-13 2014-11-19 1E Ltd Data reduction
US9154157B2 (en) * 2012-09-27 2015-10-06 Intel Corporation Search unit to accelerate variable length compression/decompression
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
EP2720376A1 (en) * 2012-10-09 2014-04-16 Alcatel Lucent Secure and lossless data compression
US9646053B2 (en) * 2013-03-12 2017-05-09 Oracle International Corporation OLTP compression of wide tables
CN103347047B (zh) * 2013-06-07 2017-02-08 南京交通职业技术学院 一种基于网络字典的无损数据压缩方法
US9165050B2 (en) * 2013-07-19 2015-10-20 Sap Se Data availability during columnar table merges
US8762387B1 (en) * 2013-07-31 2014-06-24 Linkedin Corporation Inverted indexes for accelerating analytics queries
US10133800B2 (en) * 2013-09-11 2018-11-20 Microsoft Technology Licensing, Llc Processing datasets with a DBMS engine
US9606921B2 (en) 2013-09-21 2017-03-28 Oracle International Corporation Granular creation and refresh of columnar data
US9977802B2 (en) 2013-11-21 2018-05-22 Sap Se Large string access and storage
US9977801B2 (en) 2013-11-21 2018-05-22 Sap Se Paged column dictionary
US9495466B2 (en) 2013-11-27 2016-11-15 Oracle International Corporation LIDAR model with hybrid-columnar format and no indexes for spatial searches
EP3074882A4 (en) * 2013-11-28 2017-07-05 Intel Corporation Techniques for block-based indexing
US9336196B2 (en) 2013-12-06 2016-05-10 Sap Se Methods, systems, and apparatus for optimization using statistical estimation
US10235377B2 (en) 2013-12-23 2019-03-19 Sap Se Adaptive dictionary compression/decompression for column-store databases
CN103761316B (zh) * 2014-01-26 2018-02-06 北京中电普华信息技术有限公司 一种基于稀疏矩阵的数据压缩存储方法及装置
US10042902B2 (en) * 2014-01-29 2018-08-07 International Business Machines Corporation Business rules influenced quasi-cubes with higher diligence of data optimization
JP6336302B2 (ja) * 2014-03-11 2018-06-06 株式会社電通国際情報サービス 情報処理装置、情報処理方法及びプログラム
US9697221B2 (en) * 2014-03-19 2017-07-04 Oracle International Corporation OZIP compression and decompression
US9870382B2 (en) * 2014-03-25 2018-01-16 Sap Se Data encoding and corresponding data structure
CN105022739B (zh) * 2014-04-21 2019-05-21 腾讯科技(北京)有限公司 数据的存储方法及装置
US10726005B2 (en) * 2014-06-25 2020-07-28 Sap Se Virtual split dictionary for search optimization
US10210280B2 (en) 2014-10-23 2019-02-19 Sap Se In-memory database search optimization using graph community structure
US10042552B2 (en) * 2014-11-25 2018-08-07 Sap Se N-bit compressed versioned column data array for in-memory columnar stores
US10725987B2 (en) * 2014-11-25 2020-07-28 Sap Se Forced ordering of a dictionary storing row identifier values
CN104731729B (zh) * 2015-03-23 2018-07-13 华为技术有限公司 一种基于异构系统的表连接优化方法、cpu和加速器
US10248622B2 (en) * 2015-03-30 2019-04-02 Sap Se Variable virtual split dictionary for search optimization
US10073885B2 (en) 2015-05-29 2018-09-11 Oracle International Corporation Optimizer statistics and cost model for in-memory tables
US11281639B2 (en) 2015-06-23 2022-03-22 Microsoft Technology Licensing, Llc Match fix-up to remove matching documents
US10733164B2 (en) 2015-06-23 2020-08-04 Microsoft Technology Licensing, Llc Updating a bit vector search index
US11392568B2 (en) 2015-06-23 2022-07-19 Microsoft Technology Licensing, Llc Reducing matching documents for a search query
US10242071B2 (en) 2015-06-23 2019-03-26 Microsoft Technology Licensing, Llc Preliminary ranker for scoring matching documents
US20160378803A1 (en) * 2015-06-23 2016-12-29 Microsoft Technology Licensing, Llc Bit vector search index
US10339121B2 (en) * 2015-08-06 2019-07-02 Sap Se Data compression
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US10409799B2 (en) * 2015-10-19 2019-09-10 International Business Machines Corporation Supporting updatable repeated values over variable schema
US10169361B2 (en) 2015-11-16 2019-01-01 International Business Machines Corporation Columnar database compression
CN105335531B (zh) * 2015-12-14 2019-06-04 北京奇虎科技有限公司 一种文档的压缩、解压方法和装置
CN105512305B (zh) * 2015-12-14 2019-04-26 北京奇虎科技有限公司 一种基于序列化的文档压缩、文档解压方法和装置
US10019375B2 (en) 2016-03-02 2018-07-10 Toshiba Memory Corporation Cache device and semiconductor device including a tag memory storing absence, compression and write state information
US10061832B2 (en) * 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10055358B2 (en) 2016-03-18 2018-08-21 Oracle International Corporation Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US9930146B2 (en) * 2016-04-04 2018-03-27 Cisco Technology, Inc. System and method for compressing content centric networking messages
US11743332B2 (en) * 2016-04-26 2023-08-29 Umbra Technologies Ltd. Systems and methods for routing data to a parallel file system
US10432217B2 (en) * 2016-06-28 2019-10-01 International Business Machines Corporation Page filtering via compression dictionary filtering
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
CN107643906B (zh) * 2016-07-22 2021-01-05 华为技术有限公司 数据处理方法及装置
US10235100B2 (en) 2016-08-23 2019-03-19 Sap Se Optimizing column based database table compression
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
CN108513146A (zh) * 2017-02-27 2018-09-07 晨星半导体股份有限公司 收视记录处理电路与相关方法
JP7210130B2 (ja) * 2017-04-07 2023-01-23 富士通株式会社 符号化プログラム、符号化方法および符号化装置
JP7003443B2 (ja) * 2017-05-16 2022-01-20 富士通株式会社 符号化プログラム、符号化装置および符号化方法
CN107423111B (zh) * 2017-06-23 2020-06-26 浪潮云信息技术有限公司 一种Openstack环境计算节点后端存储管理方法
US11200296B2 (en) 2017-10-20 2021-12-14 Red Hat, Inc. Limited duration supply for heuristic algorithms
US11468024B2 (en) * 2018-03-27 2022-10-11 Sap Se Structural data matching using neural network encoders
US10965315B2 (en) * 2018-08-09 2021-03-30 Andrew Kamal Data compression method
US11030149B2 (en) * 2018-09-06 2021-06-08 Sap Se File format for accessing data quickly and efficiently
US11500842B2 (en) * 2018-12-14 2022-11-15 Sap Se Adaptive compression optimization for effective pruning
US10606775B1 (en) * 2018-12-28 2020-03-31 Micron Technology, Inc. Computing tile
US20200356563A1 (en) * 2019-05-08 2020-11-12 Datameer, Inc. Query performance model generation and use in a hybrid multi-cloud database environment
CN111697973B (zh) * 2019-05-16 2021-02-02 时擎智能科技(上海)有限公司 压缩方法及压缩系统
US11403367B2 (en) 2019-09-12 2022-08-02 Oracle International Corporation Techniques for solving the spherical point-in-polygon problem
US11423000B2 (en) * 2020-04-02 2022-08-23 Sap Se Data transfer and management system for in-memory database
US11558067B2 (en) * 2020-05-19 2023-01-17 Sap Se Data compression techniques
KR102598292B1 (ko) * 2021-07-23 2023-11-06 주식회사 중앙첨단소재 Json 포맷 압축 및 복원방법
US11463559B1 (en) * 2021-08-24 2022-10-04 Lyft, Inc. Compressing digital metrics for transmission across a network utilizing a graph-based compression dictionary and time slice delta compression
DE102021123997A1 (de) 2021-09-16 2023-03-16 Swedex Holding GmbH Computerimplementiertes Datenbankverfahren, System zur Datenverarbeitung, Computerprogrammprodukt und computerlesbares Speichermedium

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5592667A (en) * 1991-05-29 1997-01-07 Triada, Ltd. Method of storing compressed data for accelerated interrogation
US5523946A (en) * 1992-02-11 1996-06-04 Xerox Corporation Compact encoding of multi-lingual translation dictionaries
JPH06348569A (ja) * 1993-06-14 1994-12-22 Nec Corp データベースシステム
US5574906A (en) * 1994-10-24 1996-11-12 International Business Machines Corporation System and method for reducing storage requirement in backup subsystems utilizing segmented compression and differencing
JPH08180067A (ja) * 1994-12-26 1996-07-12 Nec Corp データベースレコード圧縮システム
US5870036A (en) * 1995-02-24 1999-02-09 International Business Machines Corporation Adaptive multiple dictionary data compression
KR19990040843A (ko) * 1997-11-20 1999-06-15 윤종용 코드분할 다중접속 디지털 이동통신 시스템의 기지국 송신출력측정 및 기지국 호 시험을 위한 전력 검출 및 시험 단말장치
JP3337633B2 (ja) * 1997-12-03 2002-10-21 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体
JP3651550B2 (ja) * 1998-02-23 2005-05-25 三菱電機株式会社 属性圧縮装置および方法
US6397308B1 (en) * 1998-12-31 2002-05-28 Emc Corporation Apparatus and method for differential backup and restoration of data in a computer storage system
US6519685B1 (en) * 1999-12-22 2003-02-11 Intel Corporation Cache states for multiprocessor cache coherency protocols
JP2002063202A (ja) * 2000-08-22 2002-02-28 Nec Corp 情報検索システムおよび方法
US6801208B2 (en) * 2000-12-27 2004-10-05 Intel Corporation System and method for cache sharing
US7024414B2 (en) * 2001-08-06 2006-04-04 Sensage, Inc. Storage of row-column data
US6687794B2 (en) * 2001-10-18 2004-02-03 International Business Machines Corporation Prefetching mechanism for data caches
US6976181B2 (en) * 2001-12-20 2005-12-13 Intel Corporation Method and apparatus for enabling a low power mode for a processor
US8868544B2 (en) * 2002-04-26 2014-10-21 Oracle International Corporation Using relational structures to create and support a cube within a relational database system
CN100390790C (zh) * 2002-05-10 2008-05-28 甲骨文国际公司 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制
US6667700B1 (en) * 2002-10-30 2003-12-23 Nbt Technology, Inc. Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation
US7290093B2 (en) * 2003-01-07 2007-10-30 Intel Corporation Cache memory to support a processor's power mode of operation
US7636720B2 (en) * 2003-05-08 2009-12-22 Microsoft Corporation Associating and using information in a metadirectory
CN101271471B (zh) * 2003-09-15 2011-08-17 起元科技有限公司 数据处理方法、软件和数据处理系统
US7383270B1 (en) * 2004-02-03 2008-06-03 Teradata Us, Inc. Compressing data stored in an intermediate or result table of a database
US7269606B2 (en) * 2004-02-26 2007-09-11 Sap Ag Automatic reduction of table memory footprint using column cardinality information
US7536506B2 (en) * 2004-06-21 2009-05-19 Dot Hill Systems Corporation RAID controller using capacitor energy source to flush volatile cache data to non-volatile memory during main power outage
US7774298B2 (en) * 2004-06-30 2010-08-10 Sap Ag Method and system for data extraction from a transaction system to an analytics system
US7533215B2 (en) * 2005-09-15 2009-05-12 Intel Corporation Distributed and packed metadata structure for disk cache
US7984241B2 (en) * 2005-09-16 2011-07-19 Hewlett-Packard Development Company, L.P. Controlling processor access to cache memory
CA2652115C (en) * 2006-05-12 2015-11-17 Goldengate Software, Inc. Apparatus and method for read consistency in a log mining system
US7707176B2 (en) * 2006-12-22 2010-04-27 Sap Ag Content management system with improved performance
US8626702B2 (en) * 2006-12-27 2014-01-07 Sap Ag Method and system for validation of data extraction

Also Published As

Publication number Publication date
US9450605B2 (en) 2016-09-20
US20100299316A1 (en) 2010-11-25
US10884987B2 (en) 2021-01-05
US20080294863A1 (en) 2008-11-27
EP1995878A2 (en) 2008-11-26
EP1995878B1 (en) 2017-03-29
US20170031944A1 (en) 2017-02-02
US20130073530A1 (en) 2013-03-21
EP1995878A3 (en) 2009-07-08
US8326810B2 (en) 2012-12-04
US7769729B2 (en) 2010-08-03
CN101311930B (zh) 2012-07-04
CN101311930A (zh) 2008-11-26
JP2008287723A (ja) 2008-11-27

Similar Documents

Publication Publication Date Title
JP4907600B2 (ja) 繰り返し値を有するテーブルのブロック圧縮
US9852169B2 (en) Compression of tables based on occurrence of values
Bassiouni Data compression in scientific and statistical databases
Wu et al. Optimizing bitmap indices with efficient compression
US8838593B2 (en) Method and system for storing, organizing and processing data in a relational database
Sinha et al. Multi-resolution bitmap indexes for scientific data
Wu Notes on design and implementation of compressed bit vectors
US20130103655A1 (en) Multi-level database compression
US20130013606A1 (en) Managing Storage of Data for Range-Based Searching
CN107852173B (zh) 对无损简化的数据执行搜索和取回的方法以及装置
TW202147787A (zh) 利用主要資料的局部性來有效率檢索已使用主要資料篩而被無損地縮減的資料
CN108475508B (zh) 音频数据和保存在块处理存储系统中的数据的简化
Liu et al. Mostly order preserving dictionaries
Dehne et al. Compressing data cube in parallel OLAP systems
Tenhunen Scientific Methods in Relational Database Compression Research
Bhuiyan et al. High Performance SQL Queries on Compressed Relational Database.
Matacic A novel index method for write optimization on out-of-core column-store databases

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111110

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111213

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150120

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4907600

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250