<!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>On the Evaluation of RDF Distribution Algorithms Implemented over Apache Spark</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Olivier Cure´</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hubert Naacke</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mohamed-Amine Baazizi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Bernd Amann</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Sorbonne Universite ́s</institution>
          ,
          <addr-line>UPMC Univ Paris 06, UMR 7606, LIP6, F-75005, Paris, CNRS, UMR 7606, LIP6, F-75005, Paris</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
      </contrib-group>
      <fpage>16</fpage>
      <lpage>31</lpage>
      <abstract>
        <p>Querying very large RDF data sets in an efficient and scalable manner requires parallel query plans combined with appropriate data distribution strategies. Several innovative solutions have recently been proposed for optimizing data distribution with or without predefined query workloads. This paper presents an in-depth analysis and experimental comparison of five representative RDF data distribution approaches. For achieving fair experimental results, we are using Apache Spark as a common parallel computing framework by rewriting the concerned algorithms using the Spark API. Spark provides guarantees in terms of fault tolerance, high availability and scalability which are essential in such systems. Our different implementations aim to highlight the fundamental implementation-independent characteristics of each approach in terms of data preparation, load balancing, data replication and to some extent to query answering cost and performance. The presented measures are obtained by testing each system on one synthetic and one real-world data set over query workloads with differing characteristics and different partitioning constraints.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        During the last few years, an important number of papers have been published on data
distribution issues in RDF database systems, [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] and [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] to name a few.
Repositories of hundreds of millions to billions of RDF triples are now more and more
frequent and the main motivation of this research movement is the efficient management
of ever growing size of produced RDF data sets. RDF being one of the prominent data
models of the Big data ecosystem, RDF repositories have to cope with issues such as
scalability, high availability, fault tolerance. Other systems addressing these issues like
NoSQL systems [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], generally adopt a scale-out approach consisting of distributing
both data storage and processing over a cluster of commodity hardware.
      </p>
      <p>Depending on the data model, it is well-known that an optimal distribution in terms
of data replication rate (characterizing the number of copies of a given information
across the cluster), load balancing and/or query answering performance is hard to achieve.
RDF data encode large graphs and obtaining a balanced partitioning into smaller
components with specific properties is known to be an NP-hard problem in general. Hence,
most distributed RDF systems are proposing heuristic-based approaches for
producing optimal data distributions with respect to specific query processing environments
and query workloads. In a distributed RDF data processing context, the total cost of
a distributed query evaluation process is often dominated by the data exchange cost
produced by a large number of triple pattern joins corresponding to complex SPARQL
graph pattern. Therefore, one of the supreme goals of all distributed RDF query
processing solutions is to limit the amount of data exchanged over the cluster network through
optimal data partitioning and replication strategies. Each such strategy also comes with
a set of data transformation, storage and indexing steps that are more or less cost
intensive.</p>
      <p>
        The first systems considering distributed storage and query answering for RDF data
appeared quite early in the history of RDF. Systems like Edutella [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and RDFPeers [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
were already tackling partitioning issues in the early 2000s. More recent systems like
YARS2 [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], HadoopRDF [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and Virtuoso [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] are based on hash partitioning schemes
for distributing RDF triple indexes on different cluster nodes. In 2011, [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], henceforth
denoted nHopDB, presented the first attempt to apply graph partitioning on RDF data
sets for distributed SPARQL query evaluation. In the following, the database research
community has proposed a large number of RDF triple data partitioning and replication
strategies for different distributed data and query processing environments. Recent
systems are either extending the graph partitioning approach [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] or are complaining about
their limitations [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>
        As a consequence of the plethora of distribution strategies, it is not always easy to
identify the most efficient solution for a given context. The first objective of this paper
is to clarify this situation by conducting evaluations of prominent RDF triple
distribution algorithms. A second goal is to consider Apache Spark as the parallel computing
framework for hosting and comparing these implementations. This is particularly
relevant in a context where a large portion of existing RDF distributed databases, e:g:
nHopDB [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], Semstore [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], SHAPE [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], SHARD [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], have been implemented
using Apache Hadoop, an open source MapReduce [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] reference implementation. These
implementations suffer from certain [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] limitations of MapReduce for processing large
data sets, some of them being related to the high rate of disk reads and writes. We have
chosen Spark since it is up to 100 times more efficient than Hadoop through Resilient
Distributed Datasets (RDD) implementing a new distributed and fault tolerant memory
abstraction.
      </p>
      <p>Our experimentation is conducted over a reimplementation of five data distribution
approaches where two of them are hash-based, two of them are based on graph
partitioning with and without query workload awareness and one is hybrid combing hash-based
partitioning and query workload awareness. Each system is evaluated over a synthetic
and a real-world data-set with varying cluster settings and on a total of six queries which
differ in terms of their shape, e:g:, star and property chains, and selectivity. We present
and analyze experimentations conducted in terms of data preparation cost, distribution
load balancing, data replication rate and query answering performance.
2
2.1</p>
    </sec>
    <sec id="sec-2">
      <title>Background knowledge</title>
      <sec id="sec-2-1">
        <title>RDF - SPARQL</title>
        <p>RDF is a schema-free data model that permits to describe data on the Web. It is usually
considered as the cornerstone of the Semantic Web and the Web of Data. Assuming
disjoint infinite sets U (RDF URI references), B (blank nodes) and L (literals), a triple
(s,p,o) 2 (U [ B) x U x (U [ B [ L) is called an RDF triple with s, p and o respectively
being the subject, predicate and object. Since subjects and objects can be shared among
triples, a set of RDF triples generates an RDF graph.</p>
        <p>SPARQL 1 is the standard query language for RDF graphs (triple collections) based
on graph patterns for extracting information from RDF graphs. Let V be an infinite
set of variables disjoint with U, B and L. Then, a triple tp 2 (U [ V) x (U [ V) x (U
[ V [ L) followed by a dot ’.’ is a SPARQL triple pattern. The semantics of a triple
pattern follows the standard matching semantics which consists in finding all mappings
: V ! U [ B [ L such that (tp) is a triple in the input graphs. Graph patterns
are defined recursively. A possibly empty set of triple patterns is a basic graph pattern.
The semantics of a basic graph pattern gp is defined by the conjunctive extension of
the triple matching semantics ( (gp) is a connected or disconnected subgraph of the
input graphs). If gp1 and gp2 are graph patterns, then fgp1g is a group pattern, gp1
OPTIONAL fgp2g is an optional pattern, fgp1g UNION fgp2g is a pattern alternative.
Finally, a graph pattern gp can contain any a constraint FILTER C where C is a built-in
condition to restrict the solutions of a graph pattern match according to the expression
C.</p>
        <p>The complete SPARQL syntax follows the SELECT-FROM-WHERE syntax of
SQL queries. The SELECT clause specifies the variables appearing in the query
result set, the optional FROM clause specifies the input graphs (an input graph can be
defined by default), the WHERE clause defines a graph pattern which is matched against
the input RDF graphs.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Apache Spark</title>
        <p>
          Apache Spark [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ] is a cluster computing framework whose design and
implementation started at UC Berkeley’s AMPlab. Just like Apache Hadoop, Spark enables parallel
computations on unreliable machines and automatically handles locality-aware
scheduling, fault tolerance and load balancing tasks. While both systems are based on a data
flow computation model, Spark is more efficient than Hadoop’s MapReduce for
applications requiring the reuse working data sets across multiple parallel operations. This
efficiency is due to Spark’s Resilient Distributed Dataset (RDD) [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ], a distributed,
lineage supported fault tolerant memory abstraction that enables in-memory
computations more efficiently than Hadoop (which is mainly disk-based). The Spark API also
simplifies data-centric programming by integrating set-oriented functions like join and
f ilter which are not natively supported in Hadoop.
2.3
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>METIS graph partitioner</title>
        <p>
          Finding a graph partitioning which is optimal with respect to certain constraints is
an NP-hard problem which is practically solved by approximative algorithms like[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
These algorithms are generally still not efficient for very large graphs hence motivating
a multi-level propagation approach where the graph is coarsened until its size permits
1 http://www.w3.org/TR/2013/REC-sparql11-query-20130321/
to use one of the approximate solutions. The METIS system [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] follows this approach
and is known to reach its limits for graphs of about half a billion triples. METIS takes as
input an unlabeled, undirected graph and an integer value corresponding to the desired
number of partitions. Its output provides a partition number for each node of the graph.
As explained in the following section, nHopDB [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] and WARP [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] are two recent
systems that are using METIS to partition RDF graphs.
3
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>RDF data partitioning methods</title>
      <p>In this section, we present the main features and design principles of the RDF data
partitioning methods we have chosen to compare with respect to their data preparation
cost, storage load balancing, data replication and query processing costs. It is obvious
that the performance results, and in particular the results concerning query processing
performance, have to be considered with caution. Our goal is not to rank the different
methods, but to analyze some general properties (including implementation effort) in
the context of Apache Spark, which is a common modern scalable distributed data
processing environment. More details about these implementations are described in
Section 6.</p>
      <p>As a starting point, we consider four different data partitioning approaches which
can be characterized as hash and graph partitioning based. Each category is divided into
two approaches which have been used in various systems and described in conference
publications. Our fifth system corresponds to a new hybrid approach that mixes a
hashbased approach with a replication strategy that enables to efficiently process long chain
queries. Note that we do not consider range-based partitioning approaches since they
are rarely used in existing systems due to their inefficiency.
3.1</p>
      <sec id="sec-3-1">
        <title>Hash-based RDF data partitioning</title>
        <p>The two approaches defined in this section correspond to families of RDF database
systems rather than to specific systems (as in the next section). The basic of
hashbased Data partitioning consists in applying to each RDF triple a hash function which
returns for some triple-specific key value the node where the triple should be stored. One
advantage of hash-based approaches is that they do not require any additional structure
to locate the partition of a given triple except the hash function and the key value. Data
replication can be achieved by defining several hash functions.</p>
        <p>
          Random hashing: In a distributed random hash-based solution, the partitioning key
does not correspond to a particular element of the data model like the graph, subject,
property or object of a triple. For instance, the key can correspond to an internal triple
identifier or to some other value obtained from the entire triple. The former solution is
the one adopted by the Trinity.RDF system [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]. Some other forms of random
partitioning exist and may require an additional structure for directed lookups to cluster nodes
where triples are located, e:g: round-robin approach. We do not consider such random
partitioning approaches in our evaluation since they do not provide particularly useful
data placement properties for any of the query shapes (star, property chains, tree, cycle
or hybrid) used in our experiments (see Appendix A).
RDF triple element hashing: This approach has been adopted by systems like YARS2,
Virtuoso, Jena ClusteredTDB and SHARD. In these systems, the hashing key provided
to the hash function is composed of one or several RDF quadruple elements (graph,
subject, property, object). Partitioning by subject provides the nice property of
ensuring that star-shaped queries, i:e: queries composed of a graph where one node has an
out-degree greater than 1 and all other nodes are leaves, are performed locally on a
given machine. Nevertheless they do not provide guarantees for queries composed of
property chains or more complex query patterns. We will study the performance of a
subject-hash based partitioning in Section 6.
3.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Graph-based partitioning approaches</title>
        <p>
          Hash-based data partitioning methods are likely to require a high data exchange rate
over the network for more complex query patterns composed of longer property chains.
One way to address this issue is to introduce data replication and/or to use more
structured hashing functions adapted for a given query workload. Of course, these extensions
come with at an additional processing cost which needs to be considered with attention.
Systems corresponding to each of these approaches are considered next.
nHopDB: The data partitioning approach presented in [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] is composed of two steps.
In a first stage, the RDF data set is transformed such that it can be sent to the METIS
graph partitioner. This transformation removes properties and adds inverted
subjectobject edges to obtain an undirected graph. Then, the partitions obtained by METIS
are translated into triple allocations over the cluster (all triples of the same partition are
located on the same node). The partition state obtained at the end of this first stage is
denoted as 1-hop. The second stage starts and corresponds to an overlap strategy which
is performed using a so-called n-hop guarantee. Intuitively, for each partition, each leaf
l is extended with triples whose subject correspond to l. This second replication stage
can be performed several times on the successively generated partitions. Each execution
increases the n-hop guarantee by a single unit.
        </p>
        <p>
          [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] describes an architecture composed of a data partitioner and a set of local query
engine workers implemented by RDF-3X [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] database instances. Some queries can be
executed locally on a single node and thus enjoy all the optimization machinery of
RDF3X. For queries where the answer set spans multiple partitions, the Hadoop MapReduce
system is used to supervise query processing.
        </p>
        <p>
          WARP: The WARP system [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] has been influenced by nHopDB and the Partout
system [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] (the two authors of WARP also worked on Partout). WARP borrows from
nHopDB its graph partitioning approach and 2-hop guarantee. Like Partout, it then
refines triple allocations by considering a given query workload of the most frequently
performed queries over the given data set. The system considers that this query
workload is provided in one way or another. More exactly, each of these queries is
transformed into a set of query patterns (defining a class of equivalent queries) and WARP
guarantees that frequent queries can be distributed over the cluster nodes and processed
locally without exchanging data across machines (the final result is defined by the union
of locally obtained results). WARP proceeds as follows for partitioning and replicating
a RDF triple collection:
1. A first step partitions the transformed unlabeled and undirected RDF graph using
the METIS graph partitioner as described in nHopDB.
2. The RDF triples are fragmented according to the partitions of their subjects and
loaded into the corresponding RDF-3X [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] database instance.
3. A replication strategy is applied to ensure a 2-hop guarantee.
4. Finally, WARP chooses for each query pattern qp a partition which will receive
all triples necessary for evaluating pattern qp locally. For this, WARP decomposes
each query pattern obtained from the query workload into a set of sub-queries which
are potential starting points or seed queries for the evaluation of the entire query
pattern. Then, WARP estimates for each seed query and partition the cost of
transferring missing triples into the current partition and selects the seed query candidate
that minimizes this cost. An example is presented in Section 4.3.
        </p>
        <p>The WARP system implements its own distributed join operator to combine the
local sub-queries. Locally, the queries are executed using RDF-3X. As our experiments
confirm, most of the data preparation effort for WARP is spent in the graph partitioning
stage.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Hybrid partitioning approach</title>
        <p>The design of this original hybrid approach has been motivated by our analysis of the
WARP system as well as some hash-based solutions. We have already highlighted (as
confirmed in the next section) that the hash-based solutions require short data
preparation times but come with poor query answering performance for complex query
patterns. On the other hand, the WARP system proposes an interesting analysis of query
workloads which is translated into an efficient data distribution. We will present in our
experiments a hybrid solution which combines RDF triple element hashing using
subjects as hash keys with query workload aware triple replication is described in the last
step of WARP.
4
4.1</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Spark system implementations</title>
      <sec id="sec-4-1">
        <title>Data set loading and encoding</title>
        <p>All data sets are first loaded on the cluster’s Hadoop File System(HDFS). The loading
rate in our cluster averages 520.000 triples per second which allows us to load large
data sets like LUBM 2K or Wikidata in less than 10 minutes.</p>
        <p>
          Like in most RDF stores, each data set is encoded by providing a distinct integer
value to each node and edge of the graph (see Chapter 4 in [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] for a presentation of
RDF triple encoding methods). The encoding is performed in parallel in one step using
the Spark framework.2 The encoded data sets, together with their dictionaries (one for
the properties and another for subjects and objects) are also loaded into HDFS.
2 More implementation details can be
bd.lip6.fr/wiki/doku.php?id=site:recherche:logiciels:rdfdist.
found
at
        </p>
        <p>http://www4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Hash-based data distribution</title>
        <p>The implementation of hash-based partitioning approaches in Spark is relatively
straightforward since the Spark API directly provides hash-based data distribution
functionalities. We achieve random-hash partitioning by using the whole RDF triple as hash key.
Triple element hashing is obtained by using the triple subject URI. In our experiments,
we do not provide replication by adding other hashing function. The query answering
evaluation is performed forthrightly following a translation from SPARQL to Spark
scripts requiring a mix of map, filter, join and distinct methods performed
over RDDs.
4.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Graph partitioning-based data distribution</title>
        <p>The two approaches in this partitioning category, nHopDB and WARP, require three
METIS related steps for the preparation, computation and transformation of the
results. Since METIS only can deal with unlabeled and undirected graphs, we start by
removing predicates from the data sets and appending the reversed subject/object edges
to the graph. Using METIS also imposes limitations in terms of accepted graph size.
Indeed, the largest graph that can be processed contains about half a billion nodes.
Consequently, we limit our experimentations to data sets of at most 250 million RDF triples
provided that their undirected transformation yields graphs of 500 million nodes. The
output of METIS is a set of mapping assertions between nodes and partitions. Based
on these mappings, we allocate a triple to the partition of its subject. In terms of data
encoding, we extend triples with partition identifiers yielding quads. Note that at this
stage, the partition identifier can be considered as ’logical’ and not ’physical’ since the
data is not yet stored on a given cluster node. We would like to stress that the
preparation and transformation phases described above are performed in parallel using Spark
programs.
nHopDB: In the Spark implementation of nHopDB, the n-hop guarantee is computed
over the RDD corresponding to the generated quads. This Spark program can be
executed (n-1) times to obtain an n-hop guarantee.</p>
        <p>WARP: Our implementation of WARP analyzes the query workload generalization
using Spark built-in operators. For instance, consider the following graph pattern of a
query denoted Q1:
?x advisor ?y . ?y worksFor ?z . ?z subOrganisation ?t
For processing this pattern, the system uses the filter operator to select all
triples that match the advisor, worksFor and subOrganization properties.
Then, the join operator is used to perform equality join predicates on variables y
and z. The query result is a set of variable bindings. We extend the notion of
variable bindings with the information regarding the partition identifier of each triple. For
instance, an extract of a Q1’s result (in an decoded readable form) is represented as
f(Bob,Alice,1), (Alice, DBteam,3),(DBteam, Univ1,1)g. The
result for pattern ?y worksFor ?z contains the triple binding f(Alice, DBteam,
3)g which means that "Alice" and "DBTeam" are bound to variables ?x and ?y
and the triple is located on partition 3. The two other triples for triple patterns ?x
advisor ?y and ?z subOrganisation ?t are located on partition 1. It is easy
to see that by choosing the seed query ?x advisor ?y or ?z subOrganisation
?t, we need to copy only triple (Alice, worksFor, DBteam) in partition 3 to
partition 1 whereas by choosing pattern ?y worksFor ?z two triples have to be
copied to partition 1. As specified earlier in Section 3.2, we consider all the candidate
seeds to choose the seed that implies the minimal number of triples to replicate.</p>
        <p>Finally, for querying purposes, each query is extended with a predicate enforcing
local evaluation by joining triples with the same partition identifier.
4.4</p>
      </sec>
      <sec id="sec-4-4">
        <title>Hybrid approach</title>
        <p>This approach is mixing the subject-based hashing method with the WARP
workloadaware processing. Hence, using our standard representations of triples and quads
together with Spark’s data transformation facilities made our coding effort for this
experiment relatively low.
5
5.1</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Experimental setting</title>
      <sec id="sec-5-1">
        <title>Data sets and queries</title>
        <p>
          In this evaluation, we are using one synthetic and one real world data set. The synthetic
data set corresponds to the well-established LUBM [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. We are using three instances
of LUBM, denoted LUBM1K, LUBM2K and LUBM10K which are parameterized
respectively with 1000, 2000 and 10000 universities. The real world data set consists in
Wikidata [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], a free collaborative knowledge base which will replace Freebase [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] in
2015. Table 2 presents the number of triples as well as the size of each of these data
sets.
        </p>
        <p>Concerning queries, we have selected three SPARQL queries from LUBM (namely
queries #2, #9 and #12 respectively denoted Q2, Q3 and Q4) extended by a new query,
denoted Q1, which requires a 3-hop guarantee to be performed locally on the nHopDB,
WARP and hybrid implementations. To complement the query evaluation, we have
created two queries for the Wikidata experiments, resp. Q5 and Q6. The first one takes
the form of a 3-hop property chain query that shows to be much more selective than
the LUBM ones, the second one is shaped as a simple star and was motivated by the
absence of such a form in our query set. All six queries are presented in Appendix A.
5.2</p>
      </sec>
      <sec id="sec-5-2">
        <title>Computational environment</title>
        <p>Our evaluation was deployed on a cluster consisting of 21 DELL PowerEdge R410
running a Debian distribution with a 3.16.0-4-amd64 kernel version. Each machine has
64GB of DDR3 RAM, two Intel Xeon E5645 processors each of which is equipped with
6 cores running at 2.40GHz and allowing to run two threads in parallel
(hyperthreading). Hence, the number of virtual cores amounts to 24 but we used only 15 cores per
machine. In terms of storage, each machine is equipped with a 900GB 7200rpm SATA
disk. The machines are connected via a 1GB/s Ethernet Network adapter. We used Spark
version 1.2.1 and implemented all experiments in Scala, using version 2.11.6. The Spark
setting requires that the total number of cores of the cluster to be specified. Since in our
experiments we considered clusters of 5, 10 and 20 machines respectively, we had to
set the number of cores to 75, 150 and 300 cores respectively.
6</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Experimentation</title>
      <p>Since we could not get any query workloads for Wikidata, it was not possible to conduct
any experimentation with WARP and the hybrid approach over this data sets. Moreover,
since METIS is limited to data sets of half a million edges, it was not possible to handle
nHopDB and WARP over LUBM10K. Given the fact that the hybrid system relies on
subject hashing, and not METIS, it was possible to conduct this experimentation over
LUBM10K for that system.
6.1</p>
      <sec id="sec-6-1">
        <title>Data preparation costs</title>
        <p>Load balancing is an important aspect when distributing data for storage and querying
purposes. In Figure 2, we present the standard deviations over all partition sizes (in
log scale) for the different implementation. For the graph partitioning-based and hybrid
approaches, we only consider the standard deviation of the partition sizes at the end of
the partitioning process, i:e:, METIS partitioning and n-hop guarantee application.</p>
        <p>The two hash-based approaches and the hybrid approach are the best solutions and
are close to each other. This is rather obvious since the hash partitioning approaches are
concentrating on load balancing while a graph partitioning tries to reduce the number
of edges cut during the fragmentation process. The hybrid approach is slightly less
balanced due to the application of the WARP query workload-aware strategy. The
randombased hashing has 5 to 12% less deviation than subject hashing. This is due to high
degree nodes that may increase the size of some partitions. The nHopDB approach is
the less efficient graph partitioning solution when considering load balancing. We
believe that this is highly related to the structure and the number of queries one considers
in the query workload. We consider that further analysis needs to be conducted on real
world data sets and query workloads to confirm these nevertheless interesting
conclusions.
Intrinsically, all solutions present some node replications since a given node can be
an object in one partition and a subject in another one. This corresponds to the 1-hop
guarantee that ensures validity of data, i.e., no triples are lost during the partitioning
phase. In this section, we are only interested in triple replication. Only the nHopDB,
WARP and hybrid solutions present such replications.</p>
        <p>Table 2 provides the replication rates for each of these systems for the LUBM 1K
and 2K data sets. Several conclusions can be drawn from this table. First, METIS-based
approaches are more efficient than the subject-hashing of the hybrid system. Remember
that by minimizing edge cut, a graph partitioner groups the nodes that are close to
each other in the input graph. Secondly, the more partitions the cluster contains, the
more overall replication one obtains. The n-hop guarantee replicates less than the query
workload-aware method of WARP. Finally, we can stress that the replication of the
hybrid approach can be considered quite acceptable given the data replication duration
highlighted in Section 6.1.
6.4</p>
      </sec>
      <sec id="sec-6-2">
        <title>Query processing</title>
        <p>In order to efficiently process local queries and to fairly support performance
comparison in a distributed setting, we must use the same computing resources for local and
distributed runs. A parallel query runs locally when every machine only has to access its
Part. scheme nHopDB WARP Hybrid</p>
        <p>Data set 5 part. 10 part. 20 part. 5 part. 10 part. 20 part. 5 part. 10 part. 20 part.
LUBM 1K 0.12 0.16 0.17 0.26 0.54 0.57 0.54 1.33 1.84
LUBM 2K 0.12 0.16 0.18 0.34 0.52 0.54 0.54 1.33 1.94
Table 2. Replication rate comparison for three partitioning schemes and three cluster sizes
own partition (inter-partition parallelism). To fully exploit the multi-core machines on
which we perform our experiments, it would be interesting to consider not only
interpartition parallelism but intra-partition parallelism exploiting all cores as well.
Unfortunately, intra-partition parallelism is not fully supported in Spark since a partition is
the unit of data that one core is processing. Thus, to use 15 cores on a machine, we
must split a partition into 15 sub partitions. Spark does not allow to specify that such
sub-partitions must reside together on the same machine3. In the absence of any triple
replication, the hash-based solutions are not impacted by this limitation. This is not the
case for the systems using replication and where local queries might be evaluated on
different partitions. For the two query workload-aware solutions (i.e., WARP and
hybrid), we conducted our experiment using a workaround that forces Spark to use only
one machine for processing one partition: for each local query, we run Spark with only
one slave node. Then we load only the data of one partition and process the query using
all the cores of the slave node. To be fair and take into account the possibility that the
execution time of a local query might depend on the choice of the partition, we repeat
the experiment for every partition and report the maximum response time. The case of
nHopDB is more involved and requires to develop a special dedicated query processor,
specialized for Spark, to fully benefit from the data fragmentation. In a nutshell, that
system would have to combine intra and inter-partition query processors. The former
would run for query subgraphs that can run locally and the second one would perform
joins over all partitions with retrieved temporary results. Since the topic of this paper
concerns the evaluation of distribution strategies, we do not detail the implementation
of such a query processor in this work and hence we do not present any results for the
nHopDB system.</p>
        <sec id="sec-6-2-1">
          <title>3 We expect that future version of Spark will allow such a control.</title>
          <p>
            Some other interesting works have recently been published on the distribution of RDF
data. Systems such as Semstore [
            <xref ref-type="bibr" rid="ref24">24</xref>
            ] and SHAPE [
            <xref ref-type="bibr" rid="ref17">17</xref>
            ] take some original position.
          </p>
          <p>Instead of using the common query workload, Semstore divides a complete RDF
graph into a set of paths which cover all the original graph nodes, possibly with node
overlapping between paths. These paths are denoted Rooted Sub Graph (RSG in short)
since they are generated starting from nodes with a null in-degree, i:e:, roots, to all their
possible leaves. A special workaround is used to handle cycles that may occur at the root
position, i:e:, cycles that are not reachable from any root. The idea is then to regroup
these RSG into different partitions. This is obviously a hard problem for which the
authors propose an approximated solution. Their solution uses the K-means clustering
approach which regroups RSG with common segments together in the same partition.
A first limitation of this approach is the high dimensionality of the vectors handled by
the K-means algorithm, i:e:, the size of any vector corresponds to the number of nodes
in the graph. A second limitation is related to the lack of an efficient balancing of the
number triples across the partitions. In fact, the system operates at the coarse-grained
level of RSG and provides a balancing at this level only. Semstore is finally limited in
terms of join patterns. It can efficiently handle S-O (subject-object) and S-S
(subjectsubject) join patterns but other patterns, such as O-O (object-object) may require inter
node communication.</p>
          <p>The motivation of the SHAPE system is that graph partitioning approaches do not
scale. Just like in our hybrid solution, they propose to replace the graph partitioning
step by a hash partitioning one. Then, just like in the nHopDB system, they replicate
according to the n-hop guarantee. Hence, they do not consider any query workload and
take the risk of inter-partition communication for long chain queries longer than their
n-hop guarantee.
8</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Conclusions and perspectives</title>
      <p>This paper presents an evaluation of different RDF graph distribution methods which
are ranging over two important partitioning categories: hashing and graph partitioning.
We have implemented five different approaches over the Apache Spark framework. Due
to its efficient main memory usage, Spark is considered to provide better performances
than Hadoop’s MapReduce. While several RDF stores have been designed on top of
Hadoop, we are not aware of any systems running on top of Spark. The main
motivation of the experiments is that existing partitioning solutions do not scale gracefully to
several billion triples. For instance, the METIS partitioner is limited to less than half a
billion triples and SemStore (cf. related works section) relies on K-Means clustering of
vectors whose dimension amount to the number of nodes of the data to be processed
(i:e:, 32 millions in the case of LUBM1K). Computing a distance at such high
dimension is currently not possible within Spark, even when using sparse vectors. Moreover,
applying a dimension reduction algorithm to all the vectors is not tractable.</p>
      <p>The conclusion of our experiment is that basic hash-based partitioning solutions
are viable for scalable RDF management: they come at no preparation cost, i:e: only
require to load the triples into the right machine, and are fully supported by the
underlying Spark system. As emphasized by our experimentation, Spark scales out to several
billion triples by simply adding extra machines. Nevertheless, without any replication,
these systems may hinder availability and reduce the parallelism of query processing.
They also involve a lot of network communications for complex queries which require
to retrieve data from many partitions. Nonetheless, by making intensive use of main
memory, we believe that Spark provides a high potential for these systems. Clearly,
with the measures we have obtained in this evaluation, we can stress that if one needs a
fast access to large RDF data sets and is, to some extent, ready to sacrifice the
performance of processing complex query patterns then the hash-based solution over Spark is
a good compromise.</p>
      <p>Concerning the nHopDB and WARP approaches, we consider that using a graph
partitioning system like METIS has an important drawback due to the performance
limitations. Based in these observations, we investigated the hybrid candidate solution
which does not involve a heavy preparation step and retains the interesting query
workload aware replication strategy. This approach may be particularly interesting for data
warehouses where the most common queries (materialized views) are well identified.
With this hybrid solution we may get the best of worlds, the experiments clearly
emphasize that the replication overhead compared to the pure WARP approach is marginal
but the gain in data preparation is quite important.</p>
      <p>Concerning Spark, we highlighted that it can process distributed RDF queries
efficiently. Moreover, the system can be used for the two main steps, data preparation and
query processing, in an homogeneous way. Rewriting SPARQL queries into the Scala
language (supported by Spark) is rather easy and we consider that there is still much
room for optimization. The next versions of Spark which are supposed to provide more
feedback on data exchange over the network should help fine-tune our experiments and
design a complete production-ready system.</p>
    </sec>
    <sec id="sec-8">
      <title>A Appendix : Query workload</title>
      <sec id="sec-8-1">
        <title>Q1: (property path)</title>
        <p>SELECT ?x ?y ?z WHERE f ?x lubm:advisor ?y.</p>
        <p>?y lubm:worksFor ?z. ?z lubm:subOrganisation ?t. g
Q2: (typed, star and property path)</p>
        <p>SELECT ?x ?y ?z WHERE f
?x rdf:type lubm:GraduateStudent.
?y rdf:type lubm:University.
?z rdf:type lubm:Department. ?x lubm:memberOf ?z.
?z lubm:subOrganizationOf ?y.</p>
        <p>?x lubm:undergraduateDegreeFrom ?y g
Q3: (typed, star and property path)</p>
        <p>SELECT ?x ?y ?z WHERE f ?x rdf:type lubm:Student.
?y rdf:type lubm:Faculty. ?z rdf:type lubm:Course.
?x lubm:advisor ?y. ?y lubm:teacherOf ?z.</p>
        <p>?x lubm:takesCourse ?z g
Q4: (typed, property path)</p>
        <p>SELECT ?x ?y WHERE f ?x rdf:type lubm:Chair.
?y rdf:type lubm:Department. ?x lubm:worksFor ?y.
?y lubm:subOrganizationOf &lt;http://www.University0.edu&gt;
g
Q5: (property path)</p>
        <p>SELECT ?x ?y ?z WHERE f ?x entity:P131s ?y.</p>
        <p>?y entity:P961v ?z. ?z entity:P704s ?w g
Q6: (star)</p>
        <p>SELECT ?x ?y ?z WHERE f ?x entity:P39v ?y.
?x entity:P580q ?z. ?x rdf:type ?w g</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>K.</given-names>
            <surname>Bollacker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Evans</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Paritosh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Sturge</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Taylor</surname>
          </string-name>
          . Freebase:
          <article-title>A collaboratively created graph database for structuring human knowledge</article-title>
          .
          <source>In Proceedings of the 2008 ACM SIGMOD International Conference on Management of Data, SIGMOD '08</source>
          , pages
          <fpage>1247</fpage>
          -
          <lpage>1250</lpage>
          , New York, NY, USA,
          <year>2008</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>M.</given-names>
            <surname>Cai</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Frank</surname>
          </string-name>
          .
          <article-title>RDFPeers: A scalable distributed RDF repository based on a structured peer-to-peer network</article-title>
          .
          <source>In Proc. 13th International World Wide Web Conference</source>
          , New York City, NY, USA, May
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>O.</given-names>
            <surname>Cure</surname>
          </string-name>
          ´ and
          <string-name>
            <given-names>G.</given-names>
            <surname>Blin</surname>
          </string-name>
          .
          <source>RDF Database Systems, 1st Edition</source>
          . Morgan Kaufmann, Nov.
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>J.</given-names>
            <surname>Dean</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Ghemawat</surname>
          </string-name>
          . Mapreduce:
          <article-title>Simplified data processing on large clusters</article-title>
          .
          <source>In 6th Symposium on Operating System Design and Implementation</source>
          (OSDI
          <year>2004</year>
          ), San Francisco, California, USA, December 6-
          <issue>8</issue>
          ,
          <year>2004</year>
          , pages
          <fpage>137</fpage>
          -
          <lpage>150</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>O.</given-names>
            <surname>Erling</surname>
          </string-name>
          .
          <article-title>Virtuoso, a hybrid rdbms/graph column store</article-title>
          .
          <source>IEEE Data Eng. Bull.</source>
          ,
          <volume>35</volume>
          (
          <issue>1</issue>
          ):
          <fpage>3</fpage>
          -
          <lpage>8</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>6. http://webia.lip6.fr/ baazizi/research/iswc2015eval/expe.html.</mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>C. M. Fiduccia</surname>
            and
            <given-names>R. M.</given-names>
          </string-name>
          <string-name>
            <surname>Mattheyses</surname>
          </string-name>
          .
          <article-title>A linear-time heuristic for improving network partitions</article-title>
          .
          <source>In Proceedings of the 19th Design Automation Conference</source>
          , DAC '82,
          <string-name>
            <surname>Las</surname>
            <given-names>Vegas</given-names>
          </string-name>
          , Nevada, USA, June 14-16,
          <year>1982</year>
          , pages
          <fpage>175</fpage>
          -
          <lpage>181</lpage>
          ,
          <year>1982</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>L.</given-names>
            <surname>Galarraga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Schenkel</surname>
          </string-name>
          .
          <article-title>Partout: A distributed engine for efficient RDF processing</article-title>
          .
          <source>CoRR, abs/1212.5636</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Guo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Pan</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Heflin</surname>
          </string-name>
          .
          <article-title>Lubm: A benchmark for owl knowledge base systems</article-title>
          .
          <source>J. Web Sem</source>
          .,
          <volume>3</volume>
          (
          <issue>2</issue>
          -3):
          <fpage>158</fpage>
          -
          <lpage>182</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>S.</given-names>
            <surname>Gurajada</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Seufert</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Miliaraki</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Theobald</surname>
          </string-name>
          .
          <article-title>Triad: a distributed shared-nothing RDF engine based on asynchronous message passing</article-title>
          .
          <source>In International Conference on Management of Data, SIGMOD</source>
          <year>2014</year>
          , USA, June 22-27,
          <year>2014</year>
          , pages
          <fpage>289</fpage>
          -
          <lpage>300</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>M. Hammoud</surname>
            ,
            <given-names>D. A.</given-names>
          </string-name>
          <string-name>
            <surname>Rabbou</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Nouri</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Beheshti</surname>
            , and
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Sakr</surname>
          </string-name>
          .
          <article-title>DREAM: distributed RDF engine with adaptive query planner and minimal communication</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>8</volume>
          (
          <issue>6</issue>
          ):
          <fpage>654</fpage>
          -
          <lpage>665</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>A.</given-names>
            <surname>Harth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Umbrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hogan</surname>
          </string-name>
          , and
          <string-name>
            <surname>S. Decker.</surname>
          </string-name>
          <article-title>YARS2: A federated repository for querying graph structured data from the web</article-title>
          .
          <source>In The Semantic Web, 6th International Semantic Web Conference</source>
          ,
          <string-name>
            <surname>ISWC</surname>
          </string-name>
          <year>2007</year>
          +
          <article-title>ASWC 2007, Busan</article-title>
          , Korea,
          <source>November 11-15</source>
          ,
          <year>2007</year>
          ., pages
          <fpage>211</fpage>
          -
          <lpage>224</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Schenkel</surname>
          </string-name>
          . WARP:
          <article-title>workload-aware replication and partitioning for RDF</article-title>
          .
          <source>In Workshops Proceedings of the 29th IEEE International Conference on Data Engineering, ICDE</source>
          <year>2013</year>
          , pages
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>J. Huang</surname>
            ,
            <given-names>D. J.</given-names>
          </string-name>
          <string-name>
            <surname>Abadi</surname>
            , and
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Ren</surname>
          </string-name>
          .
          <article-title>Scalable SPARQL querying of large RDF graphs</article-title>
          .
          <source>PVLDB</source>
          ,
          <volume>4</volume>
          (
          <issue>11</issue>
          ):
          <fpage>1123</fpage>
          -
          <lpage>1134</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>M. F. Husain</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>McGlothlin</surname>
          </string-name>
          ,
          <string-name>
            <surname>M. M. Masud</surname>
            ,
            <given-names>L. R.</given-names>
          </string-name>
          <string-name>
            <surname>Khan</surname>
            , and
            <given-names>B. M.</given-names>
          </string-name>
          <string-name>
            <surname>Thuraisingham</surname>
          </string-name>
          .
          <article-title>Heuristics-Based Query Processing for Large RDF Graphs Using Cloud Computing</article-title>
          .
          <source>IEEE Transactions on Knowledge and Data Engineering</source>
          ,
          <volume>23</volume>
          :
          <fpage>1312</fpage>
          -
          <lpage>1327</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>G.</given-names>
            <surname>Karypis</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Kumar</surname>
          </string-name>
          .
          <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>
          , Dec.
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lee</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Liu</surname>
          </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>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>W.</given-names>
            <surname>Nejdl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Wolf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Qu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Decker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sintek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Naeve</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Nilsson</surname>
          </string-name>
          , M. Palme´r, and
          <string-name>
            <given-names>T.</given-names>
            <surname>Risch</surname>
          </string-name>
          .
          <article-title>EDUTELLA: a P2P networking infrastructure based on RDF</article-title>
          .
          <source>In Proceedings of the Eleventh International World Wide Web Conference, WWW</source>
          <year>2002</year>
          , USA, pages
          <fpage>604</fpage>
          -
          <lpage>615</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>T.</given-names>
            <surname>Neumann</surname>
          </string-name>
          and
          <string-name>
            <surname>G. Weikum.</surname>
          </string-name>
          <article-title>The rdf-3x engine for scalable management of rdf data</article-title>
          .
          <source>VLDB J</source>
          .,
          <volume>19</volume>
          (
          <issue>1</issue>
          ):
          <fpage>91</fpage>
          -
          <lpage>113</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>K.</given-names>
            <surname>Rohloff</surname>
          </string-name>
          and
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Schantz</surname>
          </string-name>
          .
          <article-title>High-performance, massively scalable distributed systems using the mapreduce software framework: The shard triple-store. In Programming Support Innovations for Emerging Distributed Applications</article-title>
          , PSI EtA '
          <volume>10</volume>
          , pages
          <issue>4</issue>
          :
          <fpage>1</fpage>
          -
          <issue>4</issue>
          :
          <fpage>5</fpage>
          , New York, NY, USA,
          <year>2010</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Sadalage</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler. NoSQL Distilled</surname>
          </string-name>
          :
          <article-title>A Brief Guide to the Emerging World of Polyglot Persistence</article-title>
          .
          <string-name>
            <surname>Addison-Wesley</surname>
            <given-names>Professional</given-names>
          </string-name>
          ,
          <source>1st edition</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>M. Stonebraker</surname>
            ,
            <given-names>D. J.</given-names>
          </string-name>
          <string-name>
            <surname>Abadi</surname>
            ,
            <given-names>D. J.</given-names>
          </string-name>
          <string-name>
            <surname>DeWitt</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Madden</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Paulson</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Pavlo</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Rasin</surname>
          </string-name>
          .
          <article-title>Mapreduce and parallel dbmss: friends or foes? Commun</article-title>
          . ACM,
          <volume>53</volume>
          (
          <issue>1</issue>
          ):
          <fpage>64</fpage>
          -
          <lpage>71</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <given-names>D.</given-names>
            <surname>Vrandecic</surname>
          </string-name>
          and
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Kro¨tzsch. Wikidata: a free collaborative knowledgebase</article-title>
          .
          <source>Commun. ACM</source>
          ,
          <volume>57</volume>
          (
          <issue>10</issue>
          ):
          <fpage>78</fpage>
          -
          <lpage>85</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24. B.
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Zhou</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Yuan</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Jin</surname>
            , and
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Liu</surname>
          </string-name>
          .
          <article-title>Semstore: A semantic-preserving distributed rdf triple store</article-title>
          .
          <source>In Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management</source>
          ,
          <source>CIKM '14</source>
          , pages
          <fpage>509</fpage>
          -
          <lpage>518</lpage>
          , New York, NY, USA,
          <year>2014</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>M. Zaharia</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Chowdhury</surname>
          </string-name>
          ,
          <string-name>
            <surname>T. Das</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Dave</surname>
            , J. Ma,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>McCauly</surname>
            ,
            <given-names>M. J.</given-names>
          </string-name>
          <string-name>
            <surname>Franklin</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Shenker</surname>
            ,
            <given-names>and I. Stoica.</given-names>
          </string-name>
          <article-title>Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing</article-title>
          .
          <source>In Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation</source>
          ,
          <string-name>
            <surname>NSDI</surname>
          </string-name>
          <year>2012</year>
          , San Jose, CA, USA, April
          <volume>25</volume>
          -
          <issue>27</issue>
          ,
          <year>2012</year>
          , pages
          <fpage>15</fpage>
          -
          <lpage>28</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>M. Zaharia</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Chowdhury</surname>
            ,
            <given-names>M. J.</given-names>
          </string-name>
          <string-name>
            <surname>Franklin</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Shenker</surname>
            ,
            <given-names>and I.</given-names>
          </string-name>
          <string-name>
            <surname>Stoica</surname>
          </string-name>
          . Spark:
          <article-title>Cluster computing with working sets</article-title>
          .
          <source>In 2nd USENIX Workshop on Hot Topics in Cloud Computing, HotCloud'10</source>
          , Boston, MA, USA, June 22,
          <year>2010</year>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <given-names>K.</given-names>
            <surname>Zeng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Shao</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Z.</given-names>
            <surname>Wang</surname>
          </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>2013</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>