<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Modularisierung leichtgewichtiger Kompressionsalgorithmen</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Juliana Hildebrandt</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dirk Habich</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Patrick Damme</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Wolfgang Lehner</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Technische Universität Dresden Database Systems Group 01189 Dresden</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2015</year>
      </pub-date>
      <fpage>54</fpage>
      <lpage>59</lpage>
      <abstract>
        <p>Im Kontext von In-Memory Datenbanksystemen nehmen leichtgewichtige Kompressionsalgorithmen eine entscheidende Rolle ein, um eine effiziente Speicherung und Verarbeitung groeßr Datenmengen im Hauptspeicher zu realisieren. Verglichen mit klassischen Komprimierungstechniken wie z.B. Huffman erzielen leichtgewichtige Kompressionsalgorithmen vergleichbare Kompressionsraten aufgrund der Einbeziehung von Kontextwissen und erlauben eine schnellere Kompression und Dekompression. Die Vielfalt der leichtgewichtigen Kompressionsalgorithmen hat in den letzten Jahren zugenommen, da ein groeßs Optimierungspotential u¨ber die Einbeziehung des Kontextwissens besteht. Um diese Vielfalt zu bew¨altigen, haben wir uns mit der Modularisierung von leichtgewichtigen Kompressionsalgorithmen besch¨aftigt und ein allgemeines Kompressionsschema entwickelt. Durch den Austausch einzelner Module oder auch nur eingehender Parameter lassen sich verschiedene Algorithmen einfach realisieren.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>EINFÜHRUNG</title>
      <p>
        der Zwischenergebnisse etabliert. Auf der einen Seite
sollten Zwischenergebnisse nicht mehr zum Beispiel durch
entsprechend angepasste Code-Generierung [
        <xref ref-type="bibr" rid="ref20">19</xref>
        ] oder durch den
Einsatz zusammengefu¨gter Operatoren [
        <xref ref-type="bibr" rid="ref17">16</xref>
        ] produziert
werden. Auf der anderen Seite sollten Zwischenergebnisse (wenn
sie beispielsweise nicht vermeidbar sind) so organisiert
werden, dass eine effiziente Weiterverarbeitung erm¨oglicht wird.
      </p>
      <p>
        Im Rahmen unserer aktuellen Forschung greifen wir uns den
optimierten Einsatz leichtgewichtiger
Kompressionsverfahren fu¨r Zwischenergebnisse in hauptspeicherzentrischen
Datenbankarchitekturen heraus und haben zum Ziel, eine
ausgewogene Anfrageverarbeitung auf Basis komprimierter
Zwischenergebnisse zu entwickeln [
        <xref ref-type="bibr" rid="ref14">13</xref>
        ]. Mit der expliziten
Kompression aller Zwischenergebnisse soll (i) die Effizienz
einzelner Datenbankanfragen bzw. der Durchsatz einer Menge an
Datenbankanfragen erh¨oht werden, da der
Hauptspeicherbedarf fu¨r Zwischenergebnisse reduziert und der
Mehraufwand zur Generierung der komprimierten Form m¨oglichst
gering gehalten wird und (ii) die durchg¨angige Betrachtung
der Kompression von den Basisdaten bis hin zur
Anfrageverarbeitung etabliert wird.
      </p>
      <p>
        Im Forschungsbereich der klassischen Kompression
existiert eine Vielzahl an wissenschaftlichen Publikationen.
Klassische Kompressionsverfahren, wie zum Beispiel
arithmetisches Kodieren [
        <xref ref-type="bibr" rid="ref27">26</xref>
        ], Huffman [
        <xref ref-type="bibr" rid="ref16">15</xref>
        ] und Lempel-Ziv [
        <xref ref-type="bibr" rid="ref31">30</xref>
        ],
erzielen hohe Kompressionsraten, sind jedoch rechenintensiv
und werden deshalb oft als schwergewichtige
Kompressionsverfahren bezeichnet. Speziell fu¨r den Einsatz in In-Memory
Datenbanksystemen wurden leichtgewichtige
Kompressionsalgorithmen entwickelt, die verglichen mit klassischen
Verfahren aufgrund der Einbeziehung von Kontextwissen
¨ahnliche Kompressionsraten erzielen, aber sowohl eine viel
schnellere Kompression als auch Dekompression erlauben.
Beispiele fu¨r leichtgewichtige Kompressionsalgorithmen sind unter
anderem Domain Kodierung (DC) [
        <xref ref-type="bibr" rid="ref25">24</xref>
        ], W¨orterbuch-basierte
Kompression (Dict) [
        <xref ref-type="bibr" rid="ref18 ref6 ref9">5, 8, 17</xref>
        ], reihenfolgeerhaltende
Kodierungen [
        <xref ref-type="bibr" rid="ref29 ref6">5, 28</xref>
        ], Laufl¨angenkodierung (RLE) [
        <xref ref-type="bibr" rid="ref22 ref8">7, 21</xref>
        ],
Frame-ofReference (FOR) [
        <xref ref-type="bibr" rid="ref13 ref32">12, 31</xref>
        ] und verschiedene Arten von
Nullkomprimierung [
        <xref ref-type="bibr" rid="ref2 ref21 ref22 ref24">1, 20, 21, 23</xref>
        ]. Die Anzahl der
leichtgewichtigen Kompressionsalgorithmen hat in den letzten Jahren
zugenommen, da ein groeßs Optimierungspotential u¨ber die
Einbeziehung von Kontextwissen besteht.
      </p>
      <p>Mit Blick auf unser Ziel der ausgewogenen
Anfrageverarbeitung auf Basis komprimierter Zwischenergebnisse
wollen wir eine breite Vielfalt an leichtgewichtigen
Kompressionsalgorithmen unterstu¨tzen, um die jeweiligen Vorteile der
Algorithmen effizient ausnutzen zu k¨onnen. Um dieses Ziel
zu erreichen, haben wir uns mit der Modularisierung von</p>
      <p>Abbildung 1: Allgemeines Schema fu¨r leichtgewichtige Komprimierungsalgorithmen.
Kompressionsalgorithmen besch¨aftigt. Fu¨r diese
Modularisierung haben wir eine Vielzahl von leichtgewichtigen
Kompressionsalgorithmen systematisch analysiert und ein
allgemeines Kompressionsschema bestehend aus wohldefinierten
Modulen abgeleitet. Durch den Austausch einzelner Module
oder auch nur eingehender Parameter lassen sich h¨aufig
verschiedene Algorithmen einfach darstellen. Des Weiteren wird
durch die Darstellung eines Algorithmus und durch die
Unterteilung in verschiedene, m¨oglichst unabh¨angige kleinere
Module die Verst¨andlichkeit erleichtert. Unsere entwickelte
Strukturierung bildet eine gute Basis zur abstrakten und
implementierungsunabh¨angigen Betrachtung von
leichtgewichtigen Kompressionsalgorithmen.</p>
      <p>Im Abschnitt 2 fu¨hren wir unser neues
Kompressionsschema fu¨r leichtgewichtige Kompressionsverfahren bestehend
aus vier Modulen ein. Dieses neue Kompressionsschema
nutzen wir in Abschnitt 3, um bekannte Muster zu definieren.</p>
      <p>Im Anschluss daran gehen wir auf die Modularisierung
konkreter Algorithmen exemplarisch im Abschnitt 4 ein. Der
Artikel schlietß dann mit einer Zusammenfassung und
einem Ausblick im Abschnitt 5.</p>
    </sec>
    <sec id="sec-2">
      <title>KOMPRESSIONSSCHEMA</title>
      <p>
        Mit dem Paradigma der Datenkompression aus den 1980er
Jahren [
        <xref ref-type="bibr" rid="ref26">25</xref>
        ] gibt es bereits eine eher allgemein gehaltene
Modularisierung fu¨r die Kompression von Daten im Kontext der
Datenu¨bertragung. Diese unterteilt Kompressionsverfahren
lediglich in ein Datenmodell, welches auf Grundlage bereits
gelesener Daten erstellt und angepasst wird, und einen
Kodierer, welcher eingehende Daten mithilfe des berechneten
Datenmodells kodiert. Diese Modularisierung eignet sich fu¨r
damals u¨bliche adaptive Kompressionsmethoden; greift aber
fu¨r viele Verfahren zu kurz. Die gesamte Zerlegung eines
Eingabedatenstroms wird beispielsweise aueßn vor gelasse n.
      </p>
      <p>Bei vielen aktuellen und gerade semiadaptiven Verfahren mit
mehreren P¨assen werden Daten mehrstufig zerlegt, um ein
komplexes Datenmodell zu erzeugen. Auch das
Zusammenfu¨gen der Daten wird im Normalfall wesentlich diffiziler
realisiert als mit einer einfachen Konkatenation
komprimierter Daten. Unser aus vier Modulen bestehendes
allgemeines Kompressionsschema in Abbildung 1 ist eine
Erweiterung des bisherigen Paradigmas der Datenkompression, das
eine wesentlich detailliertere und komplexere Abbildung
einer Vielzahl von leichtgewichtigen Algorithmen erlaubt.
Eingabe fu¨r ein Kompressionsverfahren ist hierbei immer eine
potentiell unendliche Sequenz von Daten. Ausgabe ist ein
Strom aus komprimierten Daten.</p>
      <p>Der Wortgenerator als erstes Modul zerlegt die Sequenz in
endliche Teilsequenzen resp. einzelne Werte. Mit einem
Datenstrom als Eingabe gibt ein Wortgenerator einen endlichen
Anfang aus und verarbeitet den Rest der Eingabe ebenso,
rekursiv. Ist die Eingabe des Wortgenerators endlich, kann
ihre Zerlegung stattdessen auch nicht rekursiv, z.B. ein
Optimierungsproblem sein. Wortgeneratoren erhalten als
zweite Eingabe die Information, wie die Eingabesequenz zerlegt
werden soll, als Berechnungsvorschrift. Entweder wird
datenunabh¨angig eine Anzahl von Werten ausgegeben (z.B.
immer 128 Werte oder immer ein Wert) oder datenabh¨angig
aufgrund inhaltlicher Merkmale die L¨ange der
auszugebenden Teilsequenz bestimmt. M¨oglich ist eine adaptive
Zerlegung, so dass sich die Berechnungsvorschrift nach jeder
Ausgabe einer Teilsequenz ¨andert. Als optionaler Datenfluss ist
dies im Kompressionsschema durch eine unterbrochene Linie
dargestellt.</p>
      <p>Das Datenmodell des Paradigmas der Datenkompression
wird durch das Modul der Parameterberechnung ersetzt. So
k¨onnen bei semiadaptiven Verfahren fu¨r endliche Sequenzen
statistische Werte berechnet werden, wie zum Beispiel ein
Referenzwert fu¨r Frame-of-Reference-Verfahren (FOR) oder
eine gemeinsame Bitweite, mit der alle Werte der endlichen
Sequenz kodiert werden k¨onnen. M¨oglicherweise gibt es feste
Eingabeparameter, beispielsweise eine Auswahl an erlaubten
Bitweiten. Eine adaptive Parameterberechnung zeichnet sich
durch einen Startwert als festen Eingabeparameter aus und
eine Ausgabe, die im n¨achsten Schritt wieder als Eingabe
und so dem Modul der Parameterberechnung als
Ged¨achtnis dient. Beispielsweise ben¨otigen
Differenzkodierungsverfahren eine adaptive Parameterberechnung.</p>
      <p>Der Kodierer erh¨alt einen atomaren Eingabewert sowie
m¨oglicherweise berechnete oder feste Parameter, die fu¨r die
Kodierung des Eingabewertes ben¨otigt werden. Solche
Parameter k¨onnen z.B. Referenzwerte, Bitweiten oder gar
Mappings sein, die die Abbildung einzelner Werte in einen Code
definieren. Ein Kodierer bildet einen Eingabewert
eineindeutig auf einen anderen Wert ab, was fu¨r die Dekodierbarkeit
notwendig ist. Ausgabe eines Kodierers ist ein
komprimierter Wert, der sich m¨oglicherweise durch einen Deskriptor wie
einer L¨angenangabe bei einer Abbildung in einen variablen
Code auszeichnet, um die Dekodierbarkeit zu gew¨ahrleisten.</p>
      <p>Soll eine endliche Sequenz, die der Wortgenerator ausgibt,
noch weiter zerlegt werden, kann das gesamte Schema noch
einmal mit einer Rekursion aufgerufen werden. Dabei geht
eine endliche Sequenz wieder in einen Wortgenerator ein und
wird dabei zerlegt, weiterverarbeitet und als
komprimierte Sequenz wieder zusammengefu¨gt. Diese komprimierte
Sequenz ist Ausgabe der Rekursion.</p>
      <p>Das letzte Modul des Zusammenfu¨gens erh¨alt als
Eingabe einen komprimierten Datenstrom, n¨amlich die
Ausgametrische
Eingabesequenz
Berchnungsvorschrift
Abbildung 2: Modularisierung semiadaptiver Frameo-fR-ef erenceV-erfahren.
ben des Kodierers resp. der Rekursion. Es gibt verschiedene
M¨oglichkeiten Daten zusammenzufu¨gen. Im einfachsten Fall
gibt es keine Deskriptoren, alle komprimierten Werte vc
werden nacheinander zusammengefu¨gt (notiert als vcn). Geh¨ort
zu jedem komprimierten Wert ein Deskriptor d, so k¨onnen
beispielsweise immer Paare aus Deskriptoren und
komprimierten Werten konkateniert werden (notiert als (d : vc)n)
oder immer eine bestimmte Anzahl l von Deskriptoren,
gefolgt von den zugeh¨origen komprimierten Werten (notiert
als (dl : vcl)n). Gerade bei semiadaptiven Verfahren mit
Rekursionen ist es m¨oglich, dass gemeinsame Deskriptoren fu¨r
mehrere Werte vom Modul der Parameterberechnung
ausgegeben und mit gespeichert werden mu¨ssen, so dass
verschiedene Anordnungen bei der Konkatenation aller Werte
denkbar sind.</p>
    </sec>
    <sec id="sec-3">
      <title>KOMPRESSIONSMUSTER</title>
      <p>Bekannte Kompressionstechniken wie zum Beispiel
Differenzkodierung, Frame-of-Reference (FOR), W
¨orterbuchkompression, Bitvektoren, Laufl¨angenkodierung (RLE) oder
die Unterdru¨ckung fu¨hrender Nullen lassen sich mit dem
allgemeinen Kompressionsschema als Muster ausdru¨cken. Das
bedeutet, dass gewisse modulare Anordnungen und Inhalte
einzelner Module durch die Begriffsdefinition der Techniken
festgelegt, andere inhaltliche Aspekte sowie andere in
Beziehung stehende Module hingegen nicht n¨aher spezifiziert
sind.
3.1</p>
    </sec>
    <sec id="sec-4">
      <title>Muster Frameo-fR-eference (FOR)</title>
      <p>Fu¨r die allgemeine Definition des FOR muss die
Eingabesequenz aus metrischen Werten bestehen, wie zum Beispiel
aus natu¨rlichen Zahlen. Diese werden als Differenz zum
Referenzwert mref kodiert. Abbildung 3 zeigt das entsprechende
Kompressionsschema. Der Wortgenerator gibt vom Anfang
der Sequenz jeweils einen Integerwert m aus. Der Kodierer
erh¨alt neben den Eingabewerten den Referenzwert mref als</p>
      <p>Rest</p>
      <p>Eingabesequenz
(298 : 301 :
303 : . . . )
k=1
statischer</p>
      <p>Wortgenerator</p>
      <p>Kodierer
mref = 273 vc = m − mref
metrischer
Wert m</p>
      <p>Zusammen- (25 : 28 :</p>
      <p>fügen 30 : . . . )
(mref : vcn)
oder vcn
Abbildung 3: Modularisierung statischer
Frameo-fReferenceV-erfahren.</p>
      <p>Parameter und berechnet die Differenz aus beiden Werten.
Das Modul des Zusammenfu¨gens konkateniert den
Referenzwert mit allen kodierten Werten (mref : vcn). Notwendig ist
die Speicherung des Referenzwertes aber nur, wenn dessen
Kenntnis beim Dekodieren nicht vorausgesetzt werden kann.
Dies ist durch einen optionalen Pfeil dargestellt. Im
dargestellten Beispiel werden die Werte des Eingabedatenstroms
als Differenz zum Referenzwert mref = 273 kodiert. Der
Referenzwert sei beim Dekodieren aus dem Kontext bekannt.</p>
      <p>Meist geh¨ort es zum Selbstverst¨andnis, dass der
Referenzwert fu¨r eine endliche Sequenz wie in Abbildung 2 aus den
gegebenen Daten berechnet und als Deskriptor gespeichert
wird. Nach welchen Regeln der erste dargestellte
Wortgenerator endliche Sequenzen ausgibt, ist dabei nicht
spezifiziert. Das dargestellte Muster kann eine potentiell
unendliche Sequenz als Eingabe erhalten. Es kann auch in einem
gr¨oeßren Zusammenhang mit anderen Modulen stehen und
nur eine endliche Teilsequenz weiter zerlegen. Im Modul der
Parameterberechnung wird aus der endlichen Sequenz, die
der erste Wortgenerator ausgibt, der Referenzwert mref
berechnet. Zum Beispiel kann als Referenzwert der kleinste
Wert der endlichen Sequenz gew¨ahlt werden. Die endliche
Sequenz geht in eine Rekursion ein. Arrangement und Inhalt
der Module innerhalb der Rekursion entsprechen der
Modularisierung statischer Frame-of-Reference-Verfahren (vgl.
Abb. 3). Der Wortgenerator innerhalb der Rekursion gibt
einzelne metrische Werte aus. Der Kodierer berechnet die
Differenz aus Eingabe- und Referenzwert. Alle Werte
werden gemeinsam mit dem Referenzwert konkateniert. Alle so
komprimierten endlichen Sequenzen, die der erste
dargestellte Wortgenerator ausgegeben hat, werden am Ende
zusammengefu¨gt, von Interesse sind fu¨r die allgemeinere Definition
des FOR jedoch nur die Module innerhalb der Rekursion.
3.2</p>
    </sec>
    <sec id="sec-5">
      <title>Muster Symbolunterdrückung</title>
      <p>
        Unter dem Begriff Symbolunterdru¨ckung werden sehr
verschiedene Komprimierungsverfahren zusammengefasst,
Pr¨asenzbits sowie Laufl¨angenkodierung explizit fu¨r Nullen, die
in potentiell unendliche Sequenzen auftauchen [
        <xref ref-type="bibr" rid="ref1 ref7">6</xref>
        ],
Laufl¨angenkodierung von Nullen und Leerzeichen [
        <xref ref-type="bibr" rid="ref22">21</xref>
        ] oder auch die
Eliminierung fu¨hrender und damit redundanter Nullen bei
bin¨ar kodierten Zahlen. Diese Methoden haben gemeinsam,
dass es im Zeichenvorrat ein ausgezeichnetes Symbol s gibt,
welches sich meist semantisch von allen anderen abhebt und
¨ofter auftaucht als andere Werte. Das ausgezeichnete Symbol
wird im Wortgenerator oder im Kodierer anders behandelt
als andere Symbole. Im Falle von Pr¨asenzbits ist dieses
Symbol der NULL-Wert. Nullen sind das neutrale Element der
Addition. Die genaue Anzahl fu¨hrender Nullen beeinflusst
Additionsoperationen nicht und ist damit an sich schon eine
redundante Information. Leerzeichen dienen in allen
Sprachen dazu, W¨orter voneinander zu separieren. Die Anzahl
an Wiederholungen von Leerzeichen zwischen
konkatenierten W¨ortern besitzt auf semantischer Ebene keinerlei
Bedeutung. Viele der Algorithmen, aber nicht alle, nutzen
hierfu¨r RLE-Kompressionen. F u¨r Symbolunterdru¨ckungen l¨asst
sich allgemein keine Modularisierung darstellen, da es sich
einfach nur durch die Sonderbehandlung eines Symbols
auszeichnet. In Kombination mit einer Laufl¨angenkodierung
gelingt aber eine Modularisierung mit unserem Schema.
      </p>
      <p>Merkmal der Laufl¨angenkodierung ist das Vorhandensein
von L¨aufen wn, endlichen Sequenzen der L¨ange n aus ein
und demselben Wert w. Werden wirklich einfach nur L¨aufe
von Werten kodiert, so reicht das simple
Kompressionsschema in Abbildung 4 aus. Der Wortgenerator unterteilt den</p>
      <p>Eingabedatenstrom in L¨aufe. Im Kodierer werden dann der
Wert w und die Laufl¨ange n kodiert. L¨aufe k¨onnen auch
in einer Sequenz zum Beispiel als fu¨hrende Nullen
eingebettet sein. Solche F¨alle liegen im Schnittbereich zwischen
Symbolunterdru¨ckung und Laufl¨angenkodierung. Dies ist fu¨r
statische Verfahren in Abbildung 5 dargestellt. Die
Informationen u¨ber Sequenzl¨angen des ausgezeichneten Wertes s
werden bei statischen Verfahren beim Zusammenfu¨gen zum
Beispiel in der Form (d(n) : vc)m gespeichert. Dabei ist d(n)
eine eineindeutige Abbildung.</p>
      <p>Sollen mehrere mit 32 Bits kodierte Werte mit geringerer,
aber einheitlicher Bitweite gespeichert werden, wird fu¨r die
Unterdru¨ckung fu¨hrender Nullen ein semiadaptives Schema
ben¨otigt (nicht dargestellt). Die gemeinsame Bitweite bw ist
Ausgabe der Parameterberechnung und kann als Deskriptor
angegeben werden, bw = d(n) ist eine Funktion von n, der
Anzahl der fu¨hrenden Nullen, die entfernt wurden. Jeder</p>
      <p>Wert w einer endlichen Sequenz hat eine komprimierte Form
vc und eine Laufl¨ange n. Beide werden entweder zusammen
oder in der Gruppe aus Deskriptoren und einer Gruppe aus
komprimierten Werten gespeichert.
4.</p>
    </sec>
    <sec id="sec-6">
      <title>ALGORITHMENM-ODULARISIERUNG</title>
      <p>
        Die vorgestellten und auch weitere Muster finden sich in
verschiedenen Kompressionsalgorithmen, oft auch kombiniert
oder auf mehreren Rekursionsebenen miteinander verwoben,
wieder. Sich ¨ahnelnde Algorithmen unterscheiden sich meist
nur geringfu¨gig in manchen Modulen oder sogar nur in
Parametern, die in ein Modul eingehen. Beispielsweise ¨ahneln
sich die Algorithmen varint-PU und varint-SU [
        <xref ref-type="bibr" rid="ref23">22</xref>
        ] -
letzterer ist besser bekannt als VByte [
        <xref ref-type="bibr" rid="ref10 ref11 ref12">11, 10, 9</xref>
        ] - sehr. VByte
kodiert 32-Bit-Integerwerte mit ein bis 5 Bytes, wobei ein Byt e
aus einem Deskriptorbit und 7 Datenbits besteht. Ebenso ist
dies bei varint-PU der Fall, beide Algorithmen unterscheid en
sich nur in der Anordnung der Daten- und Deskriptorbits.
      </p>
      <p>W¨ahrend bei VByte ein Bit pro zusammenh¨angendem Byte
als Deskriptor dient, steht bei varint-PU der gesamte
Deskriptor an einem Ende des komprimierten Integerwertes.</p>
      <p>Ein Beispiel zeigt Abbildung 6. Nicht belegte Bits
bedeuten, dass diese im Beispiel nicht ben¨otigt und weggelassen
werden. Der Integerwert wird in komprimierter Form mit 3
statt 4 Bytes kodiert.</p>
      <p>Beide Formate haben den gleichen modularen Aufbau
(siehe Abbildung 7). Der rekursive statische Wortgenerator gibt
immer eine Zahl aus. Da die Kodierung der Eingabe bei
diesen Algorithmen soweit spezifiziert ist, dass die Zahlen als
32-Bit-Integerwerte kodiert sind, ist die ausgegebene Zah l
ein eingebetteter Lauf von der Form 0l1w1 . . . w31−l (bzw.
032 fu¨r den Wert 0). Der Deskriptor bw/7 gibt die Anzahl der
fu¨r die Datenbits ben¨otigten 7-Bit-Einheiten an. Allein aus
dem komprimierten Wert ohne Deskriptor ist die Laufl¨ange
der bei der Kodierung unterschlagenen Nullen nicht
ermittelbar, schon weil eine Folge von Werten nicht mehr
dekodierbar ist. Die Laufl¨ange ist allein aus dem Deskriptor (und
dem Wissen, dass es sich um 32-Bit-Integerwerte handelt)
ersichtlich. Somit ist das Laufl¨angenmuster bei varint-SU
und varint-PU begr u¨ndbar. Da das Zeichen 0 eine
Sonderstellung einnimmt, weil fu¨hrende Nullen als Lauf betrachtet
werden, findet sich hier, wie bei allen varint-Algorithmen,
auch eine Symbolunterdru¨ckung. Beide Algorithmen
unterscheiden sich im Kompressionsschema nur im Modul des
Zusammenfu¨gens. Das Symbol : wird hier als
Konkatenationssymbol fu¨r abz¨ahlbar viele Werte verwendet.</p>
      <p>Ein weiteres Beispiel fu¨r einen modularisierten
Algorithmus ist FOR mit Binary Packing (nicht dargestellt), der
sich durch marginale Ver¨anderungen und weitere
Definitionen aus dem Kompressionsschema fu¨r semiadaptive
FORVerfahren (Abb. 2) ergibt. Beim Binary Packing wird fu¨r
eine endliche Sequenz von n bin¨ar kodierten Integerwerten
z.B. zu 32 Bits eine gemeinsame Bitweite bw berechnet, mit
der alle n Werte kodiert werden k¨onnen. Die erste A¨nderung
im Kompressionsschema betrifft die Parameterberechnung.</p>
      <p>Zus¨atzlich zum Referenzwert fu¨r eine endliche Sequenz, die
der erste Wortgenerator ausgibt, muss die gemeinsame
Bitweite bw berechnet und ausgegeben werden. Die zweite
A¨nderung betrifft den Kodierer innerhalb der Rekursion. Nach
der Berechnung der Differenz aus Eingabe- und
Referenzwert wird der so erhaltene Werte mit Bitweite bw bin¨ar
kodiert. Im Modul des Zusammenfu¨gens muss dann bw als ein
weiterer gemeinsamer Deskriptor zum Beispiel in der Form
varint-SU
0
1
1
32
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 0 1 0 1 1 1 1 0 1
24 16 8
0
Deskriptorbit</p>
      <p>Datenbits</p>
      <p>Abbildung 7: Modularisierung der Algorithmen varintS-U un d varintP-U.
(mref : bw : vnc) gespeichert werden. Die Modularisierung
dieses Algorithmus zeichnet sich durch die Muster FOR,
Laufl¨angenkodierung und Symbolunterdru¨ckung aus.</p>
      <p>
        Nicht fu¨r alle Algorithmen ist diese recht einfache
Modularisierung ausreichend. Auf PFOR basierende Algorithmen
[
        <xref ref-type="bibr" rid="ref19 ref28 ref30 ref32">31, 29, 27, 18</xref>
        ] kodieren die meisten Eingabewerte aus
natu¨rlichen Zahlen mit der gleichen Bitweite bw. Die gr¨oeßren, die
nicht mit der Bitweite bw kodierbar sind, werden allerdings
als Ausnahme deklariert und auf andere Weise kodiert und
an anderer Stelle gespeichert. Dafu¨r ben¨otigt das erweiterte
Schema ein Splitmodul, welches Daten aufgrund inhaltlicher
Merkmale in verschiedene Gruppen aufteilt und ausgibt. Fu¨r
jede dieser Gruppen muss ein separater Kodierer verfu¨gbar
sein, wobei die kodierten Werte aller Gruppen am Ende
gemeinsam zusammengefu¨gt werden.
      </p>
    </sec>
    <sec id="sec-7">
      <title>5. ZUSAMMENFASSUNG UND AUSBLICK</title>
      <p>
        Unser entwickeltes Kompressionsschema bestehend aus vier
Modulen ist durchaus geeignet, um eine Vielzahl
verschiedener leichtgewichtiger Kompressionsalgorithmen gut zu
modularisieren und systematisch darzustellen. Durch den
Austausch einzelner Module oder auch nur eingehender
Parameter lassen sich verschiedene Algorithmen mit dem gleichen
Kompressionsschema darstellen. Einige Module und
Modulgruppen tauchen in verschiedenen Algorithmen immer
wieder auf, wie zum Beispiel die gesamte Rekursion, die das
Binary Packing ausmacht, die sich in allen PFOR- und
SimpleAlgorithmen [
        <xref ref-type="bibr" rid="ref28 ref3 ref30 ref4 ref5">2, 3, 29, 27, 4</xref>
        ] findet. Die Verst¨andlichkeit
eines Algorithmus wird durch die Unterteilung in
verschiedene, m¨oglichst unabh¨angige kleinere Module, welche
u¨berschaubare Operationen ausfu¨hren, verbessert. Die
Strukturierung durch das entwickelte Schema bildet aus unserer
Sicht eine gute Basis zur abstrakten Betrachtung von
leichtgewichtigen Kompressionsalgorithmen. Als Muster k¨onnen
nicht nur bestimmte Techniken, sondern auch andere
Eigenschaften von Kompressionsalgorithmen dargestellt
werden. Statische Verfahren wie z.B. varint-SU und varint-PU
bestehen nur aus Wortgenerator, Kodierer und dem Modul
des Zusammenfu¨gens. Adaptive Verfahren haben einen
adaptiven Wortgenerator, eine adaptive Parameterberechnung
oder beides. Semiadaptive Verfahren zeichnen sich durch
eine Parameterberechnung und eine Rekursion aus, in deren
Wortgenerator oder Kodierer die Ausgabe der
Parameterberechnung eingeht.
      </p>
      <p>Durch die M¨oglichkeit Module sehr passend
zusammenzustellen und mit Inhalt zu fu¨llen, ergibt sich ein
m¨achtiges Werkzeug fu¨r den automatisierten Bau von
Algorithmen. Das Kompressionsschema bietet eine aus unserer Sicht
fundierte Grundlage und er¨offnet die M¨oglichkeit, fu¨r einen
gegebenen Kontext sehr gezielt speziell zugeschnittene
Algorithmen mit bestimmten Eigenschaften wie zum Beispiel der
Art der Anpassbarkeit zusammenzubauen. Weiterhin
k¨onnen verschiedene Muster wie FOR, Differenzkodierung,
Symbolunterdru¨ckung oder Laufl¨angenkodierung an den
Kontext angepasst eingesetzt werden und das auf
verschiedensten Ebenen miteinander kombiniert.</p>
      <p>
        Fu¨r die Fortfu¨hrung dieses Gedankens ist es notwendig,
einen noch st¨arkeren Zusammenhang zwischen
Kontextwissen und passender Schemazusammenstellung sowie
passenden Parametereingaben herzustellen. Des Weiteren wird
gerade fu¨r das theoretische Grundkonzept eine passende
praktische Umsetzung angegangen. Fu¨r die praktische
Umsetzung wird ein Framework bestehend aus den eingefu¨hrten
Modulen anvisiert, so dass der Zusammenbau
leichtgewichtiger Kompressionsalgorithmen wie beschrieben realisiert
werden kann. Die gr¨otße Herausforderung bei der praktischen
Umsetzung wird die Effizienz der Algorithmen sein. Um eine
vergleichbare Effizienz zu den bisherigen Implementierungen
erzielen zu k¨onnen, sind unterschiedliche Ans¨atze notwendig.
Ein vielversprechender Ansatz dabei ist die Spezialisierung
von generischen Code mit dem Einsatz spezieller
Compilertechniken, wie wir es in [
        <xref ref-type="bibr" rid="ref15">14</xref>
        ] angesprochen haben. U¨ber die
Spezialisierung kann hochoptimierter Ausfu¨hrungscode
erzeugt werden, wobei das vorhandene Hintergrundwissen zur
Codeoptimierung dem Compiler beigebracht werden muss.
      </p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgments</title>
      <p>Diese Arbeit ist im Rahmen des DFG-finanzierten Projektes
L”eichtgewichtige Kompressionsverfahren zur Optimierun g
komplexer Datenbankanfragen(”LE-1416/26-1) entstanden .</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>6. LITERATUR</mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Abadi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Madden</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Ferreira</surname>
          </string-name>
          .
          <article-title>Integrating compression and execution in column-oriented database systems</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <fpage>6716</fpage>
          -
          <lpage>82</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>V. N.</given-names>
            <surname>Anh</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Moffat</surname>
          </string-name>
          .
          <article-title>Inverted index compression using word-aligned binary codes</article-title>
          .
          <source>Inf. Retr.</source>
          ,
          <volume>8</volume>
          (
          <issue>1</issue>
          ):
          <fpage>1511</fpage>
          -
          <lpage>66</lpage>
          , Jan.
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>V. N.</given-names>
            <surname>Anh</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Moffat</surname>
          </string-name>
          .
          <article-title>Improved word-aligned binary compression for text indexing</article-title>
          .
          <source>IEEE Trans. on Knowl. and Data Eng</source>
          .,
          <volume>18</volume>
          (
          <issue>6</issue>
          ):
          <fpage>8578</fpage>
          -
          <lpage>61</lpage>
          ,
          <year>June 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>V. N.</given-names>
            <surname>Anh</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Moffat</surname>
          </string-name>
          .
          <article-title>Index compression using 64-bit words</article-title>
          .
          <source>Softw. Pract</source>
          . Exper.,
          <volume>40</volume>
          (
          <issue>2</issue>
          ):
          <fpage>1311</fpage>
          -
          <lpage>47</lpage>
          , Feb.
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>G.</given-names>
            <surname>Antoshenkov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. B.</given-names>
            <surname>Lomet</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Murray</surname>
          </string-name>
          .
          <article-title>Order preserving compression</article-title>
          .
          <source>In ICDE</source>
          , pages
          <fpage>6556</fpage>
          -
          <lpage>63</lpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Aronson</surname>
          </string-name>
          .
          <article-title>Computer science and technology: data compression - a comparison of methods</article-title>
          .
          <source>NBS special publication 500-12</source>
          , Department of Commerce, National Bureau of Standards,
          <source>Institute for Computer Sciences and Technology</source>
          , Washington, DC, USA,
          <year>June 1977</year>
          . ERIC Document Number:
          <fpage>ED149732</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Bassiouni</surname>
          </string-name>
          .
          <article-title>Data compression in scientific and statistical databases</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>11</volume>
          (
          <issue>10</issue>
          ):
          <fpage>10471</fpage>
          -
          <lpage>058</lpage>
          ,
          <year>1985</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Boncz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Manegold</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M. L.</given-names>
            <surname>Kersten</surname>
          </string-name>
          .
          <article-title>Database architecture optimized for the new bottleneck: Memory access</article-title>
          .
          <source>In VLDB</source>
          , pages
          <fpage>546</fpage>
          -
          <lpage>5</lpage>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Bu</surname>
          </string-name>
          ¨ttcher, C. Clarke, and
          <string-name>
            <given-names>G. V.</given-names>
            <surname>Cormack</surname>
          </string-name>
          . Information Retrieval:
          <article-title>Implementing and Evaluating Search Engines</article-title>
          . The MIT Press,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>B.</given-names>
            <surname>Croft</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Metzler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Strohman</surname>
          </string-name>
          .
          <source>Search Engines: Information Retrieval in Practice. Addison-Wesley Publishing Company, USA, 1st edition</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>J.</given-names>
            <surname>Dean</surname>
          </string-name>
          .
          <article-title>Challenges in building large-scale informati on retrieval systems: invited talk</article-title>
          . In R. A.
          <string-name>
            <surname>Baeza-Yates</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Boldi</surname>
            ,
            <given-names>B. A.</given-names>
          </string-name>
          <string-name>
            <surname>Ribeiro-Neto</surname>
          </string-name>
          , and B. B. Cambazoglu, editors,
          <source>WSDM, page 1. ACM</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Goldstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ramakrishnan</surname>
          </string-name>
          , and
          <string-name>
            <given-names>U.</given-names>
            <surname>Shaft</surname>
          </string-name>
          .
          <article-title>Compressing relations and indexes</article-title>
          .
          <source>In ICDE Conference</source>
          , pages
          <fpage>3703</fpage>
          -
          <lpage>79</lpage>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>D.</given-names>
            <surname>Habich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Damme</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Lehner</surname>
          </string-name>
          .
          <article-title>Optimierung der Anfrageverarbeitung mittels Kompression der Zwischenergebnisse</article-title>
          .
          <source>In BTW 2015</source>
          , pages
          <fpage>2592</fpage>
          -
          <lpage>78</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [14]
          <string-name>
            <surname>C. H¨ansch</surname>
            , T. Kissinger,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Habich</surname>
            , and
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Lehner</surname>
          </string-name>
          .
          <article-title>Plan operator specialization using reflective compiler techniques</article-title>
          .
          <source>In BTW 2015</source>
          , pages
          <fpage>3633</fpage>
          -
          <lpage>82</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Huffman</surname>
          </string-name>
          .
          <article-title>A method for the construction of minimum-redundancy codes</article-title>
          .
          <source>Proceedings of the Institute of Radio Engineers</source>
          ,
          <volume>40</volume>
          (
          <issue>9</issue>
          ):
          <fpage>10981</fpage>
          -
          <lpage>101</lpage>
          ,
          <year>September 1952</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kissinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Schlegel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Habich</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Lehner</surname>
          </string-name>
          . QPPT:
          <article-title>query processing on prefix trees</article-title>
          .
          <source>In CIDR</source>
          <year>2013</year>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>T. J.</given-names>
            <surname>Lehman</surname>
          </string-name>
          and
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Carey</surname>
          </string-name>
          .
          <article-title>Query processing in main memory database management systems</article-title>
          .
          <source>In SIGMOD Conference</source>
          , pages
          <fpage>2392</fpage>
          -
          <lpage>50</lpage>
          ,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>D.</given-names>
            <surname>Lemire</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Boytsov</surname>
          </string-name>
          .
          <article-title>Decoding billions of integers per second through vectorization</article-title>
          .
          <source>CoRR, abs/1209.2137</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>T.</given-names>
            <surname>Neumann</surname>
          </string-name>
          .
          <article-title>Efficiently compiling efficient query plans for modern hardware</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>4</volume>
          (
          <issue>9</issue>
          ):
          <fpage>5395</fpage>
          -
          <lpage>50</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>H. K.</given-names>
            <surname>Reghbati</surname>
          </string-name>
          .
          <article-title>An overview of data compression techniques</article-title>
          .
          <source>IEEE Computer</source>
          ,
          <volume>14</volume>
          (
          <issue>4</issue>
          ):
          <fpage>717</fpage>
          -
          <lpage>5</lpage>
          ,
          <year>1981</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Roth</surname>
          </string-name>
          and
          <string-name>
            <given-names>S. J. V.</given-names>
            <surname>Horn</surname>
          </string-name>
          .
          <article-title>Database compression</article-title>
          .
          <source>SIGMOD Record</source>
          ,
          <volume>22</volume>
          (
          <issue>3</issue>
          ):
          <fpage>313</fpage>
          -
          <lpage>9</lpage>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>A. A.</given-names>
            <surname>Stepanov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. R.</given-names>
            <surname>Gangolli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Rose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. J.</given-names>
            <surname>Ernst</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P. S.</given-names>
            <surname>Oberoi</surname>
          </string-name>
          .
          <article-title>Simd-based decoding of posting lists</article-title>
          .
          <source>In CIKM</source>
          , pages
          <fpage>3173</fpage>
          -
          <lpage>26</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>T.</given-names>
            <surname>Westmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kossmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Helmer</surname>
          </string-name>
          , and
          <string-name>
            <surname>G. Moerkotte.</surname>
          </string-name>
          <article-title>The implementation and performance of compressed databases</article-title>
          .
          <source>SIGMOD Record</source>
          ,
          <volume>29</volume>
          (
          <issue>3</issue>
          ):
          <fpage>556</fpage>
          -
          <lpage>7</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>T.</given-names>
            <surname>Willhalm</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Popovici</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Boshmaf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Plattner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Zeier</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Schaffner</surname>
          </string-name>
          .
          <article-title>Simd-scan: Ultra fast in-memory table scan using on-chip vector processing units</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>2</volume>
          (
          <issue>1</issue>
          ):
          <fpage>3853</fpage>
          -
          <lpage>94</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>R. N.</given-names>
            <surname>Williams</surname>
          </string-name>
          .
          <source>Adaptive Data Compression</source>
          .
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>I. H.</given-names>
            <surname>Witten</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. M.</given-names>
            <surname>Neal</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. G.</given-names>
            <surname>Cleary</surname>
          </string-name>
          .
          <article-title>Arithmetic coding for data compression</article-title>
          .
          <source>Communications ACM</source>
          ,
          <volume>30</volume>
          (
          <issue>6</issue>
          ):
          <fpage>5205</fpage>
          -
          <lpage>40</lpage>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>H.</given-names>
            <surname>Yan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ding</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Suel</surname>
          </string-name>
          .
          <article-title>Inverted index compression and query processing with optimized document ordering</article-title>
          .
          <source>In WWW</source>
          , pages
          <fpage>4014</fpage>
          -
          <lpage>10</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zandi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Iyer</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Langdon</surname>
          </string-name>
          .
          <article-title>Sort order preserving data compression for extended alphabets</article-title>
          .
          <source>In Data Compression Conference</source>
          , pages 330
          <fpage>3</fpage>
          -
          <lpage>39</lpage>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>J.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Long</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Suel</surname>
          </string-name>
          .
          <article-title>Performance of compressed inverted list caching in search engines</article-title>
          .
          <source>In WWW</source>
          , pages
          <fpage>3873</fpage>
          -
          <lpage>96</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>J.</given-names>
            <surname>Ziv</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Lempel</surname>
          </string-name>
          .
          <article-title>A universal algorithm for sequential data compression</article-title>
          .
          <source>IEEE Transactions on Information Theory</source>
          ,
          <volume>23</volume>
          :
          <fpage>3373</fpage>
          -
          <lpage>43</lpage>
          ,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>M.</given-names>
            <surname>Zukowski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Heman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Nes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Boncz</surname>
          </string-name>
          .
          <article-title>Super-scalar ram-cpu cache compression</article-title>
          .
          <source>In ICDE, page 59</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>