<!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>Koral: A Glass Box Profiling System for Individual Components of Distributed RDF Stores</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Daniel Janke</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Steffen Staab</string-name>
          <email>s.r.staab@soton.ac.uk</email>
          <email>staab@uni-koblenz.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matthias Thimm</string-name>
          <email>thimm@uni-koblenz.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute for Web Science and Technologies Universität Koblenz-Landau</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Web and Internet Science Group University of Southampton</institution>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>In the last years, scalable RDF stores in the cloud have been developed increasing the complexity of RDF stores running on a single computer. In order to gain a deeper understanding how, e.g., the data placement or the distributed query execution strategies affect the performance, we have developed the modular glass box profiling system Koral. With its help, it is possible to test the behaviour of already existing or newly created strategies tackling the challenges caused by the distribution in a realistic distributed RDF store. Thereby, the design goal of Koral is that only the evaluated component needs to be exchanged and the adaptation of other components is aimed to be minimal. The wide variety of measurements allow for an in-depth investigation of the performance. With Koral we analyse the impact of the three most commonly used data placement strategies and found out that balancing query workload reduces the query execution time more than reducing the data transfer.</p>
      </abstract>
      <kwd-group>
        <kwd>distributed RDF store</kwd>
        <kwd>glass box</kwd>
        <kwd>profiling system</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        In the last years, several scalable RDF stores in the cloud were developed, in which
graph data is distributed over compute and storage nodes for scaling efforts of query
processing and memory needs. This distribution over several compute and storage nodes
introduces a higher degree of complexity. In contrast to centralized RDF stores,
distributed RDF stores need strategies for data placement over compute and storage nodes,
for distributed query processing and for handling failures of compute or storage nodes.
Several approaches aiming to improve these aspects of distributed RDF stores were
developed in the recent years. This includes new graph cover strategies like [
        <xref ref-type="bibr" rid="ref10 ref19">19, 10</xref>
        ] and
new distributed query processing approaches like [
        <xref ref-type="bibr" rid="ref23 ref25">23, 25</xref>
        ].
      </p>
      <p>In order to improve the current state-of-the-art, the strength and weaknesses of the
already existing techniques as well as their impacts on the individual components of
a distributed RDF store need to be identified. Therefore, glass box profiling systems
are required that (i) profile the performance of a component in a distributed RDF store,
(ii) allow for a fair comparison of alternative implementations of a single component
and (iii) provide measurements for in-depth analyses of the performance. Especially,
the second ability is important since comparing the performance of alternative
implementations helps to identify their weaknesses and thus, indicate directions for future
improvements.</p>
      <p>
        Evaluation platforms like Granula [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] allow for analysing the performance of
large-scale graph processing systems. Thereby, they provide insights on the
performance of the individual components used by the tested systems. Their drawback is
that, e.g. alternative data placement strategies can only be compared by comparing
systems that use different data placement strategies. Since only the differences between
complete systems can be profiled, we call platforms like Granula black box
evaluation platforms. These black box evaluation platforms can hardly answer the question
of whether an observed difference in the network traffic is caused by, e.g. the new data
placement strategy, a better query execution or optimization technique. The
identification of the actual cause requires systems that are identical in all but the examined
component.
      </p>
      <p>
        Due to the absence of glass box profiling systems in which alternative
implementations of the same component can be profiled within one system, [
        <xref ref-type="bibr" rid="ref11 ref5">5, 11</xref>
        ] suggest the usage
of distributed batch processing systems like Apache Hadoop [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and Apache Spark [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
to evaluate individual components of a distributed RDF store. These systems use
distributed file systems for the data exchanges between individual compute nodes leading
to a slower data exchange than systems using direct peer-to-peer communication [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
Thus, approaches reducing the network traffic showed a better performance.
      </p>
      <p>
        To enable fairer in-depth performance analyses of alternative implementations of
individual components, our first contribution is the open source glass box profiling
system Koral [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. It is a modularized distributed RDF store in which the inter-dependencies
between its components are reduced to an extent that each component can be exchanged
with alternative implementations. Together with the wide variety of provided metrics,
Koral allows for in-depth performance analyses of approaches tackling the challenges
of distributed RDF stores.
      </p>
      <p>
        Our second contribution is a case study in which we use Koral to examine the effect
of frequently used data placement strategies on the query performance. We could
observe that a data placement strategy that reduces the data transfer during query
processing performed worse than data placement strategies that balanced the query workload
equally among all compute nodes. A more detailed and extensive evaluation of graph
cover strategies and their effect on the query execution when scaling the number of
compute nodes can be found in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>In short, the contributions of this paper are:
1. The open source glass box profiling system Koral that (a) profiles the performance
of different variants of the same component and (b) provides metrics for an in-depth
investigation of the observed behaviour (Sec. 3).
2. A profiling of frequently used data placement strategies using Koral indicating that
a more balanced query workload might have a higher impact on the query
performance than a reduction of the data transfer (Sec. 4).</p>
    </sec>
    <sec id="sec-2">
      <title>Formalisation of Challenges</title>
      <p>Distributed RDF stores have several challenges. In the context of this paper, we will
focus on the challenges of the data placement and the distributed query processing.
Their formalization is given in the following two sections.
2.1</p>
      <sec id="sec-2-1">
        <title>Formalisation of Data Placement</title>
        <p>
          To formalize the Data Placement challenge, we define RDF graphs like in [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. Assume
a signature = (I; B; L), where I, B and L are pairwise disjoint infinite sets of IRIs,
blank nodes and literals, respectively. The union of these sets is abbreviated as IBL.
Definition 1. The set of all possible RDF triples T for signature is defined by T =
(I [ B) I IBL. An RDF graph G or simply graph is defined as G T .
(s; p; o) 2 T is also called a triple with subject s, property p and object o. To simplify
later definitions, the functions subj(t), obj(t) and prop(t) return the subject, object or
property of triple t, respectively. Likewise, we use subj(T ), obj(T ) and prop(T ) to
refer to the set of subjects, objects and properties in the triple set T .
        </p>
        <p>In the context of distributed RDF stores, the triples of a graph have to be assigned
to different compute and storage nodes (in the following, we refer to them more briefly
as compute nodes). The finite set of compute nodes is denoted as C.</p>
        <p>Definition 2. Let G denote an RDF graph. Then a graph cover is a function cover :
G ! 2C , that assigns each triple of a graph G to at least one compute node.
Definition 3. The function chunk returns the triples assigned to a specific compute
node by a graph cover (graph chunks). It is defined as</p>
        <p>chunkcover: C ! 2G
chunkcover(c):= ftjc 2 cover(t)g :
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Formalisation of Distributed Query Execution Strategy</title>
        <p>
          The challenge of the distributed query execution is to find a strategy to execute a query
on several compute nodes each of them storing a different graph chunk. The result of
the distributed query execution should be the same as when executed on an RDF store
running on a single compute node and storing the complete graph. To formalize the
distributed query execution, we define a SPARQL core as done in [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ], [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] and [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].
For this definition the infinite set of variables V that is disjoint from IBL is required.
In order to distinguish the syntax of variables from other RDF terms, they are prefixed
with ?. The syntax of SPARQL is defined as follows.
        </p>
        <sec id="sec-2-2-1">
          <title>Definition 4. A basic graph pattern (BGP) is a</title>
          <p>1. triple pattern, i.e. an element of the set TP = (I [ L [ V ) (I [ V ) (I [ L [ V )
2. a conjunction B1:B2 of two BGPs B1 and B2.</p>
          <p>Definition 5. A SELECT query is defined as SELECT W WHERE {B} with W
B a BGP.</p>
          <p>V and
Before the semantics of a SPARQL query can be defined, some additional definitions
are required. In the following Q represents the set of all SPARQL queries and the partial
function : V !7 IBL represents a variable binding. The abbreviated notation (t) with
t 2 TP means that the variables in t are substituted according to .</p>
          <p>Definition 6. Two variable bindings i and j are compatible, denoted by i
8?x 2 dom( i) \ dom( j ) : i(?x) = j (?x).3
j , if
Definition 7. The join of two sets of variable bindings 1 and
2 is defined as
1 on 2 = f 1 [ 2j 1 2 1 ^ 2 2 2 ^ 1 2g.</p>
          <p>
            The variables contained in dom( 1) \ dom( 2) are called join variables.
[
            <xref ref-type="bibr" rid="ref21">21</xref>
            ] and [
            <xref ref-type="bibr" rid="ref4">4</xref>
            ] define the semantics of a SPARQL query as follows:
Definition 8. The evaluation of a SPARQL query Q over an RDF Graph G, denoted by
JQKG, is defined recursively as follows, with var(tp) returning all variables occurring
in triple pattern tp:
1. If tp 2 TP then JtpKG = f j dom( ) = var(tp) ^ (tp) 2 Gg.
2. If B1 and B2 are BGPs, then JB1:B2KG = JB1KG on JB2KG.
3. If W V and B is a BGP, then JSELECT W WHERE {B}KG = project(W; JBKG) =
          </p>
          <p>B G .4
jW j 2 J K
Definition 9. The distributed evaluation of a SPARQL query Q over an arbitrary graph
cover called cover that assigns triples of an arbitrary RDF graph G to compute nodes
C, denoted by JQKcover, is defined as JQKcover := S JQKccover. Thereby, JQKccover is the
c2C
set of all results produced on compute node c during the distributed query evaluation5.
In order to be equivalent to the centralized query evaluation, every distributed execution
mechanism has to be semantically correct.</p>
          <p>Theorem 1. The centralized evaluation of query Q over graph G JQKG produces
exactly the same results as its distributed evaluation, i.e.</p>
          <p>JQKcover = JQKG :
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Glass Box Profiling System Koral</title>
      <p>
        In order to gain deeper insights in the strength and weaknesses of individual approaches
tackling the challenges of distributed RDF stores, glass box profiling systems are
required. These systems should be:
realistic so that the profiled performance is similar to a realistic distributed RDF store.
modular to test varying approaches tackling the same distributed RDF store challenge.
investigative by performing measurements that allow for an in-depth analysis of the
performance of the examined components.
3 dom( ) refers to the set of variables of this binding.
4 is restricted to the variables in W .
5 ThjWe fmoremanals dtheafitntihtieondoomf aJiQnKoccfover can be found in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        The glass box profiling system Koral [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] is realistic since it is designed as a distributed
RDF store. Its architecture is presented in Sec. 3.1.
      </p>
      <p>We achieved modularity by separating the core functionalities into individual
components whose functionality used by other components are declared by interfaces.
Furthermore, we reduced the inter-dependencies between components to an extent that
each component can be exchanged with alternative implementations. With its current
state of modularity, components tackling the following challenges of distributed RDF
stores can be profiled: the data placement strategy, the centralized indexing of all graph
chunks, the distributed query execution strategy including query optimization, the
handling of compute node failures as well as the efficient data transfer between compute
nodes. Due to space limitations we will only present the exchangeability of the graph
cover strategy (Sec. 3.2) and of the distributed query execution mechanism (Sec. 3.3).</p>
      <p>In order to be investigative, Koral provides a wide variety of measures as described
in Sec. 3.4. Beside time-based measures, Koral also provides several time-independent
measures to investigate the performance without influences caused by the experimental
setting. The limitations of Koral are discussed in Sec. 3.5.
3.1</p>
      <sec id="sec-3-1">
        <title>Architecture Overview</title>
        <p>Koral consists of one master node and several slaves as shown in Fig. 1. In general,
the master creates the graph cover, assigns chunks to slaves and coordinates the query
execution. The slaves are responsible for the query processing. The network managers
maintain peer-to-peer network connections and manage the network communication.
At loading, the huge size of the input graph needs to be reduced as early as possible.
Therefore, the contained textual resources are replaced by numerical ids. The creation of
the ids as well as storing the mapping between the textual and the numerical
representation is done by the dictionary encoder. Since some graph cover strategies might require,
e.g. subjects, as plain text, the dictionary encoder encodes only those parts of the triples
that are not required in their textual representation (see Sec. 3.2). The encoded graph is
then used by the graph cover creator to create the requested graph chunks. If unencoded</p>
      </sec>
      <sec id="sec-3-2">
        <title>Master</title>
        <p>Dictionary Graph Cover Query Execution
Encoder Creator Coordinator
Network
Manager
Dictionary</p>
        <p>Statistics</p>
      </sec>
      <sec id="sec-3-3">
        <title>Slave1</title>
        <p>Query Network
Executor Manager
Local Triple Indices</p>
      </sec>
      <sec id="sec-3-4">
        <title>Slaven</title>
        <p>Query Network
Executor Manager</p>
        <p>Local Triple Indices</p>
        <p>Fig. 1: Architecture of Koral.
triple elements exist, they are encoded after the graph cover creation in order to reduce
the size of the graph chunks.</p>
        <p>In order to perform, e.g. cost estimations required for query optimization or a load
balancing during query execution, statistical information about the content of each
graph chunk may be required. Therefore, the frequency of the different resources in
the different chunks is counted and stored in a statistics database.</p>
        <p>
          Some distributed query execution strategies might require some preprocessing steps
of the input data like appending additional information to the encoded resource ids.
Therefore, the master iterates all graph chunks a last time before they are sent to the
slaves. The slaves create local index structures (SPO, OSP, and POS indices as described
in [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]). While the multi-pass strategy has the disadvantage that it iterates the data
files several times, it has the advantage that it prevents to run out of memory and is
thus highly scalable for very large files. In order to reduce the cost of disk I/O, all
components except the statistics database access the data files linearly.
At run-time, a query execution coordinator is instantiated for each received query.
After the initial parsing step including the encoding of constants, the query execution
trees for the slaves are created and sent to the corresponding slave.
        </p>
        <p>Each slave executes the query execution tree assigned to him. The match operations
use the local triple indices to find matches for the corresponding triple pattern. The
resulting variable bindings are transferred to the succeeding operation on the same or any
other slave. In order to make better use of the network bandwidth, several intermediate
results are bundled together and sent to the receiving slave within one package. The
final query results are sent to the query coordinator. The coordinator decodes the ids
using the dictionary and sends the decoded variable bindings to the sender of the query.
3.2</p>
      </sec>
      <sec id="sec-3-5">
        <title>Exchangeability of Graph Cover Strategies</title>
        <p>To allow for testing new graph cover strategies, all methods used by Koral are declared
in the interface of the GraphCoverCreator component (Fig. 2a). During the
initial dictionary encoding phase all elements of the RDF tuple that are not required in
their textual representation for the graph cover creation are encoded. With the method
getRequiredInputEncoding() each graph cover strategy can define, whether it
requires the subject, property or object in its textual representation. These elements will
be automatically encoded after the graph cover is created.</p>
        <p>The actual graph cover creation is performed by createGraphCover(). It
receives the initially encoded input RDF file, a working directory where the graph chunks
should be created and the number of graph chunks to be created as input. For the sake
of brevity, these input parameters are omitted in Fig. 2a. The created graph chunks are
finally returned by this method and processed in the succeeding graph loading steps.</p>
        <p>In order to avoid restrictions on the graph cover strategies that can be used in
Koral, a distributed query execution strategy is required that works with arbitrary graph
covers including triples assigned to more than one compute node. This graph
coverindependent query execution strategy is the default implementation in Koral. This
strategy is explained in the following section.</p>
        <p>«interface»</p>
        <p>GraphCoverCreator
+ getRequiredInputEncoding(): EncodingFileFormat
+ createGraphCover(): File[]
«interface»</p>
        <p>WorkerTask
+ setUp(): void
+ execute(): void
+ isInFinalState(): void
+ close(): void
+ enqueueMessage(): void
(a) The interface of the graph cover creator component. (b) The interface for query operations.</p>
        <p>
          The existing implementations of Koral comprises three graph cover strategies:
1. The hash cover [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] assigns triples to chunks according to the hash value computed
on their subjects modulo the number of compute nodes. Thus, all triples with the
same subject are located in the same graph chunk.
2. The hierarchical hash cover [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] is inspired by the observations that IRIs have a
path hierarchy and IRIs with a common hierarchy prefix are often queried together.
        </p>
        <p>
          Therefore, this cover creates a hash cover only on IRI prefixes.
3. The minimal edge-cut cover is a vertex-centred partitioning which tries to solve the
k-way graph partitioning problem as described in [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. It aims at minimizing the
number of edges between vertices of different partitions under the condition that
each partition contains approximately the same number of vertices.
3.3
        </p>
      </sec>
      <sec id="sec-3-6">
        <title>Exchangeability of Distributed Query Execution Strategies</title>
        <p>Distributed query execution strategies may vary in (i) additional information added to
the graph chunks, (ii) the way query execution trees are created for the individual slaves,
and (iii) the actual implementation of the query operations executed on the slaves.</p>
        <p>In order to encode additional information into the graph chunks, the loading
procedure of the graph includes a step for final adjustments of the created graph chunks. In
order to implement such final adjustments, the method performFinalAdjustments()
in class GraphLoaderTask needs to be implemented. It receives the graph chunks
as input and returns the adjusted graph chunks.</p>
        <p>After the graph is loaded, the master accepts queries. For each query, a new query
execution coordinator is started. This coordinator parses the query and creates the query
execution trees that are sent to the slaves. The query execution trees sent to the
individual slaves can be adjusted by implementing executePreStartStep() in
QueryExecutionCoordinator. Since statistical information about the occurrences
of resources in the individual graph chunks might be required, the method provides
access to the statistics database.</p>
        <p>New query operations can be created by implementing the WorkerTask interface
(Fig. 2b). Each slave has a query executor component that runs for each available CPU
core one worker thread. The query executor registers query operations at the worker
threads based on their current workload. After the registration the method setUp() is
called. Thereby, the operation gets access to the network manager, to send messages to
other operations, and to the local triple indices. After initialization, the worker thread
circularly calls execute() of all query operations assigned to him. During these
method calls each operation performs its work and processes received messages.
Incoming messages are announced via enqueueMessage(). When an operation is
finished, the worker thread unregisters it and calls close().</p>
        <p>
          The existing implementation of Koral extends the state-of-the-art asynchronous
execution mechanism realised in TriAD [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. This extension makes it independent of the
used graph cover strategy. Its formal definition and the proofs of soundness and
completeness are given in [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
        </p>
        <p>In order to reduce the number of transferred intermediate results, each resource is
uniquely assigned to a slave that is responsible for joining it during the query
processing. This assignment of a resource is based on the frequency with which it occurs in
the different graph chunks. Therefore, when the statistical data have been completely
collected and the loading process iterates over all graph chunks a last time, the slaves
responsible for joining the individual resources are determined. The resource id is then
prefixed by the id of the responsible slave and written to disk again.</p>
        <p>When the master receives a query, it creates a query execution coordinator. This
coordinator parses the query and creates the query execution tree. This tree is submitted to
all slaves. During the query execution on the slaves, each operation transfers its
resulting variable bindings to the succeeding join operation on the slave responsible for the
join of the resource. Whenever the join operation receives a variable binding, it is joined
with the cached variable bindings. The join results are directly sent to the succeeding
operation. When all child operations of a query operation o in the query execution tree
are finished and no further input needs to be processed, it sends a finish notification to
all o operations on the other slaves. If o has received the finish notifications from all
other o operations, it declares itself as finished. This synchronization step is required to
guarantee that all results are found. The root operation in the query execution tree sends
its results to the query coordinator. The coordinator forwards them to the sender of the
query after they have been decoded.
3.4</p>
      </sec>
      <sec id="sec-3-7">
        <title>Evaluation Measures</title>
        <p>In order to gain deeper insights about the effect of a graph cover strategy or a distributed
query execution strategy, Koral provides a wide variety of measurements. Beside
different run time measurements, Koral measures also many time-independent measurements
like the storage imbalance, the workload and the network usage. With the help of these
measurements, meaningful metrics can be defined that allow for comparing different
strategies.</p>
        <p>Loading Time. Loading a dataset typically involves at least seven steps, some of which
may be interleaved and/or parallelized:
1. Initial dictionary encoding of nodes and labels unused during graph cover creation
for faster access and memory savings.
2. Computation of the graph cover.
3. Final dictionary encoding of nodes and labels used during graph cover creation.
4. Collection of statistical information.
5. Perform query strategy-dependent adjustments of graph chunks.
6. Transfer of data chunks to compute nodes.
7. Indexing of data chunks at local compute nodes.</p>
        <p>Given a dataset and a graph cover strategy, the overall load time comprises these 7 steps,
but also the run times of the individual steps are of interest. For instance, the graph cover
computation time can be used to compare different graph cover strategies, whereas the
time required for the query strategy-dependent adjustments of the graph chunks might
be one important factor for the comparison of distributed query execution strategies.
Storage imbalance. Scaling the cloud for handling growing memory needs may be
jeopardized by graph cover strategies avoiding data transfer. They might generate a
skewed distribution delegating expensive tasks on few compute nodes. Therefore, Koral
counts the number of triples stored in each graph chunk. These measurements are used
to evaluate the quality of the storage distribution resulting from a graph cover strategy.
Querying Time. For the overall query performance, different performance
characteristics of an RDF store may be desirable. While the time to deliver the complete result is
crucial, e.g., for statistical reports, in a fact-finding mission one may be more interested
in only few top-k results being returned quickly. Hence, we provide different kinds of
performance characteristics. Characteristics depend on measuring the time interval
between issuing the query q at time tq0 and the time when the i-th result is returned at
tiq with Kq representing the overall number of query results for query q. We drop the
superscript q when it is clear from context as in the following definition. With the tiq
values, the frequency in which the individual query results are returned can be analysed.
With the help of Kq the query time to completion can be computed.</p>
        <p>Definition 10. Overall query performance is evaluated by the query time to completion
exT ime := tK t0.</p>
        <p>To compare the performance of different implementations of the same query operator
or to find bottlenecks in a query execution strategy, a more detailed measurement of the
individual query operation run times may be required. Therefore, Koral measures for
each operation on each slave how long this operation idles and how long it works.
Network Usage. Time-based measurements such as exT ime depend on the exact
configuration of the system such as network bandwidth and latency. In a distributed system,
the transfer of data via the network is a time-consuming operation.</p>
        <p>In order to measure the volume of data transferred between compute nodes, we
measure for each query operation the number of variable bindings transferred to each
slave as well as the number of bound variables.</p>
        <p>Beside the volume of transferred data also the number of sent packages are part
of the network usage, since in a network with high latency this number might have a
strong effect on the query run time. The network manager of Koral collects a bunch of
variable bindings before it sends them as a single package to another slave. Thereby it
counts the number of packages transferred to each other slave.</p>
        <p>Definition 11. For a given cover and a given query execution tree q, we define the
number of transferred packages P := Pc2C Pc, where Pc is the number of packages
sent from c to any other compute node c0 6= c.</p>
        <p>The data transfer is sometimes also used as the preferred measurement for overall query
efforts in the cloud, as in standard cloud architecture the processor-to-remote-memory
gap by far excels the processor-to-local-memory gap. In newer hardware architectures
that natively support remote direct memory access large differences between these gaps
cannot be taken for granted anymore. Thus, we prefer to measure the network usage
and the workload imbalance.</p>
        <p>Query Workload. An interesting question to answer would be, how many join
comparisons might be executed by different compute nodes in parallel. This number is very
difficult to obtain as it would require the definition and implementation of complex
concepts in a distributed system such as ‘simultaneous’ or ‘nearly simultaneous’. We pursue
a simple, but effective strategy here, by simply measuring the number of comparisons
performed by each join operation on each slave and computing the Gini coefficient on
the resulting distribution of join comparisons over different compute nodes.
tional effort on all slaves.</p>
        <p>Definition 12. For a cover and a query execution tree q, workload imbalance W is the
Gini coefficient:</p>
        <p>jCj
2 P i wSeq(i)</p>
        <p>W := (jCi=j1 1) w(C) jjCCjj+11 ; 0 W 1
where the workload of a compute node w(c) is defined by the number of join
comparisons of all query operations on c, wSeq(i) denotes the ith workload in the ascending
workload sequence of all compute nodes, and w(C) = P w(c) is the total
computac2C
3.5</p>
      </sec>
      <sec id="sec-3-8">
        <title>Limitations</title>
        <p>During the design of Koral we tried to design the components independent of other
components. Since a complete separation of concerns for all invented or not-yet-invented
methods is not possible, some of the components provided by Koral might punish some
methods with a poorer performance. Nevertheless, in this case the modularity of Koral
allows for exchanging the punishing component by an improved implementation and
using this one for a fairer evaluation.</p>
        <p>Furthermore, the current design of Koral does not foresee the evaluation of
transactions. In order to support transactions, the architecture might be extended by additional
components and already existing components need to be adapted.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Case Study Evaluation</title>
      <p>
        In a graph cover benchmark the graph cover strategy would be the only independent
input variable based on which to pursue evaluation and to obtain values for dependent
variables. Performance observations of graph cover strategies, however, are tightly
interwoven with several factors. By using Koral for our benchmark6, we can compare the
performance of the different graph cover strategies without varying any other part of
the distributed RDF store. Therefore, most factors influencing the performance
comparison negatively could be avoided. Other influencing factors might be the dataset and
6 A more detailed description of this benchmark and its results can be found in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
the queries used for the benchmark. To reduce the impact of these factors, we use a
real-world dataset and a diverse set of queries as described in Sec. 4.1. The results of
our evaluation are shown in Sec. 4.2.
4.1
      </p>
      <sec id="sec-4-1">
        <title>Experimental Setup</title>
        <p>The set of configurations in our benchmark results from the multiplicative combination
of (i) the set of different graph cover strategies and (ii) the set of different query-dataset
combinations.</p>
        <p>Compared Graph Cover Strategies. During the evaluation, a hash cover, a
hierarchical hash cover and a minimal edge-cut cover are compared. We use the implementations
provided by Koral.</p>
        <p>
          Dataset and Queries. In order to avoid effects that occur due to the generation process
of a synthetic dataset, we use a subset of the real-world billion triple challenge dataset
from 2014 (BTC2014) [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. This dataset has been generated by crawling data from
several data sources of the linked open data cloud. The used subset contains the first
one billion syntactically correct triples.
        </p>
        <p>
          Since the core functionality of SPARQL is provided by matching basic graph
patterns, we follow the strategy of most other benchmarks, performing evaluations with
varied basic graph pattern structures. In particular, we use SPLODGE [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] to generate
queries with the following characteristics for the one billion triple subset:
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>Number of triple patterns: 2 and 8 triple patterns.</title>
        <p>Selectivity: 0.001% and 0.01% involving between 1 million and 10 million triples.
Join patterns: path-shaped (subject-object join) and star-shaped (subject-subject join).
Number of data sources: 1 and 3 source data sets.</p>
        <p>
          Execution Strategy. We downloaded the BTC2014 dataset, removed all syntactically
incorrect triples and created the one billion triple dataset. The resulting dataset is used
by SPLODGE [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ], configured as described above, to generate the query set for the
benchmark. For each graph cover strategy Koral is cleared, the dataset is loaded and
the list of configured queries is executed 10 times. Thus, the effect of operating
systemdependent caches storing the results of the previously executed query is reduced,
because no query is immediately reexecuted after it has finished. The effect of outliers
caused by, e.g. garbage collection is prevented by ignoring the best and the worst
execution time computing the arithmetic mean of the remaining values as exT ime.
Computer and Software Environment. Koral is executed on 11 VMs. The master has
4 cores and 64 GB RAM and the 10 slaves have 1 core and 2 GB RAM each. Since the
Koral master VM needs to store the complete dataset, it has a 1 TB hard disk. The slaves
have 300 GB hard disks. The physical computers on which the VMs run are connected
via a 1 Gigabit Ethernet network.
        </p>
        <p>The operating system of each VM is a 64 bit Ubuntu 14.04.4 with the Linux kernel
3.13.0-96. The Oracle JDK 1.8.0_101 is used to execute Koral in version 0.0.1. In order
to create the minimal edge-cut cover, METIS 5.1.0.dfsg-2 is used.
,
lea ) 100
c %
sg in
lo H 10
(e S
im HA 0
nT to
tiuo eng 10
ecx cah 100</p>
        <p>E</p>
        <p>Queries</p>
        <p>Fig. 3: exT ime of all queries relative to the hash cover.
4.2</p>
      </sec>
      <sec id="sec-4-3">
        <title>Results</title>
        <p>As the possible configurations of independent variables (configuration settings) and
dependent variables (evaluation measures) is staggering, we focus on analysis results
by depicting (i) overall query performance, (ii) network usage and (iii) query workload.
In order to improve the comprehensibility of the diagrams we name the queries based on
their characteristics. For instance, the query so #tp=8 #ds=3 sel=0.01 describes a
query containing 8 subject-object joined triple patterns matching triples from 3 data
sources and the sum of the selectivities of all triple patterns is 0.01.</p>
        <p>Overall Query Performance. We measure the overall query performance in terms of
the execution times exT ime. Fig. 3 shows the exT ime of all queries. Due to the huge
differences in the execution times of the varying queries, the execution times are shown
relative to the exT ime required for the hash cover. The figure shows, that the minimal
edge-cut cover causes the longest query execution times in most cases. When comparing
the hash cover with the hierarchical hash cover, none of them is faster in general.
Network Usage. All examined graph cover strategies assign triples with the same
subject to the same chunk. Therefore, all triples required to produce one result of a
starshaped query are located in the same graph chunk. Since our query execution strategy
performs the required joins on the slave storing the original triples, no data transfer
could be observed. For query so #tp=2 #ds=1 sel=0.001 every graph cover
strategy produces almost the same number of transferred packages. For all other path-shaped
queries the minimal edge-cut cover reduces the data transfer by 20%-42% (see Fig. 4a).
The number of transferred packages of the hash and the hierarchical hash cover is
almost the same for all but two queries.</p>
        <p>Query Workload. We investigate the query workload by comparing the workload
imbalance W of all queries. Fig. 4b shows that the minimal edge-cut cover has the highest
HIERARCHICAL</p>
        <p>MIN_EDGE_CUT
s ) 0
aekg in% 150
c
aP SH 15
d A 20
e H 25
r
frsen teog 3305
a n 40
r#T (ach 45</p>
        <p>HASH
HIERARCHICAL
e0:6
acn0:5
l
ab0:4
Im0:3
d
lao0:2
rok0:1
W0:0
so#tpso=2s#ot#p#d=tsp2s=o=1#8s#dsots#ep#ld==1tsp80sso=.1#e08#l0s=ts#1ep0=l==.1s080=1s.3#e0ld0s=s1e0=l=.3001s.e0l0=10.01
= = d d
Queries
Queries
(a) The number of transferred
pack(b) The workload imbalance W .
ages P relative to the hash cover.</p>
        <p>Fig. 4: The number of transferred packages and the workload imbalance.
workload imbalance of all graph covers. This is caused by two small graph chunks that
have a much lower workload than the other graph chunks. Whereas, one huge graph
chunk with 160M triples does not produce a higher workload than the other chunks.</p>
        <p>W of queries so #tp=8 #ds=1 sel=0.001 and ss #tp=8 #ds=3 sel=0.01
are for all graph covers low, since these queries use some triple patterns for which only
a few matching triples exist in the dataset. Thus, only the slaves which store these triples
produce join comparisons. Especially in the case of the hierarchical hash cover, joins
were only computed on three slaves whereas the minimal edge-cut cover spreads these
instances across 6 Koral slaves.</p>
      </sec>
      <sec id="sec-4-4">
        <title>4.3 Discussion</title>
        <p>In our evaluation we have examined the impact of two hash-based graph covers, which
assign triples to graph chunks based on the hash of the complete IRI or only an IRI
prefix, and the minimal edge-cut cover, which assigns triples to chunks based on
structural information of the graph. The latter strategy takes more effort to be prepared but
due to the reduced number of cut edges, one might expect that queries can be processed
locally with less data transfer.</p>
        <p>
          Commonly, papers like [
          <xref ref-type="bibr" rid="ref18 ref22 ref28">18, 22, 28</xref>
          ] make the assumption that a graph cover strategy
with minimal data transfer implies low query execution time. However, our results
suggest that while minimal edge-cut reduces data transfer by 20% to 42% in comparison
to hash-based strategies (see Fig. 4a), due to a more imbalanced workload (see Fig. 4b),
the query execution time of minimal edge-cut is effectively slower (see Fig. 3).
        </p>
        <p>Our investigation suggests that in our setting the minimal edge-cut cover does not
perform better over all (see Fig. 3). Nevertheless, the minimal edge-cut cover might still
be a good choice in setting in which locality is important, e. g. in heterogeneous
networks with unreliable compute nodes. Since both hash-based covers perform similarly,
the simpler hash cover implementation might be preferred, if other functionality such
as prefix matching does not benefit from the hierarchical hash cover.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>
        Without profiling platforms, distributed RDF stores are usually profiled and compared
as black boxes as done in [
        <xref ref-type="bibr" rid="ref23 ref26 ref29 ref30">23, 26, 29, 30</xref>
        ]. Black box evaluations do not allow to improve
the current state-of-the-art since they cannot identify bottlenecks within a system. To
identify bottlenecks, glass box profiling is required in which the performance of
individual components is profiled.
      </p>
      <p>
        Black box valuation platforms like Granula [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] help to perform in-depth
analyses of large-scale graph processing systems and their components. These evaluation
platforms are useful to identify components that are the bottlenecks of these systems.
The usually strong dependencies between the individual components of distributed RDF
store limit the search space for more performant components to similar approaches with
relatively small modifications. The evaluation of fundamentally different approaches
would be feasible by evaluating different systems usually varying in several aspects.
      </p>
      <p>
        In order to profile fundamentally different approaches tackling the same challenge
of distributed RDF store, [
        <xref ref-type="bibr" rid="ref11 ref17 ref31 ref5">5, 11, 17, 31</xref>
        ] propose the usage of distributed batch
processing platforms like Apache Hadoop [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] or Apache Spark [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. The drawback of using
these systems is that they punish data transfer by the potentially huge overhead of
possibly several Hadoop jobs and the usage of distributed file systems for the data transfer
between compute nodes (see [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]).
      </p>
      <p>To the best of our knowledge, Koral is the only glass box profiling system that (i)
profiles the performance of a component in a distributed RDF store, (ii) allows for a fair
comparison of alternative implementations of a single component due to its
modularization and (iii) provides measurements for in-depth analyses of the performance.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>
        We have presented our versatile open source glass box profiling system Koral. It is a
modularized distributed RDF store in which the inter-dependencies between its
components are reduced to an extent so that each component can be exchanged with alternative
implementations. Thus, it allows for profiling novel approaches tackling the challenges
introduced by the distribution and compare them with already existing strategies. We
demonstrated the advantages of such a profiling platform with a case study evaluation
of different graph cover strategies revealing that contrary to common assumption the
minimal edge-cut cover may have a worse overall query execution performance than
hash-based data placement strategies. With the huge variety of measurements provided
by Koral, we found out that balancing the query workload across all compute nodes may
be more important for a fast query execution than the amount of network traffic. The
common believe was raised by evaluations like [
        <xref ref-type="bibr" rid="ref11 ref5">5, 11</xref>
        ] in which the authors reduced the
implementation effort by simulating distributed RDF stores with batch processing
systems that delay network traffic in contrast to direct peer-to-peer communication. With
our novel open source glass box profiling system Koral, freely available on the Web
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], further investigation of distributed RDF data management challenges with only
little implementation efforts are possible.
      </p>
      <p>The alternative implementations of Koral’s components used in future
investigations can be provided to the public. This growing set of implementations will support
the community by simplifying the comparison with state-of-the-art approaches or by
identifying novel combinations of components producing better overall performances.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. Apache hadoop. https://hadoop.apache.org/, accessed:
          <fpage>2017</fpage>
          -07-12
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2. Apache spark. https://spark.apache.org/, accessed:
          <fpage>2017</fpage>
          -07-12
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. Koral. https://github.com/Institute-Web-
          <article-title>Science-and-</article-title>
          <string-name>
            <surname>Technologies</surname>
          </string-name>
          / koral, accessed:
          <fpage>2017</fpage>
          -07-12
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Arenas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pérez</surname>
          </string-name>
          , J.:
          <article-title>Federation and Navigation in SPARQL 1.1</article-title>
          . In: Eiter,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Krennwallner</surname>
          </string-name>
          , T. (eds.)
          <source>Reasoning Web. Semantic Technologies for Advanced Query Answering, Lecture Notes in Computer Science</source>
          , vol.
          <volume>7487</volume>
          , pp.
          <fpage>78</fpage>
          -
          <lpage>111</lpage>
          . Springer Berlin Heidelberg (
          <year>2012</year>
          ), http://dx.doi.org/10.1007/978-3-
          <fpage>642</fpage>
          -33158-9\_
          <fpage>3</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Curé</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Naacke</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baazizi</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Amann</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>On the evaluation of RDF distribution algorithms implemented over apache spark</article-title>
          .
          <source>In: Proc. of the 11th Int. Workshop on Scalable Semantic Web Knowledge Base Systems (at ISWC-2015)</source>
          . pp.
          <fpage>16</fpage>
          -
          <lpage>31</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Görlitz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thimm</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Staab</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : Splodge:
          <article-title>Systematic generation of sparql benchmark queries for linked open data</article-title>
          .
          <source>The Semantic Web-ISWC</source>
          <year>2012</year>
          pp.
          <fpage>116</fpage>
          -
          <lpage>132</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Gurajada</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seufert</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Miliaraki</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Theobald</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>TriAD: A Distributed Shared-nothing RDF Engine Based on Asynchronous Message Passing</article-title>
          . In: SIGMOD. pp.
          <fpage>289</fpage>
          -
          <lpage>300</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Gutierrez</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hurtado</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mendelzon</surname>
            ,
            <given-names>A.O.</given-names>
          </string-name>
          :
          <article-title>Foundations of Semantic Web Databases</article-title>
          . In: PODS. pp.
          <fpage>95</fpage>
          -
          <lpage>106</lpage>
          . ACM (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Harth</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Decker</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Optimized Index Structures for Querying RDF from the Web</article-title>
          .
          <source>In: Proc. of LA-WEB '05</source>
          . pp.
          <fpage>71</fpage>
          <lpage />
          .
          <source>IEEE</source>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Hose</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schenkel</surname>
          </string-name>
          , R.: WARP:
          <article-title>Workload-aware replication and partitioning for RDF</article-title>
          .
          <source>In: Data Engineering Workshops (ICDEW)</source>
          . pp.
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          (
          <year>Apr 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Huang</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Abadi</surname>
            ,
            <given-names>D.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ren</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <source>Scalable SPARQL Querying of Large RDF Graphs. PVLDB</source>
          <volume>4</volume>
          (
          <issue>11</issue>
          ),
          <fpage>1123</fpage>
          -
          <lpage>1134</lpage>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Janke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Staab</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thimm</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Impact analysis of data placement strategies on query efforts in distributed rdf stores</article-title>
          .
          <source>Tech. rep.</source>
          , Institute for WeST (
          <year>2016</year>
          ), http://west.uni-koblenz.de/sites/default/files/research/ publications/janke2016iao_technicalreport.pdf
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Janke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Staab</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thimm</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>On data placement strategies in distributed rdf stores</article-title>
          .
          <source>In: Proceedings of The International Workshop on Semantic Big Data</source>
          . pp.
          <volume>1</volume>
          :
          <fpage>1</fpage>
          -
          <issue>1</issue>
          :
          <fpage>6</fpage>
          . SBD '17,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York, NY, USA (
          <year>2017</year>
          ), http://doi.acm.
          <source>org/10</source>
          .1145/3066911. 3066915
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Jiang</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ooi</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shi</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>The performance of mapreduce: An in-depth study</article-title>
          .
          <source>PVLDB</source>
          <volume>3</volume>
          (
          <issue>1</issue>
          ),
          <fpage>472</fpage>
          -
          <lpage>483</lpage>
          (
          <year>2010</year>
          ), http://www.comp.nus.edu.sg/~vldb2010/ proceedings/files/papers/E03.pdf
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Käfer</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harth</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Billion Triples Challenge data set</article-title>
          . Downloaded from http://km.aifb.kit.edu/projects/btc-2014/ (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Karypis</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kumar</surname>
          </string-name>
          , V.:
          <article-title>A Fast and High Quality Multilevel Scheme for Partitioning Irregular Graphs</article-title>
          .
          <source>SIAM J. Sci. Comput</source>
          .
          <volume>20</volume>
          (
          <issue>1</issue>
          ),
          <fpage>359</fpage>
          -
          <lpage>392</lpage>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Efficient Data Partitioning Model for Heterogeneous Graphs in the Cloud</article-title>
          .
          <source>In: Proc. of the Int. Conf. on High Performance Computing, Networking, Storage and Analysis</source>
          . pp.
          <volume>46</volume>
          :
          <fpage>1</fpage>
          --
          <lpage>46</lpage>
          :
          <fpage>12</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Scaling Queries over Big RDF Graphs with Semantic Hash Partitioning</article-title>
          .
          <source>PVLDB</source>
          <volume>6</volume>
          (
          <issue>14</issue>
          ),
          <fpage>1894</fpage>
          -
          <lpage>1905</lpage>
          (
          <year>Sep 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhou</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Efficient and Customizable Data Partitioning Framework for Distributed Big RDF Data Processing in the Cloud</article-title>
          .
          <source>In: IEEE CLOUD '13</source>
          . pp.
          <fpage>327</fpage>
          -
          <lpage>334</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Ngai</surname>
            ,
            <given-names>W.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hegeman</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Heldens</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iosup</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Granula: Toward Fine-grained Performance Analysis of Large-scale Graph Processing Platforms</article-title>
          .
          <source>In: Proceedings of the Fifth International Workshop on Graph Data-management Experiences &amp; Systems</source>
          . pp.
          <volume>8</volume>
          :
          <fpage>1</fpage>
          --
          <lpage>8</lpage>
          :
          <fpage>6</fpage>
          . GRADES'17,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York, NY, USA (
          <year>2017</year>
          ), http://doi.acm.
          <source>org/10</source>
          .1145/ 3078447.3078455
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Pérez</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Arenas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gutierrez</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Semantics and Complexity of SPARQL</article-title>
          .
          <source>ACM Trans. Database Syst</source>
          .
          <volume>34</volume>
          (
          <issue>3</issue>
          ),
          <volume>16</volume>
          :
          <fpage>1</fpage>
          --
          <lpage>16</lpage>
          :
          <fpage>45</fpage>
          (Sep
          <year>2009</year>
          ), http://doi.acm.
          <source>org/10</source>
          .1145/ 1567274.1567278
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Potter</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Motik</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horrocks</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Querying Distributed RDF Graphs: The Effects of Partitioning</article-title>
          .
          <source>In: Workshop on Scalable Semantic Web Knowledge Base Systems (SSWS</source>
          <year>2014</year>
          ). pp.
          <fpage>29</fpage>
          -
          <lpage>44</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Potter</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Motik</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nenov</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horrocks</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Distributed RDF Query Answering with Dynamic Data Exchange</article-title>
          , pp.
          <fpage>480</fpage>
          -
          <lpage>497</lpage>
          . Springer International Publishing,
          <string-name>
            <surname>Cham</surname>
          </string-name>
          (
          <year>2016</year>
          ), http://dx.doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -46523-4{\_}
          <fpage>29</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Prud'hommeaux</surname>
          </string-name>
          , E.,
          <string-name>
            <surname>Harris</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seaborne</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>SPARQL 1.1 Query Language</article-title>
          . W3c recommendation,
          <source>W3C</source>
          (
          <year>2013</year>
          ), http://www.w3.org/TR/sparql11-query/
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Saleem</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Ngonga</given-names>
            <surname>Ngomo</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.C.</surname>
          </string-name>
          :
          <article-title>HiBISCuS: Hypergraph-Based Source Selection for SPARQL Endpoint Federation</article-title>
          , pp.
          <fpage>176</fpage>
          -
          <lpage>191</lpage>
          . Springer International Publishing,
          <string-name>
            <surname>Cham</surname>
          </string-name>
          (
          <year>2014</year>
          ), http://dx.doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -07443-6{\_}
          <fpage>13</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Saleem</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Ngonga</given-names>
            <surname>Ngomo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.C.</given-names>
            ,
            <surname>Xavier</surname>
          </string-name>
          <string-name>
            <surname>Parreira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Deus</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.F.</given-names>
            ,
            <surname>Hauswirth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            : DAW:
            <surname>Duplicate-AWare Federated Query</surname>
          </string-name>
          <article-title>Processing over the Web of Data</article-title>
          , pp.
          <fpage>574</fpage>
          -
          <lpage>590</lpage>
          . Springer Berlin Heidelberg, Berlin, Heidelberg (
          <year>2013</year>
          ), http://dx.doi.org/10. 1007/978-3-
          <fpage>642</fpage>
          -41335-3{\_}
          <fpage>36</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Wood</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gearon</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Adams</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Kowari: A platform for semantic web storage and analysis</article-title>
          .
          <source>In: In XTech 2005 Conference</source>
          . pp.
          <fpage>05</fpage>
          -
          <lpage>0402</lpage>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhou</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yuan</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jin</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liu</surname>
          </string-name>
          , L.:
          <article-title>SemStore: A Semantic-Preserving Distributed RDF Triple Store</article-title>
          .
          <source>In: CIKM-2014</source>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <surname>Wylot</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cudré-Mauroux</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          : Diplocloud:
          <article-title>Efficient and scalable management of rdf data in the cloud</article-title>
          .
          <source>IEEE Transactions on Knowledge and Data Engineering</source>
          <volume>28</volume>
          (
          <issue>3</issue>
          ),
          <fpage>659</fpage>
          -
          <lpage>674</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <surname>Zeng</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yang</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shao</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>A Distributed Graph Engine for Web Scale RDF Data</article-title>
          .
          <source>PVLDB</source>
          <volume>6</volume>
          (
          <issue>4</issue>
          ),
          <fpage>265</fpage>
          -
          <lpage>276</lpage>
          (
          <year>Feb 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31.
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tong</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>EAGRE: Towards scalable I/O efficient SPARQL query evaluation on the cloud</article-title>
          .
          <source>In: ICDE-2013</source>
          . pp.
          <fpage>565</fpage>
          -
          <lpage>576</lpage>
          (
          <year>Apr 2013</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>