<!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>Efficient Scale-Out Using Query-Driven Workload Distribution and Fragment Allocation</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Stefan Halfpap Supervised by Prof. Hasso Plattner Hasso Plattner Institute, University of Potsdam</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Database replication is an approach for scaling throughput and ensuring high availability. Using workload knowledge, we are able to load-balance queries to replica nodes according to the data being accessed. However, balancing the load evenly while maximizing data reuse is a challenging allocation problem. To address large-size problems, we developed a novel decomposition-based heuristic using linear programming. We compare our approach with a rule-based stateof-the-art allocation algorithm using a real-world workload comprising thousands of queries. Further, we outline how we plan to extend our approach for versatile allocation problems, e.g., considering changing workloads and robustness against node failures.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>INTRODUCTION</title>
      <p>
        Partitioning and replication are means to allow databases
to process increasing workloads. Analyses of real workloads
show that read-only queries account for the largest workload
share [
        <xref ref-type="bibr" rid="ref1 ref11">1, 11</xref>
        ]. Scaling read-only queries is relatively simple,
as we can execute them on read-only replicas without
violating transactional consistency [
        <xref ref-type="bibr" rid="ref16 ref6">6, 16</xref>
        ].
      </p>
      <p>Using a naive load-balancing approach, one can distribute
queries independently of the accessed data. As a result,
one has to store all data and apply all data modifications
on all nodes. Further, queries are unlikely to profit from
caching e↵ects, because similar queries are not guaranteed
to be assigned to the same replica.</p>
      <p>In our research, we investigate query-driven workload
distributions, i.e., load-balancing queries based on their
accessed data. In particular, we reduce the amount of
required memory on all nodes, while balancing the load evenly.
Query-driven workload distributions are also beneficial to
maximize caching e↵ects. Further, when adding new nodes
to a database cluster, we are able to decide which data to
load first to quickly process a large share of the workload.</p>
      <p>In practice, there are varying constraints and goals to
distribute the workload and/or required data on nodes. By
using linear programming (LP) we are able to address
versatile allocation problems, which include robustness against
potential node failures or ecient reallocations to react to
changing workloads.</p>
      <p>Proceedings of the VLDB 2019 PhD Workshop, August 26th, 2019. Los
Angeles, California. Copyright (C) 2019 for this paper by its authors.
Copying permitted for private and academic purposes.</p>
      <p>
        The remainder of this paper is structured as follows: We
introduce the basic allocation problem in Section 2. In
Section 3, we discuss related work. In Section 4, we summarize
our scalable decomposition-based approach [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] to calculate
workload distributions for large problem sizes. Further, we
demonstrate it using a real workload. Our current research
and plans for future work are described in Section 5.
Section 6 concludes the paper.
2.
      </p>
    </sec>
    <sec id="sec-2">
      <title>PROBLEM DESCRIPTION</title>
      <p>
        The allocation problem being examined is a coupled
workload distribution and data placement problem. We assume
a horizontally and/or vertically partitioned database with
N disjoint data fragments. Each fragment i has a size ai,
i = 1, ..., N . Note, we assume a separation of the data
partitioning and the allocation process, which is common [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
In this way, existing workload-aware data partitioning
algorithms can be used to generate the input fragments for our
allocation approach.
      </p>
      <p>Further, we assume a workload consisting of Q queries
(query classes). Each query class j is defined by the subset of
fragments qj ✓ { 1, ..., N }, j = 1, ..., Q, it accesses. Queries
account for workload shares, defined by query frequencies fj
and query costs cj , j = 1, ..., Q.</p>
      <p>Last, we assume a number of nodes K to load-balance the
workload evenly. In practice, the number of nodes K can be
chosen manually by a database administrator or
automatically by a replication framework with regard to the desired
query throughput.</p>
      <p>
        We want to decide which query should be executed to
which extent on a node in order to minimize the overall
memory consumption for all nodes. Processing query j on
node k requires to store all fragments qj on the node. In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ],
we derive an LP model to calculate optimal solutions.
      </p>
      <p>Figure 1 shows an example workload and an optimal
solution, i.e., an even workload distribution for Q = 5 queries,
accessing N = 10 fragments, that minimizes the overall
memory consumption for a database cluster with K = 4
nodes. (We assume an equal size for each fragment, i.e.,
ai = 1, i = 1, ..., N .)</p>
      <p>By W/V , we denote the replication factor of an
allocation, where the total amount of data used W is normalized
by the minimal amount of used data V . Because each of the
ten fragments is accessed by at least one query, the minimal
amount of used data is equal to the number of fragments
V = N = 10. The replication factor of our exemplary
allocation for four nodes is W/V = 1.4.</p>
      <p>1
Database (V=10)
1
3.</p>
    </sec>
    <sec id="sec-3">
      <title>RELATED WORK</title>
      <p>
        Our workload distribution problem (see Section 2) is an
allocation problem in the field of distributed database
systems. O¨zsu and Valduriez [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] give an overview of related
allocation problems. We summarize their overview as follows:
(i) Constraints and optimization goals, e.g., performance,
costs, and dependability, for allocation problems di↵er (see
also [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]). (ii) Many formulations for allocation problems are
proven to be NP-hard [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. As a result, heuristics have to be
used for large problem instances. (iii) As constraints and
optimization goals di↵er, heuristics are often tied to specific
formulations of allocation problems.
      </p>
      <p>
        Our problem formulation is similar to the one presented
by Rabl and Jacobsen [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. We want to balance the load
evenly to nodes to enable linear throughput scaling.
Optimal solutions via LP do not scale, e.g., for the 22 TPC-H
queries and using vertical partitioning with each of the 61
columns as an individual fragment, we were able to calculate
optimal allocations for up to 8 nodes (termination after 8 h
using a current laptop) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>To address large problem sizes, with thousands of queries,
fragments, and dozens of nodes, Rabl and Jacobsen propose
a greedy heuristic that assigns queries to nodes one after
another. In specific, they order queries by the product of their
workload share and the overall size of accessed fragments.
Queries are then assigned to the node with the largest
fragment overlap with already assigned queries. Nodes with no
assigned queries are treated as if they have a complete
overlap. If the load of the assigned query exceeds the capacity
of a node, the query is inserted back to the assignment list
with its remaining load.</p>
      <p>
        We implemented Rabl and Jacobsen’s algorithm and
investigated the steps chosen during allocations for TPC-H
and TPC-DS [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. We made the following observation: Load
capacities of nodes are often filled one after another,
because nodes with many assigned queries are more likely to
have high fragment overlap: Assigning a query to a node
(may increase the number of allocated fragments and thus)
increases the probability that the next query is assigned to
the same node unless the node’s load capacity is exhausted.
      </p>
      <p>Our research addresses two shortcomings of Rabl and
Jacobsen’s approach: (1) When ordering queries and
determining overlap, the algorithm does not consider the specific
accessed fragments, but only their sizes. (2) When assigning
queries to nodes, the remaining queries are not analyzed. In
contrast, our decomposition approach (see Section 4) divides
the problem into subproblems which preserves the structure
of the problem. Specifically, we regard all queries (whose
load we try to divide into workload chunks) with all
individual fragments the queries access.</p>
      <p>
        Solutions/allocations of our algorithm can be used for
replicated databases, e.g., SAP HANA [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], Postgres-R [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
and in replication middleware [
        <xref ref-type="bibr" rid="ref14 ref2 ref3">2, 3, 14</xref>
        ]. Further, the
calculated workload distributions support caching e↵ects for
systems like Amazon Aurora [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], which separate compute
from storage.
      </p>
      <p>Using LP to solve allocation problems is flexible compared
to rule-based heuristics. We can add or change constraints,
and modify the objective function to address varied
allocation problems, e.g., requiring to store only a certain subset
of fragments (instead of all) or demanding a similar
memory consumption per node. Including such constraints into
a rule-based heuristic is more challenging, because it is more
dicult to decide how and in which part to adapt the
algorithm without losing sight of the optimization goal.
4.</p>
    </sec>
    <sec id="sec-4">
      <title>DECOMPOSITION APPROACH</title>
      <p>The complexity of our query-driven workload
distribution problem increases with an increasing number of nodes,
queries, and fragments. It is challenging to find good
heuristics, as minimizing data redundancy and balancing the load
on additional replicas are in conflict with each other.</p>
      <p>
        The core idea of our decomposition heuristic is to split
the workload iteratively using easier to solve but similar
subproblems, forming a tree. In specific, we split the
workload into chunks of queries, which access similar fragments.
Thereby, we reduce the data redundancy in each splitting
step. In the following, we describe the approach using an
example. In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], we present the corresponding LP model.
      </p>
      <p>K</p>
      <p>Figure 2 shows a decomposition of a workload, represented
by the top node, to K = 2 + 2 = 4 final nodes, represented
as leaves. Each parent node can have an arbitrary number
of child nodes. The workload share of each child must
correspond to the workload share of the leaves in its subtree.
In Figure 2, the top node has two children. Both children
have two leaves in their subtree. Therefore, their workload
share is 2 ⇤ 14 = 12 .</p>
      <p>
        Using the decomposition approach, we can split the
workload into an arbitrary number of final nodes with equal
workload shares. Note, the existence of a solution with equal
workload shares is guaranteed, because our model (like Rabl
and Jacobsen’s) allows to split query loads arbitrarily
without regard to query frequencies and costs, which both are
discrete (see [
        <xref ref-type="bibr" rid="ref15 ref9">9, 15</xref>
        ]).
      </p>
      <p>
        With each decomposition, the problem gets easier as fewer
relevant queries and accessed fragments have to be
considered. For chunk 1 in Figure 2, the distribution problem is
shrunken to Q = 3 queries and N = 5 fragments. By
choosing the number of child nodes, we can control the problem
complexity. For large problem instances, it is advisable to
split the top node into a low number of chunks for lowest
computation times. If the problem is still too large, other
heuristic approaches, e.g., [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], can be used to split the
workload close to the top node. Towards the leaves, our approach
can be used.
4.1
      </p>
    </sec>
    <sec id="sec-5">
      <title>Application to a Real-World Workload</title>
      <p>In this section, we demonstrate our heuristic using a
realworld workload. We analyzed queries against an accounting
table, comprising of N = 344 columns/fragments. We
extracted Q = 4461 query classes, whose query costs are
distributed exponentially. In particular, 38 queries account for
more than 95% of the workload share.</p>
      <p>
        We compare our solution to the greedy heuristic by Rabl
and Jacobsen [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Table 1 summarizes the results for 3 
K  6. Our solution reduces the replication factor in
comparison to the greedy heuristic by 32-42%.
384 s
225 s
18 min
99 min
13 min
      </p>
      <p>W/W S
-32%
-42%
-33%
-36%
-37%</p>
      <p>
        We used the Gurobi Optimizer [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] with a single thread.
The computation times were between 2 min and 99 min,
while focusing on reducing the replication factor. Di↵erent
chunkings, e.g., 3 + 2 and 2 + 2 + 1, trade computation time
for memory consumption. To reduce the computation time,
we can also cluster fragments or queries, e.g., grouping the
4423 queries with lowest costs as a single query class with
an aggregated workload share lower than 5%.
      </p>
    </sec>
    <sec id="sec-6">
      <title>5. CURRENT AND FUTURE WORK</title>
      <p>
        Numerical experiments show that our heuristic calculates
allocations with lower memory consumption than the
heuristic by Rabl and Jacobsen [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] for TPC-H [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and a real-world
workload (cf. Section 4.1). Currently, we conduct end-to-end
evaluations by deploying the calculated fragment allocations
in a PostgreSQL cluster and measuring the query
throughput. In Section 5.1, we describe our preliminary insights.
      </p>
      <p>In addition, we plan to investigate the impact of di↵erent
database fragmentations and query clusterings on the
allocation, especially, in the case of skewed model input (cf.
Section 4.1). When running workloads in practice, fragment
allocations and workload distributions must consider further
factors, e.g., data modification costs, robustness against
failures, or changing model inputs, that are not included in the
basic allocation problem (cf. Section 2). We describe our
plans to address these factors in the following sections.
5.1</p>
    </sec>
    <sec id="sec-7">
      <title>End-to-End Evaluations</title>
      <p>In practice, workloads consist of a number of active
database connections sending a stream of queries. We model
a workload as a set of queries in a potentially long period
of time. The performance of an allocation in practice
depends on the query timing, especially, whether all (or at
least many) nodes are used for processing while there are
pending queries. This can be supported by query
scheduling: in case an incoming query is executable on multiple
nodes, we send the query to the node with the lowest load.</p>
      <p>Further, we can calculate allocations that trade memory
consumption (allocating additional fragments to nodes) for
flexibility (increased share of query loads to be processed
by multiple replicas). Flexibility is also beneficial to handle
imprecise query costs, e.g., caused by concurrency e↵ects at
runtime. Currently, we use average query execution times
as query costs metric, because they are easy to obtain and
widely applicable.
5.2</p>
    </sec>
    <sec id="sec-8">
      <title>Data Modifications</title>
      <p>
        As a result of inserts, updates, or deletes, data may change
over time. We can adapt our basic model to include data
modification costs. We are able to model update costs
either as execution costs similar to costs for read queries (see
also [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]), or as fragment modification costs depending on
the stored fragments per node, both in a linear way.
Integrating modification costs for the decomposition heuristic is
also possible. When splitting the workload into leaf nodes,
we can include update costs precisely for node allocations.
In upper levels, we may have to approximate update costs,
because the exact number of leaf nodes for which update
costs occur may be unknown.
5.3
      </p>
    </sec>
    <sec id="sec-9">
      <title>Node Failures</title>
      <p>
        Besides scalability, data replication enables high
availability. Thereby, a database cluster can support di↵erent levels
of robustness in case of node failures. Basic robust
allocations ensure that each fragment is stored on multiple nodes,
or queries can be processed on multiple nodes [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
However, the workload distribution after node failures can be
highly skewed. In future work, we will investigate
allocations that allow an evenly balanced workload, even in the
case of potential node failures.
5.4
      </p>
    </sec>
    <sec id="sec-10">
      <title>Reallocation Costs</title>
      <p>Workloads (including query costs) or fragment sizes may
change. As a result, a current data allocation may not
allow an even workload distribution anymore or a di↵erent
allocation may reduce the memory consumption.</p>
      <p>
        If workload changes are known in advance, Rabl and
Jacobsen propose to calculate allocations for each scenario and
merge all of the allocations to a combined allocation that is
robust with regard to the workload changes [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. An
alternative approach may reallocate fragments to match the new
workload. To avoid costly reallocations, we currently
investigate how to take the current allocation into account in
the algorithm. To avoid frequent reallocations, allocations
should be robust with regard to minor workload changes
(see Section 5.1).
5.5
      </p>
    </sec>
    <sec id="sec-11">
      <title>Online Approach</title>
      <p>As workloads and underlying data, and thus model
inputs change, we want to adapt allocations over time, ideally
without downtime or performance degradation. The
previous sections described building blocks to implement a
faulttolerant and adaptive replication cluster. We can monitor
the workload to detect when we have to adapt a current
allocation. At that time we can calculate a new allocation,
which is better suited to the current workload and which
can be created with reasonable reallocation costs.</p>
    </sec>
    <sec id="sec-12">
      <title>CONCLUSION</title>
      <p>We presented the current status and plans to extend our
work in the field of query-driven workload distribution and
fragment allocation. While balancing the query load evenly,
our decomposition approach calculates cluster configurations
with lower memory footprint than state-of-the-art
heuristics. We believe that our approach allows integrating further
factors, such as data modification costs, robustness against
node failures, and economical reallocations. Using LP, we
can express these factors as constraints without changing
the structure of the algorithm. In future work, we plan to
not only extend our LP approach, but also demonstrate the
extensions in end-to-end evaluations.</p>
    </sec>
    <sec id="sec-13">
      <title>REFERENCES</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Boissier</surname>
          </string-name>
          .
          <article-title>Optimizing main memory utilization of columnar in-memory databases using data eviction</article-title>
          . In
          <source>PhD@VLDB</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>E.</given-names>
            <surname>Cecchet</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Candea, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Ailamaki</surname>
          </string-name>
          .
          <article-title>Middleware-based database replication: the gaps between theory and practice</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <fpage>739</fpage>
          -
          <lpage>752</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>E.</given-names>
            <surname>Cecchet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Marguerite</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Zwaenepoel</surname>
          </string-name>
          . C-JDBC:
          <article-title>Flexible database clustering middleware</article-title>
          .
          <source>In FREENIX@USENIX</source>
          , pages
          <fpage>9</fpage>
          -
          <lpage>18</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>L. W.</given-names>
            <surname>Dowdy</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. V.</given-names>
            <surname>Foster</surname>
          </string-name>
          .
          <article-title>Comparative models of the file assignment problem</article-title>
          .
          <source>ACM Comput. Surv.</source>
          ,
          <volume>14</volume>
          (
          <issue>2</issue>
          ):
          <fpage>287</fpage>
          -
          <lpage>313</lpage>
          ,
          <year>1982</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>K. P.</given-names>
            <surname>Eswaran</surname>
          </string-name>
          .
          <article-title>Placement of records in a file and file allocation in a computer</article-title>
          .
          <source>In IFIP</source>
          , pages
          <fpage>304</fpage>
          -
          <lpage>307</lpage>
          ,
          <year>1974</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Helland</surname>
          </string-name>
          ,
          <string-name>
            <surname>P. E. O'Neil</surname>
            ,
            <given-names>and D.</given-names>
          </string-name>
          <string-name>
            <surname>Shasha</surname>
          </string-name>
          .
          <article-title>The dangers of replication and a solution</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <fpage>173</fpage>
          -
          <lpage>182</lpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Gurobi</given-names>
            <surname>Optimization</surname>
          </string-name>
          . https://www.gurobi.com.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>S.</given-names>
            <surname>Halfpap</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Schlosser</surname>
          </string-name>
          .
          <article-title>A comparison of allocation algorithms for partially replicated databases</article-title>
          .
          <source>In ICDE</source>
          , pages
          <fpage>2008</fpage>
          -
          <lpage>2011</lpage>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Halfpap</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Schlosser</surname>
          </string-name>
          .
          <article-title>Workload-driven fragment allocation for partially replicated databases using linear programming</article-title>
          .
          <source>In ICDE</source>
          , pages
          <fpage>1746</fpage>
          -
          <lpage>1749</lpage>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>B.</given-names>
            <surname>Kemme</surname>
          </string-name>
          and
          <string-name>
            <given-names>G.</given-names>
            <surname>Alonso</surname>
          </string-name>
          . Don't be lazy, be consistent:
          <string-name>
            <surname>Postgres-R</surname>
          </string-name>
          ,
          <article-title>A new way to implement database replication</article-title>
          .
          <source>In VLDB</source>
          , pages
          <fpage>134</fpage>
          -
          <lpage>143</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kru</surname>
          </string-name>
          ¨ger, C. Kim,
          <string-name>
            <given-names>M.</given-names>
            <surname>Grund</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Satish</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Schwalb</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Chhugani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Plattner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Dubey</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Zeier</surname>
          </string-name>
          .
          <article-title>Fast updates on read-optimized databases using multi-core CPUs</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>5</volume>
          (
          <issue>1</issue>
          ):
          <fpage>61</fpage>
          -
          <lpage>72</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Moon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K. H.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. H.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. K.</given-names>
            <surname>Cha</surname>
          </string-name>
          , W. Han,
          <string-name>
            <given-names>C. G.</given-names>
            <surname>Park</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H. J.</given-names>
            <surname>Na</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Lee</surname>
          </string-name>
          .
          <article-title>Parallel replication across formats in SAP HANA for scaling out mixed OLTP/OLAP workloads</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>10</volume>
          (
          <issue>12</issue>
          ):
          <fpage>1598</fpage>
          -
          <lpage>1609</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>M. T. O</surname>
          </string-name>
          <article-title>¨zsu and</article-title>
          <string-name>
            <given-names>P.</given-names>
            <surname>Valduriez</surname>
          </string-name>
          .
          <source>Principles of Distributed Database Systems, Third Edition</source>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Patin</surname>
          </string-name>
          <article-title>˜o-Mart´ınez</article-title>
          , R. Jim´
          <article-title>enez-</article-title>
          <string-name>
            <surname>Peris</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Kemme</surname>
            , and
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Alonso.</surname>
          </string-name>
          MIDDLE-R:
          <article-title>consistent database replication at the middleware level</article-title>
          .
          <source>ACM Trans. Comput. Syst.</source>
          ,
          <volume>23</volume>
          (
          <issue>4</issue>
          ):
          <fpage>375</fpage>
          -
          <lpage>423</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Rabl</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Jacobsen</surname>
          </string-name>
          .
          <article-title>Query centric partitioning and allocation for partially replicated database systems</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <fpage>315</fpage>
          -
          <lpage>330</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>D.</given-names>
            <surname>Schwalb</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kossmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Faust</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Klauck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Uflacker</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Plattner.</surname>
          </string-name>
          Hyrise-R:
          <article-title>Scale-out and hot-standby through lazy master replication for enterprise applications</article-title>
          .
          <source>In IMDM@VLDB</source>
          , pages
          <volume>7</volume>
          :
          <fpage>1</fpage>
          -
          <issue>7</issue>
          :
          <fpage>7</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Verbitski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gupta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Saha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Brahmadesam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Gupta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Mittal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Krishnamurthy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Maurice</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Kharatishvili</surname>
          </string-name>
          , and
          <string-name>
            <given-names>X.</given-names>
            <surname>Bao</surname>
          </string-name>
          .
          <article-title>Amazon aurora: Design considerations for high throughput cloud-native relational databases</article-title>
          .
          <source>In SIGMOD</source>
          , pages
          <fpage>1041</fpage>
          -
          <lpage>1052</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>