JP7426907B2 - 高度なデータベース圧縮解除 - Google Patents

高度なデータベース圧縮解除 Download PDF

Info

Publication number
JP7426907B2
JP7426907B2 JP2020106075A JP2020106075A JP7426907B2 JP 7426907 B2 JP7426907 B2 JP 7426907B2 JP 2020106075 A JP2020106075 A JP 2020106075A JP 2020106075 A JP2020106075 A JP 2020106075A JP 7426907 B2 JP7426907 B2 JP 7426907B2
Authority
JP
Japan
Prior art keywords
compressed
symbol
string
compression
pair
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
JP2020106075A
Other languages
English (en)
Other versions
JP2021002830A (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 JP2021002830A publication Critical patent/JP2021002830A/ja
Application granted granted Critical
Publication of JP7426907B2 publication Critical patent/JP7426907B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • 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
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/157Transformation using dictionaries or tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/3091Data deduplication
    • H03M7/3095Data deduplication using variable length segments
    • 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/3097Grammar codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Probability & Statistics with Applications (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Mathematical Physics (AREA)

Description

関連出願の相互参照
本出願は、2019年6月21日に出願したLaschらの米国仮特許出願第62/864,782号、名称「Advanced Database Compression On Modern Hardware」の優先権を主張するものであり、その開示全体を参照により本明細書に組み込む。
本開示は、一般的に、データ処理に関し、詳細には、データベース圧縮および圧縮解除に関する。
データベースでは、領域符号化は、圧縮およびクエリの加速のためのカラムストアにおいて広く使用されている技法である。これは、列内の値を一意の整数値識別子で置き換える。識別子から実際の値に戻すマッピングは、追加のデータ構造体、すなわち辞書に格納される。これは、領域符号化を使用する列の表現は2つのデータ構造体、すなわち、辞書および値識別子の配列を必要とすることを意味している。辞書は、明確に異なる値を列内に格納し、一意の識別子から値へのマッピングを提供する。値識別子の配列は、辞書へのインデックスとして働く。これは、インデックスベクトルとも呼ばれる。
列内に複数回出現する値は、辞書に1回だけ格納される。これは、列内に数回出現するごくわずかの明確に異なる値を含む列がこのアプローチによって著しく圧縮されることを意味している。これは、値を置き換えるために使用される値識別子が実際の値よりも著しく小さい場合が多いからである。領域符号化は、値を値識別子で置き換えることによって、領域符号化を行わずに値自体に対して実行される一部の操作を値識別子に対して直接実行することもできるので、性能をやはり向上させることができる。
文字列を格納する列については、領域符号化に使用される辞書は文字列辞書である。文字列辞書は、文字列の集合Xから一意の整数識別子への文字列の全単射マッピングを実現するデータ構造体である。文字列辞書の場合、圧縮を達成する最も単純な方法の1つは、辞書内の文字列を辞書式順序でソートし、次いで、フロントコーディング(front coding)を適用することであり、これは、各文字列をその先行文字列(predecessor)と比較する(すなわち、(ブロックの)先頭の文字列は完全に格納され、後続の文字列は、先行文字列と共有されるプレフィックスと、非圧縮サフィックスとの長さを格納する)。フロントコーディングは、典型的には、文字列の固定サイズバケットに適用される。
いくつかの実装形態において、本発明の主題は、データの圧縮解除を実行するためのコンピュータ実装方法に関する。この方法は、格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを、格納されている圧縮ブロックの集合内のデータにアクセスする要求に応答して識別することと、フロントコーディングを使用して識別された圧縮ブロック内の文字列プレフィックスを圧縮解除することと、Re-Pair圧縮解除を使用して識別された圧縮ブロック内の文字列サフィックスを圧縮解除することと、非圧縮データを生成することとを含み得る。
いくつかの実装形態において、本発明の主題は、以下の任意選択の特徴のうちの1つまたは複数を含み得る。いくつかの実装形態において、Re-Pair圧縮解除は、識別された圧縮ブロック内に格納されているデータに対応する記号ツリー内の各記号(symbol)を繰り返し展開することを含み得る。記号ツリーは、複数のノードを備え得る。圧縮ブロックは、辞書内の文字列の1つまたは複数のフロントコーディングされたバケットから生成され得る。フロントコーディングされたバケットは、1つまたは複数のスーパーブロックを形成するためにサンプリングされるように構成され得る。スーパーブロックの各々は、圧縮ブロックの圧縮のための共有文法を生成するために圧縮されるように構成され得る。複数のノードは、終端文字、非終端文字、およびこれらの任意の組合せのうちの少なくとも1つを含み得る。いくつかの実装形態において、この方法は、複数のRe-Pair圧縮解除を並列に実行することをさらに含み得る。終端文字の数は、所定の数に制限されてよい。さらに、各記号の繰り返し展開の回数は、所定の数に基づき決定され得る。
いくつかの実装形態において、Re-Pair圧縮解除は、記号ツリー内の各記号に対応するメモリ内のスタック位置を初期化することと、ベクトル化されたRe-Pair展開を使用して、記号ツリー内の各記号をストレージからメモリ内に同時にロードすることと、ロードされた記号と関連付けられている1つまたは複数の述語を評価することによって、その記号を非圧縮データへと組み合わせることと、所定の数を使用して、同時ロードすることと組み合わせることとを繰り返すこととを含み得る。
いくつかの実装形態において、圧縮ブロックの集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含み得る。ブロックサイズは、固定サイズおよび可変サイズの少なくとも一方であってよい。さらに、圧縮ブロックは、Re-Pair圧縮を使用して圧縮され得る。
いくつかの実装形態において、本発明の主題は、データベース圧縮を実行するためのコンピュータ実装方法に関する。この方法は、データセットから、ブロックサイズおよびフロントコーディングバケットサイズを有する圧縮文字列辞書を生成することと、フロントコーディングをフロントコーディングバケットサイズを有する辞書内の文字列の1つまたは複数のバケットに適用して文字列の1つまたは複数のフロントコーディングされたバケットを生成することと、文字列の生成されたフロントコーディングされたバケットの1つまたは複数の部分を連結してブロックサイズを有する1つまたは複数のブロックを形成することと、1つまたは複数のブロックの各々を圧縮することと、1つまたは複数の圧縮ブロックの集合を格納することであって、圧縮ブロックの集合はすべての文字列をデータセットに格納する、格納することとを含み得る。
いくつかの実装形態において、本発明の主題は、以下の任意選択の特徴のうちの1つまたは複数を含み得る。いくつかの実装形態において、圧縮ブロックの集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含み得る。
いくつかの実装形態において、この方法は、文字列の複数のフロントコーディングされたバケット内の文字列のバケットの間に終端文字を挿入することも含み得る。終端文字は、圧縮されない場合もある。
いくつかの実装形態において、各文字列は、文字列終端文字を含むものとしてよく、各文字列終端文字は圧縮される。
いくつかの代替的実装形態において、各文字列の長さは、文字列とともに格納され圧縮され得る。
いくつかの実装形態において、ブロックサイズは、固定サイズおよび可変サイズの少なくとも一方であってよい。
いくつかの実装形態において、圧縮は、複数のバケット内の各フロントコーディングされたバケットの圧縮を独立して並列実行することを含み得る。
いくつかの実装形態において、1つまたは複数のフロントコーディングされたバケットは、1つまたは複数のスーパーブロックからサンプリングされるように構成され得る。各スーパーブロックは、ブロックの圧縮のための共有文法を生成するためにその後圧縮されるように構成され得る。たとえば、共有文法は、ブロックの加速圧縮を実行するために使用され得る。
いくつかの実装形態において、ブロックの圧縮は、Re-Pair圧縮を含み得る。
いくつかの実装形態において、この方法は、格納されている圧縮ブロックの集合内のデータにアクセスする要求を受け取ることと、受け取った要求に応答して格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを識別することと、識別された圧縮ブロックを少なくとも部分的に圧縮解除して非圧縮データを生成することとをさらに含み得る。圧縮解除は、フロントコーディングを使用して識別された圧縮ブロック内の文字列プレフィックスおよびサフィックスを圧縮解除することと、Re-Pair圧縮解除を使用して識別された圧縮ブロック内の文字列サフィックスを圧縮解除することとを含み得る。さらに、Re-Pair圧縮解除は、識別された圧縮ブロック内に格納されているデータに対応する記号ツリー内の各記号を繰り返し展開することを含み得る。
命令を格納する非一時的コンピュータプログラム製品(すなわち、物理的に具現化されたコンピュータプログラム製品)も説明され、命令は、1つまたは複数のコンピューティングシステムの1つまたは複数のデータプロセッサによって実行されたときに、少なくとも1つのデータプロセッサに本明細書の動作を実行させる。同様に、1つまたは複数のデータプロセッサと1つまたは複数のデータプロセッサに結合されているメモリとを備え得るコンピュータシステムも説明されている。メモリは、少なくとも1つのプロセッサに本明細書において説明されている動作のうちの1つまたは複数を実行させる命令を一時的にまたは永久的に格納し得る。それに加えて、方法は、単一のコンピューティングシステム内にあるか、または2つもしくはそれ以上のコンピューティングシステムの間に分散されているかのいずれかの1つもしくは複数のデータプロセッサによって実装され得る。そのようなコンピューティングシステムは、限定はしないが、ネットワーク上の接続(たとえば、インターネット、ワイヤレスワイドエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、有線ネットワーク、または同様のもの)を含む1つまたは複数の接続を介して、複数のコンピューティングシステムのうちの1つまたは複数の間の直接接続を介して、などにより、接続され、データおよび/またはコマンドまたは他の命令または同様のものを交換することができる。
本明細書で説明されている主題の1つまたは複数のバリエーションの詳細は、添付図面および以下の説明で述べられる。本明細書で説明されている主題の他の特徴および利点は、説明および図面、さらに請求項から明白になるであろう。
本明細書に組み込まれ、本明細書の一部を成す、添付図面は、本明細書において開示されている主題のいくつかの態様を示し、この説明とともに、開示されている実装形態に関連付けられている原理のうちのいくつかを説明するのに役立つ。以下に図の説明を示す。
例示的なプレーンフロントコーディング圧縮(plain front coding compression)方法を示す図である。 本発明の主題のいくつかの実装形態による、辞書圧縮を実行するための例示的なシステムを示す図である。 本発明の主題のいくつかの実装形態による、図2aに示されている辞書圧縮を実行するための例示的なシステムのさらなる詳細を示す図である。 本発明の主題のいくつかの実装形態による、例示的な実験データセットを示す図である。 本発明の主題のいくつかの実装形態による、例示的な実験測定圧縮時間を示す図である。 本発明の主題のいくつかの実装形態による、辞書データ圧縮を実行するための例示的なプロセスを示す図である。 本発明の主題のいくつかの実装形態による、辞書/文字列圧縮プロセスの代替的実装形態を示す図である。 例示的なextract関数を示す図である。 locate関数の例示的な実装形態を示す図である。 Re-Pairで圧縮されたテキストを圧縮解除するためにすべての記号について実行される操作である、非終端を再帰的に展開するための例示的なプロセスを示す図である。 本発明の主題のいくつかの実装形態による、圧縮解除および/またはデータのアクセスを実行するための例示的なシステムを示す図である。 例示的なExpandSymbol関数を示す図である。 本発明の主題のいくつかの実装形態による、ExpandSymbolアルゴリズムの例示的な反復バージョンを示す図である。 本発明の主題のいくつかの実装形態による、図11aに示されているアルゴリズムを実行するために使用され得る例示的なコードを示す図である。 本発明の主題のいくつかの実装形態による、データストレージアプリケーションを含む例示的なシステムを示す図である。 図12のシステムの詳細を示す図である。 本発明の主題のいくつかの実装形態による、例示的なシステムの図である。 本発明の主題のいくつかの実装形態による、例示的な方法の図である。 本発明の主題のいくつかの実装形態による、例示的な方法の図である。
現在利用可能なソリューションのこれらおよび潜在的にほかにもある欠陥(たとえば、フロントコーディングの圧縮率が低いこと、他の圧縮方式に対する圧縮時間および抽出時間が長いこと、など)に対処するために、本発明の主題の1つまたは複数の実装形態は、可能な利点がほかにもあるがとりわけ、データベース圧縮さらには圧縮解除および圧縮データへのアクセスを実行する機能を提供することができる方法、システム、製造品、および同様のものに関する。
データ圧縮
いくつかの実装形態において、本発明の主題は、データベース圧縮に関する。データベース圧縮は、データセット内で、ブロックサイズおよびフロントコーディングバケットサイズを有する圧縮文字列辞書を生成することによって遂行され得る。フロントコーディングがブロックサイズとフロントコーディングバケットサイズの組合せを有する辞書内の各文字列に適用され、文字列の複数のフロントコーディングされたバケットを生成し得る。文字列のこれら複数のフロントコーディングされたバケットは、連結され得る。終端文字が文字列の複数のフロントコーディングされたバケット内の文字列のバケットの間に挿入され得る。文字列のこれら複数のフロントコーディングされたバケットは、圧縮され得る。圧縮されたフロントコーディングされたバケットに基づき、辞書内の各文字列に対応する圧縮ブロックの集合が生成され、格納され得る。いくつかの実装形態において、圧縮ブロックの集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含み得る。終端文字は、圧縮されない場合もある。いくつかの実装形態において、各文字列は、文字列終端文字を含むものとしてよく、各文字列終端文字は圧縮される。
インメモリデータベースマネジメントシステム(IMDBMS)が採用され、多くの領域において使用されており、今もなお広く使用され続けている。IMDBMSは、典型的には、メインメモリ内にワーキングセット全体を保持することを円滑にするためデータ圧縮を利用する。それでも、そのようなシステムは、数テラバイトのメモリフットプリントを有するのが普通である。特に、ただし、排他的ではないが、クラウドシナリオでは、メインメモリのコストは総所有コスト(TCO)に占める最大要素の1つである。したがって、IMDBMSのメモリフットプリントを低減することがTCOを低減するための手段として非常に望ましい。
現実世界のIMDBMSシステムを調査すると、文字列辞書が最大の単一のメモリ消費者であることがわかる。したがって、その圧縮がシステムのメモリフットプリント全体に著しい影響を及ぼす。文字列辞書を高い圧縮率で圧縮する技法は多数存在するが、実際には、IMDBMSでは、それでも、圧縮がかなり高速であり、またもっと重要なことに、アクセス動作が重量級の方法に比べて数倍速い軽量級の方法に頼っている。関係する作業では、アルゴリズムの改善および新規の方法を通じてこの格差を縮めることに主眼を置いているが、既存の方法を改善するために最新のハードウェアの進歩を利用することはほとんど探査されないままである。
いくつかの実装形態において、本発明の主題は、文字列辞書圧縮プロセスを最適化することによってデータベース圧縮を実行するためのコンピュータ実装方法に関する。本発明の主題の方法は、圧縮率を大きく犠牲にすることなく既存プロセスのうちのいくつかに比べて最大24倍高速な実用的圧縮時間に到達し得るブロックベースRe-Pair圧縮アルゴリズムを含み得る。
辞書圧縮は、必要メモリ量を減らすためにデータベースにおいて人気のある方法である。辞書は、列(の集合)の領域の値を値識別子(ID)にマッピングする。レコードにおいて、これらの値は-特に文字列に対して-領域節約となり得る、また辞書符号化値上の効率的処理を可能にする対応する値IDによって置き換えられる。次いで、文字列辞書は2つのアクセス操作を提供する、すなわち、1)値ID idを与えられた場合に、extract(id)は辞書内の対応する文字列を返し、2)文字列strが与えられた場合に、locate(str)は、strが辞書内にある場合にstrの一意の値ID、またはそうでなければstrより大きい最小の文字列の値IDを返す。
文字列辞書の圧縮を実行する既存の方法はいくつかある。これらは、フロントコーディング、Huffman-Tucker符号化、N-Gram圧縮、およびRe-Pair圧縮を含む。プレーンフロントコーディング(PFC)は、格納されている文字列辞書を圧縮するための軽量の方法である。文字列は、例示的なPFC圧縮方法100を例示している、図1の第2の行によって示されているように、辞書内の先行文字列を有する共通プレフィックスおよび残りのサフィックスの長さによって表される。図1に示されているように、各ボックスは辞書内の1つの文字列の表現である。フロントコーディングされた表現では、最後の2つの文字列が圧縮される。最初の1つは、先行文字列を有しないので、圧縮されない。PFCは固定サイズのバケット上で動作する。いくつかの例示的な実装形態において、バケットサイズは文字列16個分であるものとしてよい。各バケットの最初の文字列(バケットヘッダ)は、非圧縮で格納される。これは、文字列辞書へのランダムアクセスを円滑にする。バケットがない場合、各アクセスは、辞書内のすべての先行する文字列を復号することを必要とするであろう。バケットがある場合、文字列は、望む文字列が含まれるバケットの先頭から始めて復号されるだけでよい。
Re-Pair圧縮方法は、文法ベースの圧縮方法である。これは、入力テキストTから文法を繰り返し取得し、テキストを記号の圧縮されたシーケンスに変換する。各繰り返しにおいて、最初にT内の記号の最も頻繁に現れる対abを見つける。同じ頻度を有する複数の対が存在する場合、1つの候補がランダムに選択される。次いで、これは、規則R→abを文法に追加するが、RはT内に、または文法内に以前に出現していない非終端記号であり、aおよびbは任意の記号(終端または非終端)であってよい。次いで、これは、T内のabのすべての出現をRで置き換える。この繰り返しは、T内に複数回出現する記号の対が残されていないときに打ち切られる。
PFC (Re-Pairフロントコーディング(RPFC))方法の上のRe-Pairは、圧縮に対するさらなる代替的手段を提供する。図1を再び参照すると、第3の行はRe-PairがPFCの上にどのように適用されるかを示している。RPFCは、Re-Pairを辞書内のすべてのフロントコーディングされたバケットの上に適用するが、バケットヘッダは非圧縮のまま残される。辞書全体に対して1つの文法が作成される。図1に示されているように、この文法は2分木の集合として視覚化されるものとしてよく、内側ノードは非終端であり、リーフノードは終端である。
しかしながら、RPFC圧縮のためのRe-Pair圧縮アルゴリズムを含む、既存の圧縮方法には、大きな文字列辞書の圧縮を実行するときに様々な欠点がある。特にRPFCについては、必要な圧縮時間は、軽量の圧縮方法と比較して非常に長い。さらに、圧縮時間は、入力データサイズが大きくなるにつれ超線形で増大し、これは異なるサイズのデータセットを圧縮するときに観察され得る。このため、非圧縮文字列辞書が数100メガバイトを超えたとたんにRPFCに対する必要な圧縮時間がたちまち実際的でなくなってしまう。第2に、アルゴリズムのメモリ消費量が入力テキストサイズの数倍にもなる。
これらの問題に対処するために、いくつかの実装形態において、本発明の主題は、Re-Pair方法を使用して圧縮されるべきテキストTのサイズを縮小することによって実行され得るブロックRe-Pairフロントコーディング(BRPFC)方法を提供する。特に、Tのサイズを縮小するために、辞書は、各ブロック上でRe-Pair圧縮を個別に適用する前に固定数のフロントコーディングされたバケットを含むブロックに分割され得る。
ブロックサイズがB、フロントコーディングバケットサイズがbであるBRPFC圧縮文字列辞書は次のように構成され得る。辞書式順序でソートされた辞書内の各B・b文字列について、フロントコーディングが最初に適用され得る。この結果、文字列のB個のフロントコーディングされたバケットが得られる。次いで、これらのバケットは連結され、バケットヘッダを省くものとしてよい。終端文字tがバケットの各々の間に挿入され得る。バケットの内側のフロントコーディングされた文字列を打ち切るために異なる終端文字uが使用され得る。次に、連結されたバケットは、Re-Pairを使用して圧縮され得る。Re-Pairアルゴリズムは、終端文字tを無視してもよいが、文字列を打ち切るために使用される終端文字uを圧縮し得る。したがって、バケット境界は、Re-Pair圧縮の後の整数個の記号のところであってよいが、文字列境界は必ずしもそうでない。Re-Pair圧縮の後、圧縮されたシーケンスは、各フロントコーディングされたバケットに対応し得るサブシーケンスに分割され得る。これらは、それぞれのバケットヘッダと再合併され、最終的に連結されて連続シーケンスにされ得る。各バケットの先頭へのオフセットは別個の配列内に格納されてよく、Re-Pairによって生成される文法は各ブロックの一部としても格納され得る。このプロセスの結果、辞書内の文字列の数がB・bの倍数でない場合により少ない文字列を場合によって含み得る、最後のブロックを除く、各々がB・b文字列を格納する、圧縮ブロックの集合が得られる。各ブロックは、バケットヘッダおよび圧縮バケットのシーケンス、バケットヘッダへのオフセット配列を含み得る。
図2a~図2bは、本発明の主題のいくつかの実装形態による、辞書圧縮を実行するための例示的なシステム200を示している。システム200は、永続層206に通信可能に結合されているデータストレージアプリケーション204を備え得る。データストレージアプリケーション204は、本明細書で説明されているように(図2aに示されているように)、辞書圧縮を実行するためのコンピューティングコンポーネント214~220を備えるように構成され得る。特に、データストレージアプリケーション204が非圧縮辞書202のデータを受信した(図2bに示されている状態230)後、コンピューティングコンポーネント214は1つまたは複数の論理ブロックを生成するように構成され得る。生成された論理ブロックを使用して、コンピューティングコンポーネント216は、フロントコーディングを適用して、固定された数のフロントコーディングされたバケット232を生成するように構成され得る(図2bに示されているように)。フロントコーディングされたバケットは、Re-Pair圧縮のためにブロックを準備するためにコンピューティングコンポーネント218によって使用され得る。特に、上で述べたように、フロントコーディングされたバケットは連結されるものとしてよく、バケットヘッダは省かれ得る。終端文字tがバケットの間に挿入され得る。バケットの内側のフロントコーディングされた文字列を打ち切るために異なる終端文字uが使用され得る。次いで、連結された準備されたブロックは、Re-Pairアルゴリズムを使用してブロック毎の圧縮を適用して1つまたは複数の圧縮ブロック236を生成するためにコンポーネント220によって使用され得る(圧縮状態240において、図2bに示されているように)。
上で述べたように、Re-Pairアルゴリズムは、終端文字tを無視するものとしてよく、終端文字uを圧縮し得る。Re-Pair圧縮の後に、圧縮されたシーケンスは、各フロントコーディングされたバケットに対応するサブシーケンスに分割され得、これはそれぞれのバケットヘッダと再合併され、最終的に連結された連続シーケンスにされ得る。各バケットの先頭へのオフセットは別個の配列内に格納されてよく、Re-Pairによって生成される文法は各ブロックの一部としても格納され得る。このプロセスの結果、辞書内の文字列の数がB・bの倍数でない場合により少ない文字列を場合によって含み得る、最後のブロックを除く、各々がB・b文字列を格納する、圧縮ブロック236の集合が得られる。次いで、圧縮された辞書は、格納しておくため永続層206に伝送され得る。
図3~図4は、辞書データセットの圧縮時間の様々な実験測定結果を例示している。特に、図3は、例示的な実験データセット300を示している。たとえば、図3に示されているように、Stringsは、データセット内の明確に異なる文字列の数を指すものとしてよく、Sizeは、終端文字を含む、バイト数単位のすべての文字列の総サイズを指すものとしてよく、Aver.Sizeは、データセット内の単一の文字列の平均サイズを指すものとしてよい。これらのデータセットは、自然言語(ENWIKI)、名前(GEONAMES)、および機械可読データ(INDOCHINA, UK)などの、文字列の列に対する普通のユースケースをカバーするように選択され得る。これらは、また、短い平均文字列サイズ(GEONAMES, ENWIKI)から長い平均文字列サイズ(INDOCHINA, UK)までの範囲内にある。
図4は、例示的な実験測定圧縮時間400を示している。各列は、図4に示されているように、4つの評価されたデータセット(図3に示されている)のうちの1つに対する圧縮比を示している。各行は、異なる圧縮方法に対応している。BRPCF8 16bps方法について、ブロック当たり128から128Kのフロントコーディングされたバケットの範囲内の異なるブロックサイズBが評価されている。圧縮時間の結果と組み合わせて、圧縮時間と圧縮比との間の最良のトレードオフを有するブロックサイズが決定された。
図4に示されているように、方法RPFC8 16bpsの圧縮時間はRPFCのと比べて短い。これは、記号の数がRPFC8 16bpsにおけるその16ビット表現によって制限され、それによって、アルゴリズムによって行われる繰り返し回数を減らすからである。さらに、方法BRPFC8 16bpsの圧縮は、より小さいブロックサイズでRPFCのと比べて著しく高速であり、BRPFCがB=32KでRPFCより遅くなるGeonamesデータセットを除き、より大きいブロックサイズであっても高速である。BRPFC8 16bpsの圧縮時間は、ブロックサイズが大きくなるにつれゆっくり長くなる。しかしながら、圧縮時間は、UK, ENWIKI、およびGEONAMESに対するB=4KとB=8Kとの間で、およびINDOCHINAに対するB=8KとB=16Kとの間で劇的に伸びる。これは、これらのブロックサイズでは、pRe-PairアルゴリズムのワーキングデータセットはCPUキャッシュより大きくなり、それによって実行時間を著しく伸ばすからである。
図5は、本発明の主題のいくつかの実装形態による、辞書データ圧縮を実行するための例示的なプロセス500を示している。プロセス500は、図2に示されている辞書データ圧縮システム200によって実行され得る。502において、データストレージアプリケーション204(図2に示されているような)は、ブロックサイズおよびフロントコーディングバケットサイズを有する圧縮文字列辞書を生成するように構成され得る。504において、アプリケーション204は、フロントコーディングを辞書内の各文字列に適用するように構成されてよく、文字列はフロントコーディングバケットサイズを有する。その結果として、アプリケーションは、文字列の複数のフロントコーディングされたバケットを生成するように構成され得る。その後、506において、文字列のフロントコーディングされたバケットの1つまたは複数の部分が連結され、所定のブロックサイズを有するブロックを形成し得る。いくつかの例示的な実装形態において、終端文字は、文字列のバケットの間に挿入され得る。次いで、アプリケーション204は、508において、各ブロックを圧縮し、それによって、510において、辞書内の各文字列に対応する圧縮ブロックの集合を生成し得る。次いで、アプリケーション204は、圧縮ブロックを永続層206内に格納し得る。
図6は、本発明の主題のいくつかの実装形態による、辞書/文字列圧縮プロセス600の代替的実装形態を示している。プロセス600は、図2a~図2bに示されているプロセスに類似しているものとしてよい。図6に示されている圧縮プロセス600は、サンプリングされたブロックベースのRe-Pair圧縮と称され得る。プロセス600は、ブロックの文法規則内の重複を排除することによって図2a~図2bに示されているプロセスを変更するように構成されるものとしてよく、これは圧縮品質を改善し得る。辞書全体に対して完全なRe-Pair圧縮を実行する必要はなく、それのより小さい一部にのみ実行すればよいので、圧縮は高速化され得る。
図6に示されているように、プロセス600は、非圧縮辞書文字列から作成された論理ブロックにフロントコーディング216を適用することでフロントコーディングされたバケット232を作成することによって、図2a~図2bに示されているプロセス(非圧縮状態230で)と類似の仕方で開始し得る。次いで、プロセス600は、フロントコーディング段階の後の単一のRe-Pair文法610を生成するように構成され得る。次いで、その文法は、辞書のすべてのブロックを圧縮するために使用され得る。文法は、602において、選択された数のフロントコーディングされたバケット232をサンプリングすることによって生成され、それにより、スーパーブロック604を形成し得る。スーパーブロック604は、所定のターゲットサイズに達する1つまたは複数のフロントコーディングされたバケットを含み得る。ターゲットサイズは、その結果得られる文法を最適化するように決定され得る。スーパーブロック604に含めることを目的とするフロントコーディングされたバケット232の選択および/またはサンプリング(たとえば、置換なしのサンプリング、結果としてサンプリングされた文字列の均一な分布をもたらすvan de Corputシーケンス、および/または任意の他のサンプリング方法)は、ターゲットサイズに達したときに打ち切られる。次いで、スーパーブロックは、Re-Pairアルゴリズム608を使用して圧縮されるものとしてよく、その結果得られる文法610は、共有文法として使用され得る(破線の矢印で示されているように)。
次いで、再圧縮606が辞書のブロック234に適用され得る。その入力は、共有文法および非圧縮ブロックであってよい。再圧縮606は、1つまたは複数の圧縮ブロック612を生成し得る。再圧縮のために、共有文法からのすべての展開規則を含むツリーが生成されるものとしてよく、展開規則に対応するツリーノードは、規則の非終端記号でタグ付けされ得る。次いで、各ブロックは、共有文法のその表現を使用して圧縮され得る。ブロックのテキストの各位置で、ツリーは、テキストからの記号を使用してトラバースされ得る。その結果、テキスト内の現在位置で文字列と一致するいくつかの規則展開が見つけられ得る。最長のものが選択されてよく、テキスト内のそのセグメントは規則の非終端で置き換えられ得る。このプロセスは、テキスト内の置換されたセグメントの後の次の位置で繰り返され、テキスト全体が圧縮されてしまうまで続く。展開された規則内に一致が見つからなかった場合、再圧縮アルゴリズムはテキスト内の次の位置まで続き得る。
圧縮解除および圧縮データへのアクセス
いくつかの実装形態において、本発明の主題は、圧縮解除および/または圧縮データへのアクセスを実行するように構成され得る。特に、本発明の主題は、RPFC、BRPFC、およびサンプリングされたBRPFCの圧縮文字列辞書に対する圧縮データアクセス時間、特にextractおよびlocate関数の時間を加速するように構成され得る。アクセス時間を改善するために、extract操作およびlocate操作の異なる部分が実装され得る。
図7aは、値識別子idを含む文字列を事前割当出力バッファoutputBuffer内に抽出し、要求された文字列が辞書内に存在している場合に、抽出された文字列の長さを返すように構成され得る例示的なextract関数700を示している。そうでなければ、-1が返され、要求された値識別子が無効であることを示す。有効な識別子は、範囲[1;E]内にあり、Eは辞書内の文字列の個数である。要求された識別子が有効である場合、要求された文字列が置かれるバケットおよびそのバケット内の文字列の位置が最初に決定される。
要求された文字列が置かれているバケットが決定された後、そのバケットのヘッダはGetBucketHeader関数を使用して出力バッファにコピーされる。この関数は、bucketIdで参照されるバケットのゼロ終端バケットヘッダを出力バッファoutputBufferにコピーし、コピーされた文字列の長さを、その第3のパラメータ、lengthにより報告する。最後に、この関数は、圧縮辞書内のバケットヘッドの直後にある、圧縮バケットへのポインタを返す。extract内の要求された文字列がバケットヘッダである、すなわち、位置が0に等しい場合、バケットヘッダの長さは、出力バッファが要求された文字列をすでに格納しているので直接返され得る。
そうでない場合、バケットの残り部分は、要求された文字列の位置に到達するまで部分的に圧縮解除される。この圧縮解除は、Re-Pair圧縮解除、さらにはRe-Pair圧縮解除後のフロントコーディングされた文字列を復号することを伴う。このプロセスは、インタリーブ方式で行われる。1つまたは2つのRe-Pair記号が一度に展開され、次いで、アルゴリズムは、展開されたRe-Pair記号の出力で行われ得るのと同じだけフロントコーディングされた文字列を復号することを続ける。文字列は、事前割当出力バッファに直接復号される。バケット内の要求された文字列の位置に到達し、その文字列が復号された後、復号された文字列の長さが返され得る。このようにして、要求された文字列を抽出するのに必要なバケットの部分のみが圧縮解除され、復号され、バケットの残り部分がそのまま残され、バケット全体の不要な圧縮解除を回避する。もちろん、要求された文字列がバケット内の最後の文字列である場合、その文字列を抽出するためにバケット全体が圧縮解除されなければならない。
図7aに示されているように、ヘッダなしで圧縮バケットを含むバッファは、変数bucketによって指し示され、単一の文字列の圧縮解除は、関数DecodeStringで実装され、これは要求された文字列が復号されるまで行10においてextract関数によって繰り返し呼ばれる。DecodeString関数は、前に復号された文字列をすでに格納している出力バッファ、およびヘッダの後に圧縮バケットを格納している、バケットバッファで呼び出される。lengthパラメータは、DecodeString関数によって、復号された文字列の長さに割り当てられ、offsetパラメータは、圧縮バケットのビットがいくつすでに復号されているかを記録するために使用される。
図7bは、locate関数710の例示的な実装形態を示している。この関数は入力として文字列stringを取り、stringが辞書内に格納されていない場合に0を返すか、または格納されている場合に有効な値識別子を返すかのいずれかを行う。この関数は、圧縮辞書内のバケットのヘッダに対して二分探索を最初に実行することによって実行される。この二分探索は、LocateBucket関数で実装される。二分探索が探索される文字列が入っている可能性のある潜在的バケットを決定した場合、このバケットはスキャンされる。スキャンで、バケット内の求められている文字列を見つけた場合、その値識別子が返されるものとしてよく、そうでない場合、操作の結果、その文字列は辞書内にないということになる。これは、また、二分探索で潜在的バケットが見つからない場合でもある。これらの場合には、無効値識別子0が返され、辞書からの探索された文字列がないことを示す。
LocateBucket関数は、また、探索された文字列が二分探索で返されたバケットのヘッダとして識別された場合に、ヘッダBooleanフラグを真に設定する。この場合、バケットの追加のスキャンは行われなくてよい。二分探索で識別されたバケットをスキャンすることは、上で説明されているextract操作と同様に実装される。バケット内の文字列は、DecodeString関数を使用してバッファoutputBuffer内に順次圧縮解除される。次いで、圧縮解除された文字列は、一致が見つかるか、またはブロックの終わりに到達してしまうかのいずれかまで探索された文字列と比較される。
図8は、Re-Pairで圧縮されたテキストを圧縮解除するためにすべての記号について実行される操作である、非終端を再帰的に展開するための例示的なプロセス800を示す図である。プロセス800は、フロントコーディングの上に適用されるRe-Pair圧縮を圧縮解除することを目的としてRPFC extractおよびlocate実装形態で使用されるExpandNonTerminal関数を含む。その引数は、展開されるべき非終端nonTerminal、ビットパック文法配列grammar、および事前割当出力バッファoutputBufferであり、そこに展開された文字が格納される。この関数は、それが展開した文字の数を返す。
非終端を展開するために、マッピング先の2つの記号がGetField関数を使用して文法配列から最初に抽出される。このステップの後に、非終端のマッピング先である左記号が最初に再帰的に展開され、その後、右記号に対して同じ操作が加えられる。しかしながら、左および右の両方の記号について、それらの記号がすでに終端であるかどうかが最初にチェックされ、その場合、追加の展開は実行されなくてよく、記号は出力バッファに書き込まれ得る。これは、再帰の終了の場合である。記号は、その記号が終端の個数nより小さい場合に終端である。これは、終端が範囲[0; n)内の整数記号として符号化され、非終端が、Nを非終端の個数として、範囲[n;n+N]内の整数記号として符号化されるからである。非終端記号の整数値はnから始まるが、文法配列は、0から始まるインデックスを付けられるので、nは、文法配列内でルックアップを実行するために使用される前に非終端記号から差し引かれなければならない。図8に示されているように、これは、行8および行14においてExpandNonTerminalが再帰的に呼び出されるときに生じる。展開された文字の総数は、展開変数内に記録され、最終的に、関数の結果として返される。
いくつかの場合において、extract関数は、要求された文字列が置かれている辞書内でバケットを最初に決定することによってRe-Pair圧縮辞書に対して実装され得る。次いで、この実装形態はそのバケットのヘッダを受け取り、その後、要求された文字列の位置に到達するまでバケット内の文字列を復号し得る。同様に、locate関数の実装形態は、探索された文字列が置かれている可能性のある候補バケットを決定し、次いで、文字列が見つかるか、またはバケットの終わりに到達するまでこのバケットをスキャンし得る。しかしながら、両方の関数について、バケット内の文字列を圧縮解除することは、操作全体のCPU時間の大半を占める。より正確には、辞書のバケット内の文字列を復号することは、Re-Pair記号を非終端のシーケンスに最初に展開することと、次いで圧縮されたシーケンス内のフロントコーディングされた表現から完全な文字列を復号することとを伴う。
図9は、本発明の主題のいくつかの実装形態による、圧縮解除および/またはデータのアクセスを実行するための例示的なシステム900を示している。システム900は、図2aに示されているものと似たコンポーネントを備え得る。特に、システム900は、永続層206に通信可能に結合されているデータストレージアプリケーション204を備え得る。システム900は、特定のデータを抽出する(たとえば、Extract(vid))クエリ(呼び出し、要求など)902を受け取るように構成され得る。データストレージアプリケーション204は、受け取った要求902に対応しているものとしてよい特定の論理ブロックを確認するように構成され得る論理ブロック決定コンポーネント914を備え得る。
受け取った要求に応答してデータは、932において、コンポーネント916によって実行され得る圧縮解除を目的として永続層206から取得される。この圧縮解除は、922において、フロントコーディングを使用してプレフィックスを圧縮解除することによって実行されてよく、その後、924において、Re-Pairアルゴリズムを使用してサフィックスの圧縮解除が行われ得る。
いくつかの実装形態において、Re-Pair圧縮解除を実行するために、本発明の主題は、extractおよびlocate操作でRe-Pair記号展開を実行するために使用される、上で説明されている、ExpandNonTerminal関数を、ExpandSymbol関数と置き換えるように構成され得る。ExpandSymbol関数は、非終端インデックスの代わりに記号を受け付けるように構成され得る。例示的なExpandSymbol関数1000が図10に示されており、Nおよびnは、それぞれ、非終端および終端の数を表し得る。アルゴリズム1000は、Re-Pairルックアップのベクトル化を可能にするようにさらに構成され得る。これの必要な前提条件は、ExpandNonTerminal関数の再帰的性質を取り除くことである。
いくつかの実装形態において、ExpandSymbolは、記号ツリーの深さ優先トラバースを実行し、リーフ(すなわち、終端)を出力するように構成され得る。これは、記号展開が終了するまで繰り返し毎に1つのツリーノードを処理することによって繰り返し実行され得る。現在のノードはcurrentに格納され、これはExpandSymbolの入力記号、すなわち、記号ツリーのルートに初期化される。遭遇した各ノードは、終端(リーフノード)または非終端(内部ノード)のいずれかであってよい。内部ノード(Branch 1、行7~10、図10に示されているように)である場合、ノードの左および右子ノードは、ビットパックされた文法配列から記号を復号するように構成され得る、GetFieldを使用してフェッチされる。右子ノードは、後で使用するためにスタックに載せられるが、左子ノードは、次の繰り返しのためにcurrentとなり得る。このようにして、ツリー内の左経路は、リーフに遭遇するまで常にトラバースされる。これが生じたときに(Branch 2、行12~13、図10に示されているように)、リーフノード(終端である)が出力されてよく、次の繰り返しで処理されるべきノードがスタックから取り出され得る。最後のリーフノードがスタックから取り出され、出力された後、ツリーは完全にトラバースされている。
いくつかの実装形態において、Re-Pairルックアップのベクトル化は、次の前提条件のうちの1つまたは複数に対して構成され得る。特に、図9に示されているアプリケーション204のコンポーネント922は、ベクトル命令を使用して複数のExpandSymbol操作を並列実行するように構成され得る。上で述べたように、ExpandSymbolは、記号ツリー上の深さ優先探索を含むものとしてよく、後者は任意の深さのものであってよいので、一緒に実行されるトラバースは、ベクトル化が効率的であるように類似の回数の繰り返しを有していなければならない。したがって、本発明の主題は、非終端が展開するように構成され得る終端の数を制限するように構成されるものとしてよく、これは記号ツリー内のリーフの数を制限することと同等であり得、それによって、固定された回数の繰り返しについてベクトル化されたコードの実行を可能にする。この制限は、圧縮時に強制され得る。いくつかの例示的な実装形態において、本発明の主題は、非終端が展開し得る8個の終端を有するように構成されてよく、これは15回の繰り返しに対してベクトル化されたコードの実行を可能にし得る。それに加えて、各ベクトル化されたループ繰り返しにおける計算量を減らすために、Re-Pair文法内の記号当たりのビット数も固定されてよく(たとえば、16ビット)、これはビットパックされた文法配列の復号を回避するように構成され得る。これは、ビットオフセットの計算およびビットシフトなしで文法配列からCPUレジスタ内に直接的に記号がロードされることを可能にし得る。同じことが、圧縮辞書内の圧縮バケットから記号をロードすることに対して適用され得る。
図11aは、本発明の主題のいくつかの実装形態による、例示的なベクトル化されたRe-Pair展開アルゴリズム1100を示している。ベクトル化されたアルゴリズム1100は、5段階、すなわち、初期化1102、branch1およびbranch2 1104、条件/述語評価1106、ならびに結果出力1108を使用して実行され得る。見やすくわかりやすくするために、アルゴリズム1100を実行するために使用され得る例示的なコードが図11bに示されている。コードは、例示的なExpand16Symbols関数について図示されている(たとえば、これはIntel Advanced Vector Extensions 512命令を実行することができるプロセッサによって実行され得る)。
図11aに示されているように、初期化1102のときに、スカラーバージョンのスタック高さの16倍のスタックがゼロ初期化され得る。これは、展開される16個の記号の各々がスタック上にそれ専用の領域を必要とし得るので実行される。スタック高さは、トラバース当たり10に固定されてよい。記号の展開は、この例示的な関数(すなわち、Expand16Symbols)に対して8文字に制限されるので、スタック高さは8であってよいが、展開を終了している可能性のある記号に対する限界チェックなしでスタックから読み出しおよびスタックへの書き込みを許すためにスタックの一番下に2つの追加の要素を加え得る。スタック位置は、すべての要素について2に初期化され得る。このようにして、1のスタック位置は、記号が完全に展開されていることを示し得る。これが生じた後、この記号に対するスタック位置は、その後の繰り返しで変更されない。
初期化の後、例示的なベクトル化されたRe-Pair展開プロセス1100は、記号をロードすることを目的として、branch1 1104aおよびbranch2 1104bをそれぞれ実行するように構成され得る。特に、Branch1 1104aは、文法配列から現在の記号の子記号をロードし、正しい記号をスタックに格納する役割を有し得る。Branch2 1104bは、スタックから新しい現在の記号をロードする役割を有し得る。ロードは、すべての記号(たとえば、16個の記号)について同時に実行され得る。
ロードが完了した後、例示的なベクトル化されたRe-Pair展開アルゴリズム1100は、1106で、述語/条件評価を実行するように構成され得る。1106において、記号のロードの結果は、1104において実行されたように、述語の評価に基づき組み合わされ得る。
述語の評価が完了した後、ベクトル化アルゴリズム1100は、1108において、結果を出力するように構成され得る。特に、その結果得られる個別の展開文字列は、16個すべての記号の展開に対応する単一の連続する文字列を形成するように処理され得る。
いくつかの実装形態において、ベクトル化プロセス1100は、圧縮データへのアクセス時間を改善するように構成され得る。特に、プロセス1100を実装する、上で説明されている、extractおよびlocate操作は、既存の圧縮解除プロセスを使用するシステムに比べて2~2.7倍高速に実行され得る。
いくつかの実装形態において、本発明の主題は、上で説明されている圧縮および圧縮解除/アクセスプロセスを含み、ドイツ、ヴァルドルフ所在のSAP SE社によって開発されたHigh Performance Analytic Appliance (「HANA」)システムなどの、様々なインメモリデータベースシステムで実装することができる。統合基幹業務(「ERP」)システム、サプライチェーンマネジメントシステム(「SCM」)システム、サプライヤリレーションシップマネジメント(「SRM」)システム、カスタマリレーションシップマネジメント(「CRM」)システム、および/またはその他などの様々なシステムは、たとえば、データにアクセスすることを目的としてインメモリシステムとインタラクティブにやり取りすることができる。他のシステムおよび/またはシステムの組合せは、本発明の主題の実装形態に使用することができる。次に、例示的なインメモリシステムについて説明する。
図12は、一緒に配置される、1つもしくは複数のネットワーク上でリンクされるなどが可能である1つもしくは複数のプログラム可能プロセッサを備えることができる、コンピューティングシステム1202が、本発明の主題のいくつかの実装形態に従って、データストレージアプリケーション1204の1つもしくは複数のモジュール、ソフトウェアコンポーネント、または同様のものを実行する例示的なシステム1200を示している。データストレージアプリケーション1204は、データベース、企業資源計画、分散ストレージシステム(たとえば、カリフォルニア州サニーベール所在のNetAppから入手可能なNetApp Filer)、または同様のもののうちの1つまたは複数を含むことができる。
1つまたは複数のモジュール、ソフトウェアコンポーネント、または同様のものは、コンピューティングシステム1202のローカルユーザから、さらにはネットワーク接続1210上で1つまたは複数のクライアントマシン1206からコンピューティングシステム1202にアクセスするリモートユーザからアクセス可能であるものとしてよい。1つまたは複数の第1のモジュールによって生成される1つまたは複数のユーザインターフェース画面が、ローカルディスプレイを介して、またはクライアントマシン1206のうちの1つに関連付けられているディスプレイを介してのいずれかでユーザに対して表示され得る。データストレージアプリケーション1204のデータユニットは、永続層1212(たとえば、ページバッファまたは他のタイプの一時的永続層)に一時的に格納されてよく、これはデータを、ストレージページの形態で、1つまたは複数のストレージ1214に、たとえば、入力/出力コンポーネント1216を介して書き込むことができる。1つまたは複数のストレージ1214は、長期間保管のためデータを書き込むように構成されている1つまたは複数の物理的記憶媒体もしくはデバイス(たとえば、ハードディスクドライブ、永続的フラッシュメモリ、ランダムアクセスメモリ、光媒体、磁気媒体、および同様のもの)を含むことができる。ストレージ1214および入力/出力コンポーネント1216は、図12のコンピューティングシステム1202の外部にあるように図示されているにも関わらずコンピューティングシステム1202内に備えられ得る。
より長期のストレージ1214に保持されるデータは、ページ単位で編成され得、各々定義された量の記憶領域を割り当てられている。いくつかの実装形態において、各ページに割り当てられる記憶領域の量は一定であり、固定され得る。しかしながら、各ページに割り当てられる記憶領域の量が変動し得る他の実装形態も、本発明の主題の範囲内にある。
図13は、本発明の主題のいくつかの実装形態による、例示的なソフトウェアアーキテクチャ1300を示している。ハードウェアおよびソフトウェアのうちの1つまたは複数で実装することができる、データストレージアプリケーション1204は、データベースアプリケーション、ネットワークアタッチトストレージシステム、または同様のもののうちの1つまたは複数を備えることができる。本発明の主題の少なくともいくつかの実装形態により、そのようなデータストレージアプリケーション1204は、たとえば、永続インターフェース1302を介して、永続層1212または他のタイプのメモリバッファを備えるか、または他の何らかの形でインターフェースすることができる。永続層1212内のページバッファ1304は、1つまたは複数の論理ページ1306を格納することができ、任意選択で、シャドウページ、アクティブページ、および同様のものを含むことができる。永続層1212に保持されている論理ページ1306は、ソフトウェアモジュール、ソフトウェアおよびハードウェアの1つもしくは複数で実装されるサブシステム、または同様のものであってよい、入力/出力コンポーネント1216を介してストレージ(たとえば、より長期のストレージなど)1214に書き込まれ得る。ストレージ1214は、格納されているページ1312が物理メモリブロックにおいて割り当てられる1つまたは複数のデータボリューム1310を含むことができる。
いくつかの実装形態において、データストレージアプリケーション1204は、ページマネージャ1314および/またはセーブポイントマネージャ1316を備えるか、または他の何らかの形でそれと通信することができる。ページマネージャ1314は、ページステータス情報1324、たとえば、ストレージ1214内の物理ページおよび永続層1212(および任意選択でページバッファ1304)内の論理ページのステータスを監視するフリーブロックマネージャ1322を備えることができる永続層1212におけるページ管理モジュール1320と通信することができる。セーブポイントマネージャ1316は、クラッシュの可能性がある場合にその後にリスタートするためのデータベースの一貫した永続状態を作成するために使用される、セーブポイントを処理するために永続層1212でセーブポイントコーディネータ1326と通信することができる。
データストレージアプリケーション1204のいくつかの実装形態において、永続層1212のページ管理モジュールは、シャドウページングを実装することができる。ページ管理モジュール1320内のフリーブロックマネージャ1322は、物理ページのステータスを維持することができる。ページバッファ1304は、本明細書において説明されているように動作する固定ページステータスバッファを含むことができる。ページ管理モジュール1320の一部であるか、またはそれと通信することができる、コンバータコンポーネント1340は、ストレージ1214に書き込まれる論理ページと物理ページとの間のマッピングを行う役割を有するものとしてよい。コンバータ1340は、コンバータテーブル1342内の対応する物理ページへの論理ページの現在のマッピングを維持することができる。コンバータ1340は、1つまたは複数のコンバータテーブル1342内の対応する物理ページへの論理ページ1306の現在のマッピングを維持することができる。論理ページ1306がストレージ1214から読み出されたときに、ロードされるべきストレージページは、コンバータ1340を使用して1つまたは複数のコンバータテーブル1342から探索され得る。セーブポイントの後の初回に論理ページがストレージ1214に書き込まれるときに、新しい空き物理ページが論理ページに割り当てられる。フリーブロックマネージャ1322は、新しい物理ページに「使用済み」のマークを付け、新しいマッピングは、1つまたは複数のコンバータテーブル1342に格納される。
永続層1212は、データストレージアプリケーション1204において加えられた変更は耐久性があること、およびデータストレージアプリケーション1204がリスタート後に最新のコミット状態に戻され得ることを確実にできる。データをストレージ1214に書き込むことは、書き込みトランザクションの終わりと同期される必要はない。そのようなものとして、非コミット変更はディスクに書き込まれてよく、それでもコミット変更は書き込みトランザクションが終了したときにディスクに書き込まれ得ない。システムクラッシュ後に、終了しなかったトランザクションによって行われた変更はロールバックすることができる。すでにコミットされているトランザクションによって生じる変更は、このプロセスで失われるべきでない。線形ログにデータストレージアプリケーションのデータに対して加えられた変更を格納するためにロガーコンポーネント1344も備えられ得る。ロガーコンポーネント1344は、すべての操作がデータに適用されること、およびログに記録された「コミット」レコードによるトランザクションが回復プロセスの終わりにまだ開いているトランザクションをロールバックする前にコミットされることを確実にするために、最後のセーブポイント以降の操作をリプレーするために回復時に使用することができる。
いくつかのデータストレージアプリケーションにより、データをディスクに書き込むことは、書き込みトランザクションの終わりと必ずしも同期しない。非コミット変更がディスクに書き込まれる状況が発生することがあり、それと同時に、書き込みトランザクションが終了したときにコミット変更はまだディスクに書き込まれていない。システムクラッシュ後に、終了しなかったトランザクションによって行われた変更はロールバックされなければならず、コミットされたトランザクションによる変更は失われてはならない。
コミット変更が失われないことを確実にするために、変更が加えられたときには必ずやり直しログ情報がロガーコンポーネント1344によって書き込まれ得る。この情報は、トランザクションが終了したときに最後にディスクに書き込まれ得る。ログエントリは、別のログボリューム内に存続しているものとしてよく、通常データはデータボリュームに書き込まれる。やり直しログにより、コミット変更は、対応するデータページがディスクに書き込まれなかった場合でも復元され得る。非コミット変更を元に戻すために、永続層1212は、元に戻すログエントリ(1つまたは複数のログから)とシャドウページングとの組合せを使用することができる。
永続インターフェース1302は、ストア(たとえば、インメモリストアなど)の読み出しおよび書き込み要求を処理することができる。永続インターフェース1320は、また、ログ記録ありおよびログ記録なしの両方でデータを書き込むための書き込み方法を提供することができる。ログに記録された書き込み操作が使用される場合、永続インターフェース1302は、ロガー1344を呼び出す。それに加えて、ロガー1344は、ストア(たとえば、インメモリストアなど)がログエントリをログキューに直接加えることを可能にするインターフェースを提供する。ロガーインターフェースは、また、インメモリログキュー内のログエントリがディスクにフラッシュされることを要求する方法を提供する。
ログエントリは、ログシーケンス番号、ログエントリのタイプ、およびトランザクションの識別子を含む。操作タイプに応じて、追加の情報がロガー1344によってログに記録される。たとえば、タイプ「update」のエントリでは、これは、影響のあるレコードおよび修正済みデータの後イメージの識別となるであろう。
データアプリケーション1204がリスタートされるときに、ログエントリは処理される必要がある。このプロセスを高速化するために、やり直しログは、はじめから常に処理されるわけではない。その代わりに、上で述べたように、セーブポイントは定期的に実行されるものとしてよく、それにより最後のセーブポイント以降に行われた(たとえば、メモリ内などの)すべての変更をディスクに書き込む。システムを起動したときに、最後のセーブポイントの後に作成されたログのみが処理される必要がある。次回のバックアップ操作の後に、セーブポイント位置より前の古いログエントリが取り除かれ得る。
ログエントリを書き込むためにロガー1344が呼び出されたときに、これは即座にディスクに書き込むことはしない。その代わりに、ログエントリをメモリ内のログキューに置くことができる。ログキュー内のエントリは、対応するトランザクションが終了(コミットまたは中止)されたときに最後にディスクに書き込まれ得る。コミット変更が失われないことを保証するために、コミット操作は、対応するログエントリがディスクにフラッシュされる前に正常に終了しない。ログキューエントリをディスクに書き込むことも他のイベントによって、たとえば、ログキューページがいっぱいになったとき、またはセーブポイントが実行されたときにトリガーされ得る。
本発明の主題により、ロガー1344は、データベースログ(または単に本明細書では「ログ」と称される)を連続的に自然な順序(たとえば、順次的順序など)でメモリバッファに書き込むことができる。ログデータを格納するためにいくつかの物理ハードディスク/ストレージデバイスが使用される場合、いくつかのログパーティションが定義され得る。その後、ロガー1344(上で述べたようにログデータを生成し編成する動作をする)は、すべての利用可能なログパーティション上にログバッファへの書き込みの負荷分散を行うことができる。いくつかの場合において、負荷分散は、様々な書き込み操作が順次および連続的方式でログバッファに向けられるラウンドロビン分散方式に従って行われる。この配置構成により、マルチパーティションログの特定のパーティションの単一のログセグメントに書き込まれるログバッファは連続的でない。しかしながら、ログバッファは、回復時のすべてのパーティションのログセグメントから適切な順序に順序付けし直され得る。
上で述べたように、データストレージアプリケーション1204は、セーブポイントマネージャ1316がトランザクション一貫性のあるセーブポイントを書き込むことができるようにシャドウページングを使用することができる。そのような配置構成により、データバックアップは、データバックアッププロセスの第1のステップとして実行された、特定のセーブポイントに収められているすべてのデータページのコピーを含む。本発明の主題は、また、他のタイプのデータページストレージにも適用できる。
いくつかの実装形態において、本発明の主題は、図14に示されているように、システム1400で実装されるように構成され得る。システム1400は、プロセッサ1410と、メモリ1420と、ストレージデバイス1430と、入力/出力デバイス1440とを備え得る。コンポーネント1410、1420、1430、および1440の各々は、システムバス1450を使用して相互接続され得る。プロセッサ1410は、システム1400内で実行するための命令を処理するように構成され得る。いくつかの実装形態において、プロセッサ1410は、シングルスレッドプロセッサであってよい。代替的実装形態において、プロセッサ1410は、マルチスレッドプロセッサであってよい。プロセッサ1410は、入力/出力デバイス1440を通じて情報を受信または送信することを含む、メモリ1420にまたはストレージデバイス1430に格納されている命令を処理するようにさらに構成され得る。メモリ1420は、システム1400内に情報を格納することができる。いくつかの実装形態において、メモリ1420は、コンピュータ可読媒体であってよい。代替的実装形態において、メモリ1420は、揮発性メモリユニットであってよい。さらにいくつかの実装形態において、メモリ1420は、不揮発性メモリユニットであってよい。ストレージデバイス1430は、システム1400用の大容量ストレージを提供することができるものとしてよい。いくつかの実装形態において、ストレージデバイス1430は、コンピュータ可読媒体であってよい。代替的実装形態において、ストレージデバイス1430は、フロッピィディスクデバイス、ハードディスクデバイス、光ディスクデバイス、テープデバイス、不揮発性ソリッドステートメモリ、または他の任意のタイプのストレージデバイスであってよい。入力/出力デバイス1440は、システム1400のための入力/出力操作を提供するように構成することができる。いくつかの実装形態において、入力/出力デバイス1440は、キーボードおよび/またはポインティングデバイスを含み得る。代替的実装形態において、入力/出力デバイス1440は、グラフィカルユーザインターフェースを表示するためのディスプレイユニットを含み得る。
図15は、本発明の主題のいくつかの実装形態による、データの圧縮を実行するための例示的なプロセス1500を示している。プロセス1500は、図2aに示されているシステム200によって、特にデータストレージアプリケーション204を使用して、実行され得る。1502において、データ(たとえば、辞書文字列)を圧縮する要求は、データストレージアプリケーション204によって受信されるものとしてよく(たとえば、図2aに示されている要求202)、ブロックサイズおよびフロントコーディングバケットサイズを有する圧縮文字列辞書が生成され得る。1504において、フロントコーディングバケットサイズを有する辞書内の文字列の1つまたは複数のバケットにフロントコーディングが適用され、それにより、文字列の複数のフロントコーディングされたバケットを生成し得る(たとえば、図2a、216に示されているように)。1506において、文字列の複数のフロントコーディングされたバケットの1つまたは複数の部分が連結され、ブロックサイズを有する1つまたは複数のブロックを形成し得る。次いで、1つまたは複数のブロックが、1508において、圧縮され得る。1510において、辞書内の各文字列に対応する圧縮ブロックの集合が、図2aに示されているように、永続層206内に格納されるものとしてよく、圧縮ブロックの集合はデータセット内にすべての文字列を格納することができる。
いくつかの実装形態において、本発明の主題は、以下の任意選択の特徴のうちの1つまたは複数を含み得る。いくつかの実装形態において、圧縮ブロックの集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含み得る。
いくつかの実装形態において、この方法は、文字列の複数のフロントコーディングされたバケット内の文字列のバケット間に終端文字を挿入することも含み得る。終端文字は、圧縮されない場合もある。
いくつかの実装形態において、各文字列は、文字列終端文字を含むものとしてよく、各文字列終端文字は圧縮される。
いくつかの代替的実装形態において、各文字列の長さは、文字列とともに格納され圧縮され得る。
いくつかの実装形態において、ブロックサイズは、固定サイズおよび可変サイズの少なくとも一方であってよい。
いくつかの実装形態において、圧縮は、複数のバケット内の各フロントコーディングされたバケットの圧縮を独立して並列実行することを含み得る。
いくつかの実装形態において、1つまたは複数のフロントコーディングされたバケットは、サンプリングされて1つまたは複数のスーパーブロックを形成するように構成され得る。各スーパーブロックは、ブロックの圧縮のための共有文法を生成するためにその後圧縮されるように構成され得る。たとえば、共有文法は、ブロックの加速圧縮を実行するために使用され得る。
いくつかの実装形態において、ブロックの圧縮は、Re-Pair圧縮を含み得る。
いくつかの実装形態において、方法1100は、格納されている圧縮ブロックの集合内のデータにアクセスする要求を受け取ることと、受け取った要求に応答して格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを識別することと、識別された圧縮ブロックを少なくとも部分的に圧縮解除して非圧縮データを生成することとをさらに含み得る。圧縮解除は、フロントコーディングを使用して識別された圧縮ブロック内の文字列プレフィックスおよびサフィックスを圧縮解除することと、Re-Pair圧縮解除を使用して識別された圧縮ブロック内の文字列サフィックスを圧縮解除することとを含み得る。さらに、Re-Pair圧縮解除は、識別された圧縮ブロック内に格納されているデータに対応する記号ツリー内の各記号を繰り返し展開することを含み得る。
図16は、本発明の主題のいくつかの実装形態による、データの圧縮解除を実行するための例示的なプロセス1600を示している。プロセス1600は、図2aに示されているシステム200によって、特にデータストレージアプリケーション204を使用して、実行され得る。1602において、格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックは、格納されている圧縮ブロックの集合内のデータにアクセスする要求に応答して識別され得る。1604において、識別された圧縮ブロック内の文字列プレフィックスは、フロントコーディングを使用して圧縮解除され得る。1606において、識別された圧縮ブロック内の文字列サフィックスは、Re-Pair圧縮解除を使用して圧縮解除され得る。1608において、非圧縮データが生成され得る。
いくつかの実装形態において、本発明の主題は、以下の任意選択の特徴のうちの1つまたは複数を含み得る。いくつかの実装形態において、Re-Pair圧縮解除は、識別された圧縮ブロック内に格納されているデータに対応する記号ツリー内の各記号を繰り返し展開することを含み得る。記号ツリーは、複数のノードを備え得る。圧縮ブロックは、辞書内の文字列の1つまたは複数のフロントコーディングされたバケットから生成され得る。フロントコーディングされたバケットは、1つまたは複数のスーパーブロックを形成するためにサンプリングされるように構成され得る。スーパーブロックの各々は、圧縮ブロックの圧縮のための共有文法を生成するために圧縮されるように構成され得る。複数のノードは、終端文字、非終端文字、およびこれらの任意の組合せのうちの少なくとも1つを含み得る。いくつかの実装形態において、この方法は、複数のRe-Pair圧縮解除を並列に実行することをさらに含み得る。終端文字の数は、所定の数に制限されてよい。さらに、各記号の繰り返し展開の回数は、所定の数に基づき決定され得る。
いくつかの実装形態において、Re-Pair圧縮解除は、記号ツリー内の各記号に対応するメモリ内のスタック位置を初期化することと、ベクトル化されたRe-Pair展開を使用して、記号ツリー内の各記号をストレージからメモリ内に同時にロードすることと、ロードされた記号と関連付けられている1つまたは複数の述語を評価することによって、その記号を非圧縮データへと組み合わせることと、所定の数を使用して、同時ロードすることと組み合わせることとを繰り返すこととを含み得る。
いくつかの実装形態において、圧縮ブロックの集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含み得る。ブロックサイズは、固定サイズおよび可変サイズの少なくとも一方であってよい。さらに、圧縮ブロックは、Re-Pair圧縮を使用して圧縮され得る。
本明細書において開示されているシステムおよび方法は、たとえば、データベース、デジタル電子回路、ファームウェア、ソフトウェア、またはこれらの組合せも含むコンピュータなどの、データプロセッサを含む、様々な形態で具現化され得る。さらに、本明細書において開示されている実装形態の上で指摘されている特徴および他の態様および原理は、様々な環境において実装できる。そのような環境および関係するアプリケーションは、開示されている実装形態に従って様々なプロセスおよび操作を実行するように特別に作成され得るか、またはこれらは必要な機能を提供するようにコードによって選択的にアクティベートされるか、または再構成される汎用コンピュータもしくはコンピューティングプラットフォームを含み得る。本明細書において開示されているプロセスは、特定の任意のコンピュータ、ネットワーク、アーキテクチャ、環境、または他の装置に本質的に関係せず、ハードウェア、ソフトウェア、および/またはファームウェアの好適な組合せによって実装され得る。たとえば、様々な汎用マシンが、開示されている実装形態の教示に従って書かれたプログラムにより使用され得るか、または必要な方法および技法を実行するように専用装置またはシステムを製作すると都合がよい場合もある。
本明細書において開示されているシステムおよび方法は、データ処理装置、たとえば、プログラム可能なプロセッサ、コンピュータ、もしくは複数のコンピュータによる実行のため、またはこれらの動作を制御するために、コンピュータプログラム製品、すなわち、情報媒体内に、たとえば、機械可読記憶デバイス内に、または伝搬信号で、明確に具現化されるコンピュータプログラムとして実装され得る。コンピュータプログラムは、コンパイラ型言語またはインタプリタ型言語を含む、任意の形態のプログラミング言語で書かれ、スタンドアロンプログラム、またはモジュール、コンポーネント、サブルーチン、またはコンピューティング環境において使用するのに適している他のユニットを含む、任意の形態で配備され得る。コンピュータプログラムは、1つのコンピュータ上で、または1つのサイトにあるか、または複数のサイトにまたがって分散され、通信ネットワークによって相互接続されている複数のコンピュータ上で実行されるように配備され得る。
本明細書で使用されているように、「ユーザ」という語は、人またはコンピュータを含む実体を指すものとしてよい。
第1、第2、および同様のものなどの序数は、いくつかの状況において、順序に関係するけれども、本明細書で使用されているように、序数は必ずしも順序を暗示しない。たとえば、序数は、一方の項目を他方の項目から区別するために単に使用され得る。たとえば、第1の事象を第2の事象から区別することは、任意の時間的順序付けまたは固定された参照システムを必ずしも暗示しない(説明の一方の段落における第1の事象が説明の別の段落における第1の事象と異なり得る)。
前述の説明は、付属の請求項の範囲によって定められる、本発明の範囲を、限定はしないが、例示することを意図されている。他の実装形態は、次の請求項の範囲内に収まる。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、コンポーネント、またはコードとも呼ばれ得る、これらのコンピュータプログラムは、プログラム可能なプロセッサ用の機械語命令を含み、高水準手続き型および/またはオブジェクト指向プログラミング言語で、および/またはアセンブリ/機械語で実装され得る。本明細書で使用されているように、「機械可読媒体」という用語は、機械可読信号として機械語命令を受信する機械可読媒体を含む、機械語命令および/またはデータをプログラム可能なプロセッサに供給するために使用されるコンピュータプログラム製品、装置、および/またはたとえば、磁気ディスク、光ディスク、メモリ、プログラム可能論理デバイス(PLD)などのデバイスを指す。「機械可読信号」という用語は、機械語命令および/またはデータをプログラム可能なプロセッサに供給するために使用される信号を指す。機械可読媒体は、たとえば、非一時的ソリッドステートメモリまたは磁気ハードドライブまたは同等の記憶媒体などのように、そのような機械語命令を非一時的に格納することができる。機械可読媒体は、代替的に、またはそれに加えて、たとえば、プロセッサキャッシュまたは1つまたは複数の物理的プロセッサコアに関連付けられている他のランダムアクセスメモリなどのように、そのような機械語命令を一時的方式で格納することができる。
ユーザとインタラクションを行うために、本明細書で説明されている主題は、ユーザに情報を表示するための、たとえば、陰極線管(CRT)または液晶ディスプレイ(LCD)モニタなどの表示デバイスならびにユーザがコンピュータに入力を提供するために使用し得る、たとえば、マウスもしくはトラックボールなどのキーボードおよびポインティングデバイスを有するコンピュータ上で実装され得る。他の種類のデバイスも、ユーザとインタラクションを行うために使用されてよい。たとえば、ユーザに提供されるフィードバックは、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなどの、任意の形態の感覚フィードバックであってよく、ユーザからの入力は、限定はしないが、音響、音声、または触覚入力を含む、任意の形態で受信され得る。
本明細書で説明されている主題は、たとえば1つもしくは複数のデータサーバなどの、バックエンドコンポーネントを備えるか、またはたとえば1つもしくは複数のアプリケーションサーバなどの、ミドルウェアコンポーネントを備えるか、またはたとえば、ユーザが本明細書で説明されている主題の実装形態と対話することを可能にするグラフィカルユーザインターフェースまたはウェブブラウザを有する1つもしくは複数のクライアントコンピュータなどの、フロントエンドコンポーネントを備えるコンピューティングシステムで、またはそのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの任意の組合せで実装され得る。システムのコンポーネントは、たとえば通信ネットワークなどの、デジタルデータ通信の任意の形態または媒体によって相互接続され得る。通信ネットワークの例は、限定はしないが、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、およびインターネットを含む。
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、一般的に、ただし、排他的でなく、互いに隔てられており、典型的には、通信ネットワークを通じて対話を行う。クライアントとサーバとの関係は、コンピュータプログラムが各コンピュータ上で実行され、互いとの間にクライアント-サーバ関係を有することによって発生する。
前述の説明で述べられている実装形態は、本明細書に説明されている主題と一致するすべての実装形態を表すわけではない。その代わりに、これらは、説明されている主題に関係する態様と一致するいくつかの例にすぎない。上では少数の変更形態が詳しく説明されたけれども、他の修正形態または追加形態も可能である。特に、さらなる特徴および/または変更形態が、本明細書で述べられているものに加えて提供され得る。たとえば、上で説明されている実装形態は、開示されている特徴の様々な組合せおよび部分的組合せおよび/または上で開示されているいくつかのさらなる特徴の組合せおよび部分的組合せを対象とすることができる。それに加えて、添付図に示されているおよび/または本明細書において説明されている論理フローは、必ずしも、望ましい結果を達成するために、図示されている特定の順序、または順番を必要としない。他の実装形態は、次の請求項の範囲内に収まり得る。
200 システム
204 データストレージアプリケーション
206 永続層
214~220 コンピューティングコンポーネント
216 フロントコーディング
218 コンピューティングコンポーネント
230 非圧縮状態
232 フロントコーディングされたバケット
234 ブロック
236 圧縮ブロック
240 圧縮状態
300 実験データセット
500 プロセス
600 辞書/文字列圧縮プロセス
604 スーパーブロック
606 再圧縮
608 Re-Pairアルゴリズム
610 単一のRe-Pair文法
612 圧縮ブロック
700 extract関数
710 locate関数
800 プロセス
900 システム
902 クエリ(呼び出し、要求など)
914 論理ブロック決定コンポーネント
916 コンポーネント
922 コンポーネント
1000 ExpandSymbol関数
1100 ベクトル化されたRe-Pair展開アルゴリズム
1102 初期化
1104 branch1およびbranch2
1104a branch1
1104b branch2
1106 条件/述語評価
1108 結果出力
1200 システム
1202 コンピューティングシステム
1204 データストレージアプリケーション
1206 クライアントマシン
1210 ネットワーク接続
1212 永続層
1214 ストレージ
1216 入力/出力コンポーネント
1300 ソフトウェアアーキテクチャ
1302 永続インターフェース
1304 ページバッファ
1306 論理ページ
1314 ページマネージャ
1316 セーブポイントマネージャ
1320 ページ管理モジュール
1322 フリーブロックマネージャ
1324 ページステータス情報
1326 セーブポイントコーディネータ
1340 コンバータコンポーネント
1342 コンバータテーブル
1344 ロガーコンポーネント
1400 システム
1410 プロセッサ
1420 メモリ
1430 ストレージデバイス
1440 入力/出力デバイス
1450 システムバス
1500 プロセス
1600 プロセス

Claims (9)

  1. コンピュータ実装方法であって、
    格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを、格納されている圧縮ブロックの前記集合内のデータにアクセスする要求に応答して識別するステップと、
    フロントコーディングを使用して前記識別された圧縮ブロック内の文字列プレフィックスを圧縮解除するステップと、
    Re-Pair圧縮解除を使用して前記識別された圧縮ブロック内の文字列サフィックスを圧縮解除するステップと、
    非圧縮データを生成するステップとを含み、
    前記Re-Pair圧縮解除は、前記識別された圧縮ブロック内に格納されている前記データに対応する記号ツリー内の各記号を繰り返し展開するステップを含み、
    前記1つまたは複数の圧縮ブロックは、辞書内の文字列の1つまたは複数のフロントコーディングされたバケットから生成され、前記1つまたは複数のフロントコーディングされたバケットは、サンプリングされて1つまたは複数のスーパーブロックを形成するように構成され、各1つまたは複数のスーパーブロックは、前記1つまたは複数の圧縮ブロックの圧縮のための共有文法を生成するために圧縮されるように構成され、
    前記記号ツリーは、複数のノードを備え、前記複数のノードは、終端文字、非終端文字、およびこれらの任意の組合せを含み、
    前記コンピュータ実装方法は、
    複数のRe-Pair圧縮解除を並列に実行するステップをさらに含み、
    終端文字の数は、所定の数に制限され、各記号の繰り返し展開の回数は、前記所定の数に基づき決定され、
    前記Re-Pair圧縮解除は、少なくともextract関数と、locate関数とを用いるもので、
    前記extract 関数が、DecodeString関数を呼び出すもので、前記DecodeString関数が、前に復号された文字列をすでに格納している出力バッファ、およびヘッダの後に圧縮バケットを格納している、バケットバッファで呼び出され、前記圧縮バケットのビットがいくつすでに復号されているかを記録し、
    前記locate関数が、指定された文字列について圧縮辞書を検索するために、前記圧縮辞書内のバケットのヘッダに対して二分探索を実行し、
    前記Re-Pair圧縮解除は、
    前記記号ツリー内の各記号に対応するメモリ内のスタック位置を初期化するステップと、
    ベクトル命令を使用して、前記記号ツリー内の各記号をストレージから前記メモリ内に同時にロードするステップと、
    前記同時にロードされた記号と関連付けられている1つまたは複数の述語を評価することによって、前記記号を前記非圧縮データへと組み合わせるステップと、
    前記所定の数を使用して、前記同時にロードするステップと前記組み合わせるステップとを繰り返すステップとを含む、コンピュータ実装方法。
  2. 圧縮ブロックの前記集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含む請求項1に記載の方法。
  3. 圧縮ブロックの前記集合内の各ブロックのブロックサイズは、固定サイズおよび可変サイズの少なくとも一方である請求項1に記載の方法。
  4. 前記1つまたは複数の圧縮ブロックは、Re-Pair圧縮を使用して圧縮される請求項1に記載の方法。
  5. 少なくとも1つのプログラム可能プロセッサと、
    命令を格納する非一時的な機械可読媒体であって、前記命令は、前記少なくとも1つのプログラム可能プロセッサによって実行されたときに、前記少なくとも1つのプログラム可能プロセッサに
    格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを、格納されている圧縮ブロックの前記集合内のデータにアクセスする要求に応答して識別することと、
    フロントコーディングを使用して前記識別された圧縮ブロック内の文字列プレフィックスを圧縮解除することと、
    Re-Pair圧縮解除を使用して前記識別された圧縮ブロック内の文字列サフィックスを圧縮解除することと、
    非圧縮データを生成することと
    を含む動作を実行させる、非一時的な機械可読媒体とを備え、
    前記Re-Pair圧縮解除は、少なくともextract関数と、locate関数とを用いるもので、
    前記extract 関数が、DecodeString関数を呼び出すもので、前記DecodeString関数が、前に復号された文字列をすでに格納している出力バッファ、およびヘッダの後に圧縮バケットを格納している、バケットバッファで呼び出され、前記圧縮バケットのビットがいくつすでに復号されているかを記録し、
    前記locate関数が、指定された文字列について圧縮辞書を検索するために、前記圧縮辞書内のバケットのヘッダに対して二分探索を実行し、
    前記Re-Pair圧縮解除は、前記識別された圧縮ブロック内に格納されている前記データに対応する記号ツリー内の各記号を繰り返し展開することを含み、
    前記1つまたは複数の圧縮ブロックは、辞書内の文字列の1つまたは複数のフロントコーディングされたバケットから生成され、
    前記1つまたは複数のフロントコーディングされたバケットは、サンプリングされて1つまたは複数のスーパーブロックを形成するように構成され、
    各1つまたは複数のスーパーブロックは、前記1つまたは複数の圧縮ブロックの圧縮のための共有文法を生成するために圧縮されるように構成され、
    前記記号ツリーは、複数のノードを備え、前記複数のノードは、終端文字、非終端文字、およびこれらの任意の組合せを含み、
    前記動作は、複数のRe-Pair圧縮解除を並列に実行することをさらに含み、
    終端文字の数は、所定の数に制限され、各記号の繰り返し展開の回数は、前記所定の数に基づき決定され、
    前記Re-Pair圧縮解除は、
    前記記号ツリー内の各記号に対応するメモリ内のスタック位置を初期化することと、
    ベクトル命令を使用して、前記記号ツリー内の各記号をストレージから前記メモリ内に同時にロードすることと、
    前記同時にロードされた記号と関連付けられている1つまたは複数の述語を評価することによって、前記記号を前記非圧縮データへと組み合わせることと、
    前記所定の数を使用して、前記同時にロードすることと前記組み合わせることとを繰り返すことと
    を含むシステム。
  6. 圧縮ブロックの前記集合内の各ブロックは、バケットヘッダおよび圧縮バケットのシーケンスを含む請求項5に記載のシステム。
  7. 圧縮ブロックの前記集合内の各ブロックのブロックサイズは、固定サイズおよび可変サイズの少なくとも一方である請求項5に記載のシステム。
  8. 前記1つまたは複数の圧縮ブロックは、Re-Pair圧縮を使用して圧縮される請求項5に記載のシステム。
  9. 命令を格納するコンピュータプログラムであって、前記命令は、少なくとも1つのプログラム可能プロセッサによって実行されたときに、前記少なくとも1つのプログラム可能プロセッサに
    格納されている圧縮ブロックの集合内の1つまたは複数の圧縮ブロックを、格納されている圧縮ブロックの前記集合内のデータにアクセスする要求に応答して識別することと、
    フロントコーディングを使用して前記識別された圧縮ブロック内の文字列プレフィックスを圧縮解除することと、
    Re-Pair圧縮解除を使用して前記識別された圧縮ブロック内の文字列サフィックスを圧縮解除することと、
    非圧縮データを生成することとを含む動作を実行させるコンピュータプログラムであって、
    前記Re-Pair圧縮解除は、前記識別された圧縮ブロック内に格納されている前記データに対応する記号ツリー内の各記号を繰り返し展開することを含み、
    前記1つまたは複数の圧縮ブロックは、辞書内の文字列の1つまたは複数のフロントコーディングされたバケットから生成され、前記1つまたは複数のフロントコーディングされたバケットは、サンプリングされて1つまたは複数のスーパーブロックを形成するように構成され、各1つまたは複数のスーパーブロックは、前記1つまたは複数の圧縮ブロックの圧縮のための共有文法を生成するために圧縮されるように構成され、
    前記記号ツリーは、複数のノードを備え、前記複数のノードは、終端文字、非終端文字、およびこれらの任意の組合せを含み、
    前記動作は更に、
    複数のRe-Pair圧縮解除を並列に実行し、
    終端文字の数は、所定の数に制限され、各記号の繰り返し展開の回数は、前記所定の数に基づき決定することを含み、
    前記Re-Pair圧縮解除は、少なくともextract関数と、locate関数とを用いるもので、
    前記extract 関数が、DecodeString関数を呼び出すもので、前記DecodeString関数が、前に復号された文字列をすでに格納している出力バッファ、およびヘッダの後に圧縮バケットを格納している、バケットバッファで呼び出され、前記圧縮バケットのビットがいくつすでに復号されているかを記録し、
    前記locate関数が、指定された文字列について圧縮辞書を検索するために、前記圧縮辞書内のバケットのヘッダに対して二分探索を実行し、
    前記Re-Pair圧縮解除は、
    前記記号ツリー内の各記号に対応するメモリ内のスタック位置を初期化し、
    ベクトル命令を使用して、前記記号ツリー内の各記号をストレージから前記メモリ内に同時にロードし、
    前記同時にロードされた記号と関連付けられている1つまたは複数の述語を評価することによって、前記記号を前記非圧縮データへと組み合わせ、
    前記所定の数を使用して、前記同時にロードすることと前記組み合わせることとを繰り返す、
    コンピュータプログラム。
JP2020106075A 2019-06-21 2020-06-19 高度なデータベース圧縮解除 Active JP7426907B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962864782P 2019-06-21 2019-06-21
US62/864,782 2019-06-21
US16/834,839 US11502705B2 (en) 2019-06-21 2020-03-30 Advanced database decompression
US16/834,839 2020-03-30

Publications (2)

Publication Number Publication Date
JP2021002830A JP2021002830A (ja) 2021-01-07
JP7426907B2 true JP7426907B2 (ja) 2024-02-02

Family

ID=71108359

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020106075A Active JP7426907B2 (ja) 2019-06-21 2020-06-19 高度なデータベース圧縮解除

Country Status (6)

Country Link
US (2) US11502705B2 (ja)
EP (1) EP3754516A1 (ja)
JP (1) JP7426907B2 (ja)
CN (1) CN112115684A (ja)
AU (1) AU2020204057A1 (ja)
CA (1) CA3084406A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11514027B2 (en) * 2019-06-07 2022-11-29 Sap Se Paged hybrid LOBs
US11502705B2 (en) * 2019-06-21 2022-11-15 Sap Se Advanced database decompression
US11507274B2 (en) * 2020-10-22 2022-11-22 Dell Products L.P. System and method to use dictionaries in LZ4 block format compression
US11550762B2 (en) 2021-02-24 2023-01-10 Sap Se Implementation of data access metrics for automated physical database design
CN114172521B (zh) * 2022-02-08 2022-05-10 苏州浪潮智能科技有限公司 一种解压缩芯片验证方法、装置、设备及可读存储介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3061278B2 (ja) * 1988-04-29 2000-07-10 ゼロックスコーポレーション 可変ビット長コード語のビット長通信方法
US5870036A (en) * 1995-02-24 1999-02-09 International Business Machines Corporation Adaptive multiple dictionary data compression
US5729228A (en) * 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
GB2381358A (en) * 2000-08-15 2003-04-30 Seagate Technology Llc Dual mode data compression for operating code
US7868789B1 (en) * 2009-06-28 2011-01-11 Sap Ag Dictionary-based order-preserving string compression for main memory column stores
US20110249743A1 (en) * 2010-04-09 2011-10-13 Jie Zhao Super-block for high performance video coding
US9792405B2 (en) * 2013-01-17 2017-10-17 Edico Genome, Corp. Bioinformatics systems, apparatuses, and methods executed on an integrated circuit processing platform
US10235377B2 (en) 2013-12-23 2019-03-19 Sap Se Adaptive dictionary compression/decompression for column-store databases
JP6531398B2 (ja) * 2015-01-19 2019-06-19 富士通株式会社 プログラム
US10027984B2 (en) * 2016-11-30 2018-07-17 Hewlett Packard Enterprise Development Lp Methods and systems for efficiently reading a data block from a data seglet with compressed data blocks
US11050436B2 (en) * 2019-06-21 2021-06-29 Sap Se Advanced database compression
US11502705B2 (en) * 2019-06-21 2022-11-15 Sap Se Advanced database decompression

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Ingo Muller et al.,Adaptive String Dictionary Compression in In-Memory Column-Store Database Systems,Proceedings of the 17th International Conference on Extending Database Technology (EDBT),2014年,p.283-294,http://openproceedings.org/EDBT/2014/paper_25.pdf
Robert Lasch et al.,Fast & Strong: The Case of Compressed String Dictionaries on Modern CPUs,DaMoN'19: Proceedings of the 15th International Workshop on Data Management on New Hardware July 2019,2019年07月01日,No. 4,https://dl.acm.org/doi/10.1145/3329785.3329924
関根 渓 他,大規模テキストに対する共有辞書を用いたRe-Pair圧縮法,第5回データ工学と情報マネジメントに関するフォーラム (第11回日本データベース学会年次大会),日本,2013年,p.1-8,DEIM Forum 2013 C10-2

Also Published As

Publication number Publication date
US20230085457A1 (en) 2023-03-16
CN112115684A (zh) 2020-12-22
JP2021002830A (ja) 2021-01-07
EP3754516A1 (en) 2020-12-23
US20200401405A1 (en) 2020-12-24
CA3084406A1 (en) 2020-12-21
US11962330B2 (en) 2024-04-16
US11502705B2 (en) 2022-11-15
AU2020204057A1 (en) 2021-01-14

Similar Documents

Publication Publication Date Title
JP7426907B2 (ja) 高度なデータベース圧縮解除
US11050436B2 (en) Advanced database compression
US7454403B2 (en) Method and mechanism of improving performance of database query language statements using data duplication information
US9558251B2 (en) Transformation functions for compression and decompression of data in computing environments and systems
Müller et al. Adaptive String Dictionary Compression in In-Memory Column-Store Database Systems.
CA2485423C (en) Storing and querying relational data in compressed storage format
JP3914662B2 (ja) データベース処理方法及び実施装置並びにその処理プログラムを記憶した媒体
EP3435256B1 (en) Optimal sort key compression and index rebuilding
Gog et al. Compressed suffix trees: Efficient computation and storage of LCP-values
Gog et al. Large-scale pattern search using reduced-space on-disk suffix arrays
US8140546B2 (en) Computer system for performing aggregation of tree-structured data, and method and computer program product therefor
CN111104377A (zh) 文件管理的方法、电子设备和计算机可读存储介质
US8812523B2 (en) Predicate result cache
US20180275961A1 (en) Method and system for fast data comparison using accelerated and incrementally synchronized cyclic data traversal algorithm
US20210303533A1 (en) Automated optimization for in-memory data structures of column store databases
US10366067B2 (en) Adaptive index leaf block compression
Wang et al. Rencoder: A space-time efficient range filter with local encoder
CN107066573B (zh) 一种基于三维表结构的数据关联存取方法及应用
US11914589B2 (en) Efficient computation of order by, order by with limit, min, and max in column-oriented databases
WO2023216575A1 (zh) 数据页处理的方法及其装置
Tenhunen Scientific Methods in Relational Database Compression Research
Fraser String Searching using External Memory
Theodorakis et al. An Empirical Evaluation of Variable-length Record B+ Trees on a Modern Graph Database System

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210709

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220621

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220725

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221014

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230328

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20230710

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231019

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20231031

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: 20240109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240123

R150 Certificate of patent or registration of utility model

Ref document number: 7426907

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150