<!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>Reducing the Footprint of Main Memory HTAP Systems: Removing, Compressing, Tiering, and Ignoring Data</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Martin Boissier Supervised by Prof. Hasso Plattner Hasso Plattner Institute, University of Potsdam</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Gracefully reducing the main memory footprint (e.g., via compression and data tiering) is an unsolved challenge for HTAP database systems, where most traditional reduction methods are no longer applicable. Since advantages of a reduced footprint are manyfold, the issue is of high importance for main memory-resident databases. In this paper, we present our work on Hyrise and discuss how we break down this challenge into three aspects in order to reduce the main memory consumption without losing the performance advantage of in-memory databases. First, we reduce existing allocations by efficiently selecting indices and workload-driven compression configurations for table data. Second, we use hybrid table layouts to tier data with minimal impacts on the runtime performance. Third, we employ data structures that efficiently eliminate unnecessary accesses to secondary storage. As an outlook, we depict our vision to eventually unite these aspects in a holistic footprint optimization.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>MEMORY FOOTPRINT REDUCTION</title>
      <p>
        Database systems that store their entire working set in
DRAM have a clear performance advantage over their
diskbased counterparts. But DRAM can easily become the main
cost driver for large server systems. Its capacity still remains
limited, especially when compared to modern storage arrays
with petabytes of storage. Moreover, DRAM is responsible
for up to 40% of a server’s energy consumption [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
      </p>
      <p>Besides cost considerations, growing data volumes limit
the applicability of main memory-resident database systems.
Basically, all in-memory database vendors have added
capabilities to handle data volumes larger than DRAM capacities,
which underlines the need of efficient means to lower the
memory footprint (i.e., main memory consumption). A lower
footprint provides obvious benefits such as decreased
hardware costs but also enables faster recovery times. On top
of that, gained free space can be used to execute faster
algorithms with larger memory requirements or for adding
auxiliary data structures such as secondary indexes.</p>
      <p>One self-imposed condition that makes our project
particularly interesting is the focus on hybrid transactional and
analytical workloads (so-called HTAP, OLxP, or mixed
workloads). Most existing approaches, e.g., page- or tuple-based
eviction, incur disastrous performance penalties for
workloads that are mostly dominated by sequential processing.
Proceedings of the VLDB 2018 PhD Workshop, August 27, 2018. Rio de
Janeiro, Brazil. Copyright (C) 2018 for this paper by its authors. Copying
permitted for private and academic purposes.</p>
      <p>
        We implement our research in the open source database
Hyrise1. Hyrise is a columnar in-memory database optimized
for HTAP workloads. The database is ACID-compliant and
uses MVCC concurrency control. Data in Hyrise is
horizontally partitioned into so-called chunks with a predefined size
(comparable to [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]). Data is inserted in the most recent
mutable chunk until this chunk reaches its limit. At this
point, a new empty chunk is created and the recently filled
chunk becomes immutable (using append-only for updates
and MVCC invalidations for deletions). We approach tiering
in Hyrise by separating the problem into three aspects:
1. Before any data is evicted (to presumably significantly
slower storage tiers), existing data structures are
compressed or even removed (cf. Section 3).
2. We use hybrid table layouts to vertically partition and
evict data to secondary storage (cf. Section 4).
3. We employ auxiliary data structures to ignore irrelevant
data (i.e., data skipping or pruning, cf. Section 5).
      </p>
      <p>In this paper, we will discuss these three aspects which are
already published or currently work in progress. The final
objective of the pursued thesis is to create a holistic view
onto these three aspects and properly balance them.
2.</p>
    </sec>
    <sec id="sec-2">
      <title>EXISTING WORK</title>
      <p>
        In recent years, a variaty of main memory-resident
database systems has been released (e.g., Hekaton [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], SAP
HANA [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], H-Store [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], HyPer [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]). Even though these
databases aim to fully exploit DRAM’s performance
characteristics, they all have in common that means to handle
larger-than-DRAM data sets are incorporated (cf.
Hekaton’s project Siberia [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], HANA’s paged attributes [
        <xref ref-type="bibr" rid="ref18 ref21">18, 21</xref>
        ],
anti-caching in H-Store [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], HyPer’s chunk compaction [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]).
      </p>
      <p>To distinguish our work from these systems, we categorize
the related work in three groups: (i) means to classify cold
data, (ii) tiering granularity, and (iii) access avoidance.
2.1</p>
    </sec>
    <sec id="sec-3">
      <title>Identifying Cold Data</title>
      <p>The primary way to identify cold data (cold data usually
refers to the most infrequently accessed data) depends on
the workload targeted. OLTP-optimized databases such as
H-Store and SQL Server’s Hekaton evict single tuples with a
strong focus on transaction throughput and latency.</p>
      <p>
        The HTAP-optimized database SAP HANA does not
employ a workload-driven system but rather is the application
expected to provide business rules that define data being
1Hyrise on GitHub: https://git.io/hyrise
(i) no longer relevant for the daily ongoing business and
(ii) which cannot be modified anymore (e.g., due to
regulatory agreements). The reason for this approach is SAP’s
strong devotion to enterprise systems [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Another
HTAPoptimized database, HyPer, assumes horizontal partitions
(chunks) become colder with their age increasing [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
2.2
      </p>
    </sec>
    <sec id="sec-4">
      <title>Tiering Granularity</title>
      <p>
        OLTP-optimized databases usually evict fine-granular
horizontal entities, usually pages or tuples. Moreover, H-Store
also tiers indexes [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>
        SAP HANA allows defining columns as page loadable,
making columns loadable and evictable on a page basis. Also,
indexes and column dictionaries can be page loadable.
HyPer varies the compression and page size with the age of a
chunk. Chunks start being completely uncompressed (hot ),
then become cold, and eventually are stored as immutable
frozen chunks using huge pages and heavier compression [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
Recently, HyPer gained the capability to also evict data to
secondary storage [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
2.3
      </p>
    </sec>
    <sec id="sec-5">
      <title>Access Avoidance</title>
      <p>To avoid unnecessary accesses to evicted data, most
approaches create additional data structures or aggregates that
allow pruning accesses for the majority of queries.</p>
      <p>
        Hekaton uses adaptive range filters which allow pruning
both point queries (even though less effective than Bloom
filters) and range queries [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. SAP HANA stores synopses per
attribute, which include, e.g., minimum and maximum values
of a column [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. HyPer uses positional small materialized
aggregates storing clustered min/max aggregates to prune or
limit sequential scans to a smaller subset [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>To our best knowledge, the discussed approaches lack the
means for a workload-driven data tiering that can be
dynamically configured by changing the memory budget. Further,
we see unused potential of access avoidance data structures
to be further used for more accurate cardinality estimations.</p>
    </sec>
    <sec id="sec-6">
      <title>COMPRESSION &amp; REMOVAL</title>
      <p>The first step to reduce the memory footprint is
compression and removal of existing data structures.
3.1</p>
    </sec>
    <sec id="sec-7">
      <title>Compression</title>
      <p>
        Hyrise supports different column compression schemes
(e.g., dictionary encoding, run-length encoding,
frame-ofreference, SIMD-BP128). While this topic is well researched,
there has only been little work on how to integrate various
compression schemes efficiently. The capability of
compressing columns individually usually either introduces (i) a high
maintenance overhead as operators have to be adapted for
each compression schema or (ii) runtime degradations due
to added indirections via virtual method calls. We
implement an approach similar to QuickStep [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] and use C++
meta-programming to avoid both drawbacks at the expense
of compile time (cf. Fig. 2(a)). Similar to [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], we divide
compression schemes into logical-level techniques and
physicallevel techniques, which allows us to use the implemented
compression techniques also for other data structures (e.g.,
indexes or position lists that are passed between operators).
      </p>
      <p>
        When it comes to deciding which compression scheme to
use, there is a clear lack in database research. Most
commercial systems use simple data statistics and heuristics similar
to Abadi et al.’s decision tree for compression selection [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Val Dict
&lt;
&lt;
Val
      </p>
      <p>Dict
&lt;</p>
      <p>Val
MRC</p>
      <p>MRC</p>
      <p>SSCG
Allocated in
main memory</p>
      <p>Allocated on
secondary storage</p>
      <p>Consecutive data</p>
      <p>To our best knowledge, no existing approach incorporates
workload knowledge and allows selecting compression
configurations for a given memory budget. As a consequence, we
developed a novel heuristic to determine optimized
compression configurations. Given a workload and a memory budget,
this selection approach determines for each column in each
chunk a suitable compression scheme using analytical size
estimations and regression-based runtime predictions.
3.2</p>
    </sec>
    <sec id="sec-8">
      <title>Selection &amp; Removal</title>
      <p>
        For the removal of data structures, we concentrate on
auxiliary data structures such as secondary indices. This
problem is a well-studied topic and known as the index
selection problem. We employ an adapted version of the heuristic
presented in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] for the index selection problem. First
evaluations show a comparable solution quality with state-of-the-art
approaches such as CoPhy [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] with a significantly shorter
runtime what allows us to process large systems with larger
sets of candidates (see short comparison in Table 1).
      </p>
      <p>Mem. traffic (TB)
Runtime in seconds</p>
      <p>CoPhy
(100)
5 371
0.62</p>
      <p>CoPhy
(200)
4 730
7.23</p>
      <p>CoPhy
(500)
2 489
121.00</p>
      <p>CoPhy Our
(9 912) Approach
403 425
DNF 0.65</p>
      <p>Chunks in Hyrise can use hybrid layouts that vertically
separate the attributes into two groups. The first group
contains all attributes that have been accessed apart from
projections and is stored in a columnar fashion remaining
in DRAM. The second group contains all attributes that
have only been projected or not accessed at all. Attributes
of this group are stored in a row-major format and evicted
to secondary storage. For memory budgets lower than the
size of the first group in DRAM, a workload-driven
Paretooptimal heuristic selects which columns to keep in DRAM.</p>
      <p>
        Evaluations using an Intel Optane P4800X showed eviction
rates of up to 80% with neglectable performance hits for a
real-world enterprise SAP system. This hybrid table layout
has recently been presented at the ICDE 2018 [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        As of now, we do not consider index tiering. In the long
run, we plan to adapt a flexible storage manager comparable
to [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], which is applicable to any data structure.
3.84 x
3.68 x
518 KB
&lt;1 KB
Bloom Filter DictiFounlalries Min/Max
      </p>
      <p>1.5 KB
Multi−Column Range Filter</p>
      <p>Range Filter
(b) Comparison of five data structures for access avoidance. Bloom filters and full
dictionaries show the highest pruning rates but also largest space consumptions.
in the set. Hence, besides access pruning, CQFs can
improve cardinality estimations for skewed data.</p>
    </sec>
    <sec id="sec-9">
      <title>ACCESS AVOIDANCE</title>
      <p>When we talk about access avoidance in the context of
Hyrise, we mean auxiliary data structures and aggregates
that (i) enable pruning (or elimination) of chunks which are
irrelevant for processing the query result and (ii) improve
cardinality estimations during query optimization. As Hyrise’s
chunk concept guarantees that chunks cannot be modified as
soon as they reach their size limit, we create several
aggregates and auxiliary data structures on each chunk without
the need of keeping them updated with every transaction.
The creation is done during chunk compaction to piggy-back
the full chunk iteration during compression.</p>
      <p>
        Data gathered per attribute during compaction include
the share of NULL values, distinct values count, the number
of runs (used to estimate compression rates for run-length
encoding), and minimum/maximum values (cf. [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]). On
top of these aggregates, we use (as of now very simple)
heuristics to select which of the following – more sophisticated
– auxiliary data structures are potentially beneficial:
Pruning Histograms are extended histograms with
pruning capabilities, combining equi-width histograms and
range filters. These histograms store value ranges with
the objective to create as large as possible gaps
between the value ranges. These gaps allow the pruning
of queries whose predicate ranges are not intersecting
with any value range in the filter. Each value range
further stores the number of elements within the range
and the number of distinct elements.
      </p>
      <p>Multi-Column Pruning Histograms are each created
between two selected attributes. In addition to the
pruning histograms of both attributes, a bitmap is stored
which signals whether tuples exist for value range
combinations (see depiction in Figure 3). This way, queries
with conjunctive predicates might be pruned where
each predicate alone might not indicate a pruning
possibility. Moreover, this data structure can be used (to
some extend) to gather information about dependencies
between attributes.</p>
      <p>
        Approximate Set Membership Filters – similar to
Bloom filters – allow approximate pruning of accesses.We
use counting quotient filters (CQF) by Pandey et al. [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ].
CQFs allow checking for set memberships as well as
estimating a queried item’s frequency of occurrence
Accesses to
chunks 4 and 5
can be pruned
σ
x=27
      </p>
      <sec id="sec-9-1">
        <title>Physical Query Plan</title>
      </sec>
      <sec id="sec-9-2">
        <title>GetTable(R)</title>
      </sec>
      <sec id="sec-9-3">
        <title>GetTable(R)’</title>
        <p>S
and performance but leaves large potentials unused: (i)
improved cardinality estimations and (ii) combined pruning of
conjunctive filter predicates.</p>
        <p>Cardinality Estimation: One very prominent remaining
problem of query optimization is the accurate estimation of
cardinalities. When pruning is executed as part of a physical
plan operation, strongly pruning predicates cannot directly
trigger a plan re-evaluation. In Hyrise, all auxiliary data
structures are used within the query optimizer to improve
selectivity estimations, which enables triggering re-evaluations
and predicate re-orderings.</p>
        <p>
          Conjunctive Predicate Chains: We have analyzed
production enterprise systems and found that these systems
conjunctively filter on several dimensions frequently [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
Often, predicates in those chains exclude different chunks of
the table. Hence, when the first filter operation scans chunks
which are later found to be irrelevant for the result, this
scan was superfluous. This is the case when pruning is solely
used within the execution engine and not as part of query
optimization. In Hyrise, we search conjunctive chains of
predicates that are directly executed on physical tables. For
conjunctive chains, we can union the lists of prunable chunks
and directly prune those chunks during loading of the table
before any operator is executed (see Figure 4).
        </p>
        <p>We also plan to evaluate exploiting these data structures
as part of query execution (e.g., for semi-join reductions).
We have presented the current state of footprint
reduction and data tiering in Hyrise. Considering our preliminary
results, we are optimistic that we can make substantial
contributions to the database community. Especially light-weight
data structures that both improve efficiency and performance
by avoiding unnecessary accesses as well as improved
accuracy within query optimization appear promising.</p>
        <p>Part of our upcoming work is the holistic optimization of
Hyrise’s memory footprint, incorporating all aspects from
compression, over tiering, to access avoidance. Eventually,
a holistic optimization is required as the presented aspects
interact with each other. As soon as data is compressed or
evicted, there will be an access penalty. Data tiering and
accesses to secondary storage potentially cause devastating
performance hits unless accesses can be pruned whenever
possible. Hence, measures to avoid unnecessary accesses
must be taken in order to preserve performance. The slower
the data tier for eviction is, the more value pruning data
structures provide.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D. J.</given-names>
            <surname>Abadi</surname>
          </string-name>
          et al.
          <article-title>Integrating compression and execution in column-oriented database systems</article-title>
          .
          <source>In Proc. SIGMOD</source>
          <year>2006</year>
          , pages
          <fpage>671</fpage>
          -
          <lpage>682</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>K.</given-names>
            <surname>Alexiou</surname>
          </string-name>
          et al.
          <article-title>Adaptive range filters for cold data: Avoiding trips to siberia</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>6</volume>
          (
          <issue>14</issue>
          ):
          <fpage>1714</fpage>
          -
          <lpage>1725</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Boissier</surname>
          </string-name>
          et al.
          <article-title>Analyzing data relevance and access patterns of live production database systems</article-title>
          .
          <source>In Proc. CIKM</source>
          <year>2016</year>
          , pages
          <fpage>2473</fpage>
          -
          <lpage>2475</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Boissier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Schlosser</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Uflacker</surname>
          </string-name>
          .
          <article-title>Hybrid data layouts for tiered HTAP databases with pareto-optimal data placements</article-title>
          .
          <source>In Proc. ICDE</source>
          , pages
          <fpage>209</fpage>
          -
          <lpage>220</lpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>P.</given-names>
            <surname>Damme</surname>
          </string-name>
          et al.
          <article-title>Lightweight data compression algorithms: An experimental survey (experiments and analyses)</article-title>
          .
          <source>In Proc. EDBT</source>
          <year>2017</year>
          , pages
          <fpage>72</fpage>
          -
          <lpage>83</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D.</given-names>
            <surname>Dash</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Polyzotis</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <surname>A. Ailamaki.</surname>
          </string-name>
          <article-title>CoPhy: A scalable, portable, and interactive index advisor for large workloads</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>4</volume>
          (
          <issue>6</issue>
          ):
          <fpage>362</fpage>
          -
          <lpage>372</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>DeBrabant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pavlo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Tu</surname>
          </string-name>
          , et al.
          <article-title>Anti-caching: A new approach to database management system architecture</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>6</volume>
          (
          <issue>14</issue>
          ):
          <fpage>1942</fpage>
          -
          <lpage>1953</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>C.</given-names>
            <surname>Diaconu</surname>
          </string-name>
          et al.
          <article-title>Hekaton: SQL server's memory-optimized OLTP engine</article-title>
          .
          <source>In Proc. SIGMOD</source>
          , pages
          <fpage>1243</fpage>
          -
          <lpage>1254</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Eldawy</surname>
          </string-name>
          et al.
          <article-title>Trekking through siberia: Managing cold data in a memory-optimized database</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>7</volume>
          (
          <issue>11</issue>
          ):
          <fpage>931</fpage>
          -
          <lpage>942</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>F.</given-names>
            <surname>Färber</surname>
          </string-name>
          et al.
          <article-title>The SAP HANA database - an architecture overview</article-title>
          .
          <source>IEEE Data Eng. Bull.</source>
          ,
          <volume>35</volume>
          (
          <issue>1</issue>
          ):
          <fpage>28</fpage>
          -
          <lpage>33</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>F.</given-names>
            <surname>Funke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kemper</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Neumann</surname>
          </string-name>
          .
          <article-title>Compacting transactional data in hybrid OLTP &amp; OLAP databases</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>5</volume>
          (
          <issue>11</issue>
          ):
          <fpage>1424</fpage>
          -
          <lpage>1435</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>R.</given-names>
            <surname>Kallman</surname>
          </string-name>
          et al.
          <article-title>H-Store: a high-performance, distributed main memory transaction processing system</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>1</volume>
          (
          <issue>2</issue>
          ):
          <fpage>1496</fpage>
          -
          <lpage>1499</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kemper</surname>
          </string-name>
          et al.
          <article-title>HyPer: A hybrid OLTP&amp;OLAP main memory database system based on virtual memory snapshots</article-title>
          .
          <source>In Proc. ICDE</source>
          <year>2011</year>
          , pages
          <fpage>195</fpage>
          -
          <lpage>206</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>H.</given-names>
            <surname>Lang</surname>
          </string-name>
          et al.
          <article-title>Data Blocks: Hybrid OLTP and OLAP on compressed storage using both vectorization and compilation</article-title>
          .
          <source>In Proc. SIGMOD</source>
          <year>2016</year>
          , pages
          <fpage>311</fpage>
          -
          <lpage>326</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>C.</given-names>
            <surname>Lefurgy</surname>
          </string-name>
          et al.
          <article-title>Energy management for commercial servers</article-title>
          .
          <source>IEEE Computer</source>
          ,
          <volume>36</volume>
          (
          <issue>12</issue>
          ):
          <fpage>39</fpage>
          -
          <lpage>48</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>V.</given-names>
            <surname>Leis</surname>
          </string-name>
          et al.
          <article-title>LeanStore: In-memory data management beyond main memory</article-title>
          .
          <source>In Proc. ICDE</source>
          , pages
          <fpage>185</fpage>
          -
          <lpage>196</lpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>G.</given-names>
            <surname>Moerkotte</surname>
          </string-name>
          .
          <article-title>Small materialized aggregates: A light weight index structure for data warehousing</article-title>
          .
          <source>In Proc. VLDB</source>
          <year>1998</year>
          , pages
          <fpage>476</fpage>
          -
          <lpage>487</lpage>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A.</given-names>
            <surname>Nica</surname>
          </string-name>
          et al.
          <source>Statisticum: Data statistics management in SAP HANA. PVLDB</source>
          ,
          <volume>10</volume>
          (
          <issue>12</issue>
          ):
          <fpage>1658</fpage>
          -
          <lpage>1669</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>P.</given-names>
            <surname>Pandey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Bender</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Johnson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Patro</surname>
          </string-name>
          .
          <article-title>A general-purpose counting filter: Making every bit count</article-title>
          .
          <source>In Proc. SIGMOD</source>
          <year>2017</year>
          , pages
          <fpage>775</fpage>
          -
          <lpage>787</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>J. M. Patel</surname>
          </string-name>
          et al.
          <article-title>Quickstep: A data platform based on the scaling-up approach</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>11</volume>
          (
          <issue>6</issue>
          ):
          <fpage>663</fpage>
          -
          <lpage>676</lpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>R.</given-names>
            <surname>Sherkat</surname>
          </string-name>
          et al.
          <article-title>Page as you go: Piecewise columnar access in SAP HANA</article-title>
          .
          <source>In Proc. SIGMOD</source>
          , pages
          <fpage>1295</fpage>
          -
          <lpage>1306</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          et al.
          <article-title>Reducing the storage overhead of main-memory OLTP databases with hybrid indexes</article-title>
          .
          <source>In Proc. SIGMOD</source>
          <year>2016</year>
          , pages
          <fpage>1567</fpage>
          -
          <lpage>1581</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>