<!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>Redesigning Query Engines for White-box Compression</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Diego Tome´ tome@cwi.nl CWI Amsterdam</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>NL Supervised by Peter Boncz</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Modern columnar databases heavily use compression to reduce memory footprint and boost query execution. These techniques, however, are implemented as a "black box", since their decompression logic is hard-coded and part of the table scan infrastructure. We proposed a novel compression model called White-box compression that views compression actions as functions over the physical columns stored in a block. Because these functions become visible as expressions in the query plan, many more optimizations can be made by the database system, boosting query execution speed. These functions are learnt from the data and also allow the data to be stored much more compactly, by decomposing string values, storing data in appropriate data-types automatically, and exploiting correlations between columns. White-box compression opens up a whole new set of research questions. We started with (1) How to learn whitebox compression expressions (functions) from the data automatically? This Ph.D. research will subsequently study (2) How to leverage white-box compression with (run-time) query optimizations? (3) How can we integrate white-box compression in a query engine, if the white-box functions may be di erent for each block of data?</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. INTRODUCTION</title>
      <p>
        Data compression is widely used on analytical databases
to reduce data storage size, as well as data transfer sizes
(over the network, disk, RAM) and provide faster query
execution. This is often e ective on columnar databases,
where the data pertaining to the same column are stored
contiguously because compression algorithms perform
better on data with low information entropy [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. While data
transfer can bene t from the improved compression ratio
in columnar databases, query execution might su er from
slow decompression, requiring careful consideration of which
compression technique should be applied.
      </p>
      <p>
        The literature provides a number of compression
techniques for databases. On the one hand, there are
generalProceedings of the VLDB 2020 PhD Workshop, August 31st, 2020. Tokyo,
Japan. Copyright (C) 2020 for this paper by its authors. Copying permitted
for private and academic purposes.
purpose compression methods based on Hu man [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], or
arithmetic coding [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], and Lempel Ziv [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. While they
achieve good compression ratios, encoding/decoding speeds
are relatively low, typically impacting query performance.
For this reason, columnar databases rely on compression
methods that are more light-weight, such as Run Length
Encoding (RLE), Frame-of-Reference (FOR), and Dictionary
compression (DICT)[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. These lightweight schemes take into
account some knowledge of the data-type and -distribution,
resulting also in good compression ratio but much higher
(de)compression speed.
      </p>
      <p>
        A limitation of the state-of-the-art is that these existing
techniques are implemented as "black-box" in the current
database systems and the decompression logic is hidden
inside the scan. The query plan is not aware of any
decompression step, while the current approach is to eagerly
decompress all the data in the scan, keeping the execution
engine oblivious of the compression techniques { wasting
optimization opportunities like predicate evaluation over
partially decompressed data. Furthermore, we observed that in
real-life datasets, data is often encoded in wrong data types
(typically as strings), contain codes that combine strings
and numerical parts (to which lightweight compression is
not applicable), and/or has highly correlated columns [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
Regarding the latter, columnar formats like Parquet
compress datasets with strong column correlations worse than
row-formats such as Avro, because of the general-purpose
compression typically slapped on top of these formats (in a
row-format, the co-located redundancies in a row get
compressed away). Column stores store each column
independently and lose this opportunity.
      </p>
      <p>
        With white-box compression we proposed a completely
new framework for compression in database systems. A
table is a set of logical columns that is reconstructed by
applying data-dependent functions over so-called physical columns
that are stored. The compression function is therefore also
data (meta-data), stored in the block header. This
function is learnt from the data when writing it into blocks.
We showed in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] that this is feasible, that it greatly reduces
storage size, and provides interesting query optimization
opportunities.
      </p>
      <p>However, we argue that to make this new idea usable
in data systems, we need to explore new query
optimization opportunities and redesign the query engine. Not only
does white-box compression introduce unexplored
opportunities for selection push-down, late decompression, and
compressed execution. A signi cant challenge introduced
by white-box compression is that when a block of data is</p>
      <p>A
"GSA_8350"
"GSA_8351"
"HHS_2072"
"TREAS_4791"
"TREAS_4792"
"HHS_2073"
"GSA_8352"
B = map(P, dictBP)</p>
      <sec id="sec-1-1">
        <title>Dictionary BP</title>
      </sec>
      <sec id="sec-1-2">
        <title>Decompression Function</title>
        <p>A = concat(map(P, dictAP), const("_").format(Q, "%d"))</p>
        <p>B
"GENERAL SERVICES ADMINISTRATION" 0 8350
"GENERAL SERVICES ADMINISTRATION" 0 8351
"HEALTH AND HUMAN SERVICES" 1 2072
"TREASURY" 2 4791
"TREASURY" 2 4792
"HEALTH AND HUMAN SERVICES" 1 2073
"GENERAL SERVICES ADMINISTRATION" 0 8352
written to disk, the white-box compressed model is learnt,
depending on the characterization of that block of data. As
such, each block may use a (slightly) di erent compressed
representation. This already used to be the case in
traditional compression, but since black-box compression hides
the compression from the query engine this is only felt in the
scan. With white-box compression, the compression
functions, which are computational query plan expressions1 will
change continuously during query execution, whenever data
from a new block is processed. This calls for a database
system that continuously re-optimizes its query plans and
adapts them to the current characteristics of the data.
Paper Structure. The rest of this paper is structured
as follows. Section 2 provides an overview of related work.
Then, in section 3, we describe the white-box compression
model and we discuss possible solutions for the challenges
that arise. Finally, in section 4, we discuss our research plan.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>RELATED WORK</title>
      <p>
        The problem of e cient compression on database
systems has received signi cant attention over the years [
        <xref ref-type="bibr" rid="ref10 ref16 ref21 ref3">10,
16, 21, 3</xref>
        ]. As a result, compression has been well-explored
on columnar databases for e cient query processing [
        <xref ref-type="bibr" rid="ref11 ref14 ref15 ref21 ref3 ref5 ref8">21, 3,
5, 11, 15, 8, 14</xref>
        ]. On these databases, one can achieve a
good balance between compression ratio and performance
with lightweight techniques.
      </p>
      <p>
        The lightweight techniques provided advances on
exploiting compressed data during the data processing pipeline,
the so-called compressed execution [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ]. As a result, It
brought performance improvement by allowing the
pushdown of predicates to compressed data in the scan
operator [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. On more advanced analytical systems like
Hyper [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], data is stored in self-contained blocks allowing
predicate push-down and selective scan on compressed data.
Nevertheless, they have to sacri ce storage by keeping a
byte-addressable representation.
      </p>
      <p>
        Decompression beyond scans has been also explored [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] by
re-compressing the data in between operators. The goal is
to reduce the memory footprint for large intermediates but
it is limited to the column-at-time processing model. On
white-box compression, decompression is part of the query
plan which allows the optimizer to delay decompression and
push-down predicates to partially decompressed data.
      </p>
      <p>
        Google recently described its query engine called
Procella and its new big data le format Artus [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Artus
introduces customized versions of lightweight techniques like
RLE, Delta, and Dictionary encoding. On the API of Artus,
RLE columns and dictionary indices are directly exposed to
the query engine, allowing the engine to aggressively push
computations down to the data format. In White-box
compression, we also want to expose the compressed data to the
query engine. Rather than implementing FOR explicitly,
white-box compression sees FOR as an additional function,
that adds a constant base to a physical column holding a
small integer. RLE in white-box compression stores a
logical column as two (much shorter) physical columns holding
(count, value). On top of that, white-box compression allows
1In our current model, they could become even more
adventurous as follow-up work.
0 "GENERAL SERVICES ADMINISTRATION"
1 "HEALTH AND HUMAN SERVICES"
2 "TREASURY"
much more complex data transformations, as well as the
exploitation of column correlations (e.g. di erent
dictionaryencoded columns using the same physical column holding
the codes).
      </p>
      <p>
        More recent research in compression has moved towards a
storage method for decomposing string attributes in column
stores [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. This decomposition of strings relies on nding
patterns to split the string into segments and compress them
independently. White-box compression, on the other hand,
is a more generic model, not restricted to strings, and which
as mentioned can leverage column correlations. Further [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
restrict query execution optimizations to the scan library,
while in our approach, compression functions become
computational expressions part of the query plan. Making that
work over blocks that are compressed di erently is one main
challenge addressed in this thesis.
3.
      </p>
    </sec>
    <sec id="sec-3">
      <title>WHITE-BOX COMPRESSION</title>
      <p>In white-box compression, we de ne an operator as a
function o that takes as input zero or more columns and optional
metadata information and outputs a column: o : [C C
:::] [M ] ! C. The domain of o is composed of columns and
metadata and the co-domain is a set of columns. A column
is de ned by its data type and the values that it contains.
All the values that do not t the chosen data representation
are considered exceptions and receive special treatment. In
the model, these values are stored separately in physical
exception columns that can themselves be further white-box
compressed.</p>
      <p>Figure 1 illustrates a table compressed with white-box
compression. Column A has a particular pattern composed
of a string pre x, an underscore character, and a number.
In this case, it is not possible to compress this column with
dictionary encoding because it has a high cardinality.
Therefore, the only way of compressing this column would be by
using a heavyweight technique like LZ4 or some other
variant that has the problem of slow de/compression.
Type/Column
varchar
tinyint
smallint
double
decimal
integer
boolean
80.3%
0%
13.7%
2.3%
2.1%
0.9%
0.7%</p>
      <p>For cases not covered by any lightweight technique, the
white-box model can enable compression by changing the
physical representation of columns. For instance, column A
can be decomposed into three other columns that can be
further compressed. The pre x string can be now stored as the
dictionary AP, the underscore as a constant and the number
can be stored as an integer that can be further compressed
with some other lightweight technique.</p>
      <p>
        Another compression opportunity happens when column
B is stored in the dictionary BP. In this case, we are able to
represent one column as a function of another (i.e. column
correlation) by identifying the same association between
dictionaries AP and BP. As a result, only one physical column
(i.e. P) is stored together with the two dictionaries and the
decompression function to reconstruct the logical columns.
Column Correlations. The particular focus of this work
on correlations is based on their frequent occurrence on
realworld datasets. We have recently introduced the Public BI
benchmark [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], a real-world dataset derived from 46 of the
biggest Tableau workbooks [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. While exploring this data,
we noticed that it tends to comprise patterns not found in
synthetic database benchmarks like TPC-H and TPC-DS.
In this dataset, data is often skewed in terms of value and
frequency distribution and it is correlated across columns.
In particular, most of the correlations are between nominal
values (i.e. strings).
      </p>
      <p>
        In our work [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], we formally de ne the white-box
compression model and propose a learning algorithm to identify
patterns on the data. Our initial approach already doubles the
compression factor on the public BI benchmark [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Whitebox compression is very e ective here because this data has
many string columns. In Table 1 we show the data type
distribution for logical and physical columns on the public BI
benchmark. Thanks to white-box compression the volume
of strings is reduced and the dataset becomes more
compressible. Integer columns are stored in smaller types while
boolean columns are represented as constant operations
inside an expression. Correlated columns play an important
role since we noticed a reduction of 70% in the number of
columns after white-box compression.
      </p>
    </sec>
    <sec id="sec-4">
      <title>WHITE-BOX DECOMPRESSION</title>
      <p>In the previous section we showed how White-box
compression is de ned and the main advantages over black-box
ΓB,C
⋈</p>
      <p>σ</p>
      <p>LIKE 'TREAS%'
iso...
n
s
e
r
pomC A
c
e
D
/no...
it
u
c s
rxyeeE itcopneX P
u x
Q E</p>
      <p>LZ4 FOR DICT</p>
      <p>concat map
map format
n
a
c
S
header
101010
100110</p>
      <sec id="sec-4-1">
        <title>Block of data</title>
      </sec>
      <sec id="sec-4-2">
        <title>B Logical </title>
        <p>columns
Q Physical 
columns
ion...
s
s
e
r
pm C
o
c
e
D
/n...
o
it
u
ryxceeE itcspeonX
u x
Q E
ΓB,C
⋈</p>
      </sec>
      <sec id="sec-4-3">
        <title>B Logical </title>
        <p>columns
map
σP=2</p>
      </sec>
      <sec id="sec-4-4">
        <title>P Physical  columns</title>
        <p>FOR
n LZ4 header header
caS 110010011100 110010011100</p>
      </sec>
      <sec id="sec-4-5">
        <title>Blocks of data</title>
      </sec>
      <sec id="sec-4-6">
        <title>Different</title>
      </sec>
      <sec id="sec-4-7">
        <title>Decompression</title>
      </sec>
      <sec id="sec-4-8">
        <title>Logic</title>
      </sec>
      <sec id="sec-4-9">
        <title>White-box decompression</title>
      </sec>
      <sec id="sec-4-10">
        <title>Adaptive White-box decompression</title>
        <p>compression. We now discuss fast decompression and its
integration in the query plan.</p>
        <p>On the white-box model, the decompression functions to
rebuild the logical columns are stored in the block
metadata. Decompression will be implemented in two phases. In
phase 1, the compressed data is rst unpacked using fast
SIMD codecs into byte-addressable physical columns. This
partially decompressed representation can be represented as
columnar vectors in the query plan as long as needed, and
once an operator like a join, group by, or projection requires
the logical representation the second phase of the
decompression is performed (lazy decompression). Many
operations can thus take place on the data still in (partially)
compressed form. The second phase is the full
decompression of physical columns into logical columns.</p>
        <p>Figure 2 depicts our proposal for decompression and query
execution on a white-box representation. In the left part,
we show an unoptimized approach where the physical
columns are black-box decompressed into columns X, P, and
Q. In this scenario, the query optimizer is able to push-down
predicates straight to physical columns, avoiding
unnecessary decompression steps. The challenge in this approach is
the black-box decompression steps still present, which
limits the ability of the execution engine to operate over the
physical columns in compressed format.</p>
        <p>In the right part of Figure 2, we illustrate the optimized
version of the query plan fused with decompression. The
optimizer can adapt the plan by pruning some
decompression steps and pushing-down predicates to the partially
decompressed data. The column compressed with
frame-ofreference becomes also a white-box representation
represented by a column of values and the reference with
difference operator.</p>
        <p>
          Adaptive Query Processing. In [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], we considered a
simple approach in which the entire logical column would
use the same decompression function for the whole table. If
these functions may change for each block of data,
integration of white-box compression in the query engine becomes
more tricky: whenever a block of data is read, we should
stop the query execution and re-instantiate a new query
plan and re-optimize. We argue that a vectorized engine
is more likely to succeed in quickly handling such changes,
than an alternative approach with a JIT-compiled engine,
which would introduce-recompilation latency for each new
data block. To further save time, we propose to split query
optimization into a main strategical phase that is executed
once before execution and perform lightweight tactical
reoptimization whenever a new data block is brought in and
the strategic query execution plan is adapted to it.
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>RESEARCH PLAN</title>
      <p>We believe white-box compression is the foundational idea
for a next-generation of database engines, where compressed
columnar execution is critical to leverage powerful SIMD
units. It also unlocks many optimization possibilities by
learning data representations from the data and is less
vulnerable to ill-designed database layouts that are often
observed in cloud usage situations.</p>
      <p>We describe the following as the aspects that shall be
explored in this research during the next two years:
(De)compression Library: We start with developing a
basic library for compression and decompression of data in
the white-box representation. Our rst goal is to have this
library independent of any database system and evaluate
compression and decompression speeds.</p>
      <p>Storage Layout: Besides the de/compression library it is
necessary to de ne how expression trees will be stored and
instantiated during query execution. Therefore, the second
step is the de nition of a le layout to represent data on
white-box representation on disk. We plan to have all the
information for white-box decompression on block headers
that will be instantiated whenever a block is loaded.
Compressed Execution: In a white-box compression
model, the push-down of database operators within the
decompression tree becomes more transparent. It is not so clear,
however, which kind of expressions can be built aiming
compressed execution or which database operators allow such
execution. To clarify these question we will perform a careful
investigation on which database operators get bene t from
compressed execution and how to generate decompression
expressions that enable such an approach.</p>
      <p>
        Vectorization vs. JIT Compilation: With an
adaptive query processing on white-box representation a
JITcompiled engine might su er from compilation overhead.
For every new block, the decoder has to be JIT-compiled
and the overhead grows with the number of di erent
compression schemes per column. Therefore, on this thesis, we
narrow down our design to a vectorized query engine where
changes in the decompression logic can be best handled and
interpreted. We will consider DuckDB [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] as our target
since its the only open-source columnar store with a
vectorized execution engine.
      </p>
      <p>Tactical Query Optimization: Compressed execution
offers opportunities to better use SIMD resources (thinner
data can execute in more lanes in parallel), but also allows
for early pruning of data using cheap(er) test on thin
fragments of the data. It can also lead to hash-tables that are
smaller and thus faster and network communications that
are reduced. However, in order to apply these optimizations
in the face of continuously changing white-box compression
functions, we need to quickly re-optimize query plans when
new data arrives. For this purpose, we plan to split query
optimization into two phases: a heavy strategical phase that
includes join ordering and is executed only once, and a
tactical phase that applies cheap optimization that leverage
compressed execution opportunities, speci cally.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Public</surname>
            <given-names>BI</given-names>
          </string-name>
          <string-name>
            <surname>Benchmark</surname>
          </string-name>
          . https://github.com/cwida/public bi benchmark.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Tableau</given-names>
            <surname>Public</surname>
          </string-name>
          . https://public.tableau.com.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <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>
          . In SIGMOD, pages
          <volume>671</volume>
          {
          <fpage>682</fpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>D. J.</given-names>
            <surname>Abadi</surname>
          </string-name>
          .
          <article-title>Query Execution in Column-oriented Database Systems</article-title>
          .
          <source>PhD thesis</source>
          ,
          <year>2008</year>
          . AAI0820132.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>C.</given-names>
            <surname>Binnig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Hildenbrand</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Fa</surname>
          </string-name>
          <article-title>rber. Dictionary-based Order-preserving String Compression for Main Memory Column Stores</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <volume>283</volume>
          {
          <fpage>296</fpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>P.</given-names>
            <surname>Damme</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A</given-names>
            . Ungethum, J.
            <surname>Pietrzyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Krause</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>
          . Morphstore:
          <article-title>Analytical query engine with a holistic compression-enabled processing model</article-title>
          . arXiv preprint arXiv:
          <year>2004</year>
          .09350,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>B. C.</surname>
          </string-name>
          et al.
          <article-title>Procella: Unifying Serving and Analytical Data at YouTube</article-title>
          . PVLDB, pages
          <year>2022</year>
          {
          <year>2034</year>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Feng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Lo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kao</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Xu</surname>
          </string-name>
          .
          <article-title>ByteSlice: Pushing the Envelop of Main Memory Data Processing with a New Storage Layout</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <volume>31</volume>
          {
          <fpage>46</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>B.</given-names>
            <surname>Ghita</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. G.</given-names>
            <surname>Tome</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Boncz</surname>
          </string-name>
          .
          <article-title>White-box Compression: Learning and Exploiting Compact Table Representations</article-title>
          .
          <source>In CIDR</source>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.</given-names>
            <surname>Graefe</surname>
          </string-name>
          and
          <string-name>
            <given-names>L. D.</given-names>
            <surname>Shapiro</surname>
          </string-name>
          .
          <article-title>Data Compression and Database Performance</article-title>
          .
          <source>In Symposium on Applied Computing</source>
          , pages
          <volume>22</volume>
          {
          <fpage>27</fpage>
          ,
          <string-name>
            <surname>April</surname>
          </string-name>
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>B.</given-names>
            <surname>Hentschel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. S.</given-names>
            <surname>Kester</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Idreos. Column Sketches</surname>
          </string-name>
          :
          <article-title>A Scan Accelerator for Rapid and Robust Predicate Evaluation</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <volume>857</volume>
          {
          <fpage>872</fpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>D. A.</surname>
          </string-name>
          <article-title>Hu man. A Method for the Construction of Minimum-Redundancy Codes</article-title>
          . IRE, pages
          <volume>1098</volume>
          {
          <fpage>1101</fpage>
          ,
          <year>1952</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>H.</given-names>
            <surname>Jiang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Q.</given-names>
            <surname>Jin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Paparrizos</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. J.</given-names>
            <surname>Elmore</surname>
          </string-name>
          . PIDS:
          <article-title>Attribute Decomposition for Improved Compression and Query Performance in Columnar Storage</article-title>
          . PVLDB,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>H.</given-names>
            <surname>Lang</surname>
          </string-name>
          , T. Muhlbauer,
          <string-name>
            <given-names>F.</given-names>
            <surname>Funke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Boncz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Neumann</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Kemper</surname>
          </string-name>
          .
          <article-title>Data Blocks: Hybrid OLTP and OLAP on Compressed Storage Using Both Vectorization and Compilation</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <volume>311</volume>
          {
          <fpage>326</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Li</surname>
          </string-name>
          and
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Patel</surname>
          </string-name>
          .
          <article-title>BitWeaving: fast scans for main memory data processing</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <volume>289</volume>
          {
          <fpage>300</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>O.</given-names>
            <surname>Polychroniou</surname>
          </string-name>
          and
          <string-name>
            <given-names>K. A.</given-names>
            <surname>Ross. E cient Lightweight</surname>
          </string-name>
          <article-title>Compression Alongside Fast Scans</article-title>
          .
          <source>In DAMON@SIGMOD</source>
          , pages
          <volume>9</volume>
          :
          <issue>1</issue>
          {
          <issue>9</issue>
          :
          <issue>6</issue>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>M.</given-names>
            <surname>Raasveldt</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Mu</surname>
          </string-name>
          <article-title>hleisen. DuckDB: An Embeddable Analytical Database</article-title>
          . In SIGMOD, page
          <year>1981</year>
          {
          <year>1984</year>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>V. e. a. Raman.</surname>
          </string-name>
          <article-title>DB2 with BLU Acceleration: So Much More Than Just a Column Store</article-title>
          . PVLDB, pages
          <volume>1080</volume>
          {
          <fpage>1091</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <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>Commun. ACM</source>
          , pages
          <volume>520</volume>
          {
          <fpage>540</fpage>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <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>
          , pages
          <volume>337</volume>
          {
          <fpage>343</fpage>
          ,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <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</source>
          , pages
          <volume>59</volume>
          {,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>