<!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>Large Scale Querying and Processing for Property Graphs PhD Symposium∗</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Mohamed Ragab</string-name>
          <email>mohamed.ragab@ut.ee</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Data Systems Group, University of Tartu Tartu</institution>
          ,
          <country country="EE">Estonia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Recently, large scale graph data management, querying and processing have experienced a renaissance in several timely application domains (e.g., social networks, bibliographical networks and knowledge graphs). However, these applications still introduce new challenges with large-scale graph processing. Therefore, recently, we have witnessed a remarkable growth in the prevalence of work on graph processing in both academia and industry. Querying and processing large graphs is an interesting and challenging task. Recently, several centralized/distributed large-scale graph processing frameworks have been developed. However, they mainly focus on batch graph analytics. On the other hand, the state-of-the-art graph databases can't sustain for distributed eficient querying for large graphs with complex queries. In particular, online large scale graph querying engines are still limited. In this paper, we present a research plan shipped with the stateof-the-art techniques for large-scale property graph querying and processing. We present our goals and initial results for querying and processing large property graphs based on the emerging and promising Apache Spark framework, a defacto standard platform for big data processing. In principle, the design of this research plan is revolving around two main goals. The first goal focuses on designing an adequate and eficient graph-based storage backend that can be integrated with the Apache Spark framework. The second goal focuses on developing various Graph-aware optimization techniques (e.g., graph indexing, graph materialized views), and extending the default relational Spark Catalyst optimizer with Graph-aware cost-based optimizations. Achieving these contributions can significantly enhance the performance of executing graph queries on top of Apache Spark.</p>
      </abstract>
      <kwd-group>
        <kwd>Figure 1</kwd>
        <kwd>A simple example of a Property Graph</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>INTRODUCTION</title>
      <p>
        Graphs are everywhere. They are intuitive and rich data
models that can represent strong connectivity within the data. Due
to their rich expressivity, graphs are widely used in several
application domains including the Internet of Things (IoT), social
networks, knowledge graphs, transportation networks, Semantic
Web, and Linked Open Data (LOD) among many others [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. In
principle, graph processing is not a new problem. However,
recently, it gained an increasing attention and momentum, more
than before, in several timely applications [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. This is due to the
ongoing huge explosion in graph data alongside with a great
availability of computational power to process this data. Nowadays,
several enterprises have or planned to use graph technologies for
their data storage and processing applications. Moreover, Graph
databases are currently widely used in the industry to manage
∗The supervisor of this work is Sherif Sakr
graph data following the core principles of relational database
systems [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Popular Graph databases include Neo4j1, Titan2,
ArangoDB3 and HyperGraphDB4 among many others.
      </p>
      <p>
        In general, graphs can be represented in diferent data
models [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. In practice, the two most commonly-used graph data
models are: Edge-Directed/Labelled graph (e.g. Resource
Description Framework (RDF5)) for representing data in triples (Subject,
Predicate, and Object), and the Property Graph (PG) data model [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
The PG model extends edge-directed/labelled graphs by adding
(multiple) labels for the nodes and types for the edges, as well as
adding (multiple) key-value proprieties for both nodes and edges
of the graph. In this paper, we focus on the PG model, as it is
currently the most widely used and supported graph data model
in industry as well as in the academia. In particular, most of the
current top and widely used graph databases use the property
graph data model [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. This great success and wide spread of PG
model is due to its great balance between conceptual and intuitive
simplicity, in addition to its rich expressiveness [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Figure 1
illustrates an example of a simple property graph.
      </p>
      <p>
        Recently, several graph query languages have been proposed
to support querying diferent kinds of graph data models [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. For
example, the W3C community has developed and standardized
SPARQL, a query language for querying the RDF-typed graphs [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
Gremlin [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] has been proposed as a functional programming
graph query language that supports the property graph model,
and optimized for supporting graph navigational/traversal queries.
Oracle has designed PGQL [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], an SQL-like graph query
language which also supports querying the property graph data
model. Facebook also presented GraphQl [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], a REST-API like
graph query language for accessing the web data as a graph
of objects. Neo4j designed Cypher [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] as its main query
language which targets querying the property graph data model in
a natural and intuitive way. In practice, Cypher is currently the
1https://neo4j.com/
2https://github.com/thinkaurelius/titan
3https://www.arangodb.com/
4http://www.hypergraphdb.org/
5https://www.w3.org/RDF/
most popular graph query language, and has been supported by
several other graph-based projects and graph databases
including SAP HANA6, RedisGraph7, Agens Graph8, MemGraph9, and
Morpheus10 (Cypher for Apache Spark) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>
        Problem Statement: With the continuous increase in graph
data, processing large graphs introduces several challenges and
detrimental issues to the performance of graph-based
applications [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. In particular, one of the common challenges of
largescale graph processing is the eficient evaluation of graph queries.
In particular, the evaluation of a graph query mainly depends on
the graph scope (i.e. the number of nodes and edges it touches) [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
Therefore, real-world complex graph queries may unexpectedly
take a long time to be answered [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. In practice, most of
current graph databases architecture are typically designed to work
on a single-machine (non-clustered). Therefore, graph querying
solutions can only handle the Online Transactional Processing
(OLTP-style) query workload, which defines relatively simple
computational retrievals on a limited subset of the graph data.
For instance, Neo4j is optimized for subgraph traversals and for
medium-sized OLTP query workloads. Whereas, for complex
Online Analytical Processing (OLAP-style) query workload (where
the query needs to touch huge parts of the graph, and complex
joins and aggregations are required), graph databases are not the
best solution.
      </p>
      <p>In this paper, we provide an overview of the current
state-ofthe-art eforts in solving the large scale graph querying along
side with their limitations (Section 2). We present our planned
contributions based on one of the emerging distributed
processing platforms for querying large graph data, Morpheus11 (Section
3). We present our initial results in Section 4, before we conclude
the paper in Section 5.
2</p>
    </sec>
    <sec id="sec-2">
      <title>STATE OF THE ART</title>
      <p>
        Distributed processing frameworks can be utilized to solve the
graph scalability issues with query evaluation. Apache Spark
represents the defacto standard for distributed big data
processing [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Unlike MapReduce model, Spark uses the main
memory for parallel computations over large datasets. Thus, it can
be up to 100 times faster than Hadoop [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. Spark maintains
this level of eficiency due to its core data abstraction which is
known as Resilient Distributed Datasets(RDDs). An RDD is an
immutable, distributed and fault tolerant collection of data
elements which can be partitioned across the memory of nodes
in the cluster. Another eficient data abstraction of Spark is the
Spark DataFrames. DataFrames are organized according to a
specific schema into named and data-typed columns like a table in
the relational databases. Spark proposes various higher level
libraries on top of RDDs and DataFrames abstractions, GraphX [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]
and SparkSQL [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] for processing structured and semi-structured
large data.
      </p>
      <p>
        Spark-SQL is a high-level library for processing structured as
well as semi-structured large datasets. It enables querying these
datasets stored in DataFrames abstraction using SQL. Spark-SQL
acts as a distributed SQL query engine over large structured
datasets. In addition, SparkSQL ofers a Catalyst optimizer in its
6https://s3.amazonaws.com/artifacts.opencypher.org/website/ocim1/slides/
Graph+Pattern+Matching+in+SAP+HANA.pdf
7https://oss.redislabs.com/redisgraph/
8https://bitnine.net/agensgraph/
9https://memgraph.com/
10https://github.com/opencypher/morpheus
11https://github.com/opencypher/morpheus
core for improving query executions [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Catalyst optimizer is
mainly a rule-based optimizer, adding optimization rules based on
functional programming constructs in Scala language. It can also
apply variety of relational cost-based optimizations for improving
the quality of multiple alternative query execution plans.
      </p>
      <p>GraphX extends the low level RDD abstraction, and introduces
a new abstraction called Resilient Distributed Graphs (RDG). In
a graph, RDG relates records with vertices and edges and
produces an expressive computational primitives’ collection. GraphX
chains the benefits of graph-parallel and data-parallel systems.
However, GraphX is not currently actively maintained. Besides,
GraphX is based on the low level RDGs. Thus, it cannot exploit
the Spark 2’s Catalyst query optimizer that supports only Spark
DataFrames API. Moreover, GraphX is only available to Scala
users.</p>
      <p>
        GraphFrames is a graph package built on DataFrames [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
GraphFrames benefits from the scalability and high performance
of DataFrames. They provide a uniform API for graph processing
available from Scala, Java, and Python. GraphFrames API
implements DataFrame-based graph algorithms, and also incorporates
simple graph pattern matching with fixed length patterns (called
’motifs’). Although GraphFrames are based on Spark DataFrames
API, they have a semantically-weak graph data model (i.e. based
on un-typed edges and vertices). Moreover, The motif pattern
matching facility is very limited in comparison to other
wellestablished graph query languages like Cypher. Besides, other
important features which are present in Spark GraphX such as
partitioning are missing in the GraphFrames package.
      </p>
      <p>In practice, by default, Spark does not support processing
and querying of property graph data model, despite is
widespread use. To this extent, the Morpheus project has come to the
scene. In particular, the Morpheus project has been designed to
enable the evaluation of Cypher over large property graphs using
DataFrames on top of Apache Spark framework. In practice, this
framework enables combining the scalability of the Spark
framework with the features and capabilities of Neo4j by enabling
the Cypher language to be integrated into the Spark analytics
pipeline. Interestingly, graph processing and querying can be
then easily interwoven with other Spark processing analytics
libraries such as Spark GraphX, Spark ML or Spark-SQL.
Moreover, this enables easy merging of graphs from Morpheus into
Neo4j. Besides more advanced capabilities of Morpheus such as
the ability to handle multiple graphs (i.e. graph Composability)
from diferent data sources even if they are not graph sources (i.e
relational data sources), it has the ability to create graph views
on the data as well.</p>
      <p>Figure 2 illustrates the architecture of Morpheus framework.
In Morpheus, Cypher queries are translated into Abstract Syntax
Tree (AST ). Then, Morpheus core system translates this AST into
DataFrame operations with schema and Data-Type handling. It
is worth noting that DataFrames in Spark use schema, while
Neo4j or generally property graphs optionally use a schema (i.e.
schema free data model). Therefore, Morpheus provides a Graph
Data Definition Language GDDL for handling schema mapping.
Particularly, GDDL expresses property graph types and maps
between those types and the relational data sources. Moreover,
the Morpheus core system manages importing graph data that
can reside in diferent Spark storage backends such as HDFS (i.e.
in diferent file formats), Hive, relational databases using JDBC,
or Neo4j (i.e. Morpheus Property graph data sources PGDs), and
exporting these property graphs directly back to those Spark
storage backends. This interestingly means that graph data can
be read from these native Spark data sources without altering nor
copying the original data sources to Morpheus. Particularly, it is
like you plug-in these storage backends to the Morpheus
framework as shown in Figure 2. The native Spark Catalyst optimizer
is used in Morpheus pipeline for making various core query
optimizations for the generated relational plan of operations. Last
but not least, Morpheus runs these optimized query plans on the
Spark cluster using distributed Spark runtime environment.
3</p>
    </sec>
    <sec id="sec-3">
      <title>RESEARCH PLAN</title>
      <p>In general, Morpheus has been designed to enable executing
Cypher queries on top of Spark. However, on the backend, the
property graphs are represented and maintained using Spark
relational DataFrames. Therefore, Cypher graph-based queries
are internally translated into relational operations over these
DataFrames. Therefore, Spark still performs operations on the
property graph as tabular data and views with specified schema.
Thus, adding a graph-aware optimization layer for Spark can
significantly enhance the performance of graph query execution
on the property graph data. In this research plan, we are
focusing on two main aspects for enhancing querying and processing
large property graphs in the context of the Morpheus project. The
ifrst aspect is to design an eficient Spark-based storage backend
for persisting property graphs. The other aspect is to provide
graph-aware optimizations for query processing inside Morpheus
such as Graph indexing, Graph Materialized Views, and last but
not least graph cost-based optimizations on top of the default
Spark Catalyst optimizer. In order to achieve these aspects in
our research plan, we focus on answering the following Research
Questions (RQs):</p>
      <sec id="sec-3-1">
        <title>RQ1: Graph Persistence(Which storage backend achieves</title>
        <p>
          better performance ?): Large graphs require well-suited
persistence solutions that are eficient for query evaluations and
processing [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]. As mentioned earlier, graph data in Morpheus
can settle on multiple diferent data sources such as HDFS with
its diferent file formats (e.g. Avro, Parquet, and CSV), Neo4j,
Hive, or other kinds of relational DBs (Figure 3). Therefore, first
of all, we need to investigate which Spark storage backend for
the large property graph data is the best performing one in the
context of Morpheus. Deciding on the best performing storage
backend with large property graphs plays a major role in
enhancing the performance of Morpheus, and further gives us useful
insights for the subsequent optimizations (i.e. graph Indexing and
Partitioning). Further, figuring out the top performing backends
helps optimizing the query plan afterwards. For instance, if the
best performing storage backend is a Columnar-Oriented backend
(e.g. ORC), it is better for making more pushing projections down
in the query plan. Whereas, if it is a Row-Oriented backend, it is
better to make more pushing selections down in the plan.
        </p>
        <p>
          RQ2: Graph Indexes (How can we use Graph Indexing
for Better Performance?): The default method for processing
graph queries is to perform a subgraph matching search against
the graph dataset [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. Several graph indexing techniques have
been proposed in the literature. In practice, building a graph
index is a multi-faceted process. That is, it depends on using
the graph structural information for enumerating and extracting
the most frequent features (i.e. graph sub-structures), and then
building a data structure of these features. These data structures
are such as Hash Tables , Lattices, Tries or Trees [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. The indexed
features can be in the form of simple graph patterns/paths, trees,
graphs, or a mix of graphs and trees. Further, selecting these
features to be indexed can be done exhaustively via enumerating
all such features across the whole graph data set [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], or via
mining the graph data set for frequent patterns or features (i.e.
Discriminative Features) [
          <xref ref-type="bibr" rid="ref23 ref26">23, 26</xref>
          ]. This mining is recommended
in building a graph index as the size of the created graph index
should be reasonable. It is also worth noting that, most of the
existing graph indexing algorithms are only able to handle
undirected graphs with labelled vertices [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ].
        </p>
        <p>Currently, Morpheus doesn’t use any indexing mechanism for
property graphs while executing graph queries. To this end, we
aim to build an eficient indexing scheme of the property graphs
in an ofline mode (taking into consideration its schema, as well as
its storage backend). Then, this index will be used for reducing the
search space for the complex graph pattern matching task. Thus,
consulting this index for executing the graph query workload is
better than exhaustive vertex-to-vertex correspondence checking
from the query to the graph which involves a lot of expensive join
operations in the relational representation. In our plan, we don’t
consider the overhead of updating the built index, as Morpheus is
currently supporting only read operations, and thus no insertions
and deletions happen to the already generated property graph.</p>
      </sec>
      <sec id="sec-3-2">
        <title>RQ3: Graph Materialized Views (How can we use Graph</title>
      </sec>
      <sec id="sec-3-3">
        <title>Views for better performance?): Morpheus and most of graph</title>
        <p>
          databases tend to compute each query from scratch without
being aware of the previous query workloads [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ]. Particularly,
if we repeatedly execute the same query using Morpheus, the
execution plan always stays the same and yields no changes in
the execution plan nor in time improvement. Moreover,
SparkSQL registered DataFrames are (by default) non-materialized
views [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. Spark-SQL can materialize/cache DataFrames in
memory, but this cannot well capture the graph structural information.
To this direction, we aim to provide a solution for this limitation,
leveraging the potentials of graph materialized views and the
previous graph query workload. In Particular, we aim to use the
information from the previous query workload to list and
materialize the most frequent substructures and proprieties that will
be stored (preferably in memory) for accelerating the incoming
graph queries.
        </p>
        <p>
          It is worthy to note that, graph materialization has its side
efects regarding the memory space that you need to sacrifice
for keeping those views. This also comes with another challenge
concerning the selection of best proper views (i.e. graph
substructures and properties of interest) to materialize and keep in
memory [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ]. This means that Materialization in our case, will
take into consideration the graph structure. Thus materialization
will be only for specific ’frequent/hot’ sub-structures rather than
materializing the entire query results.
        </p>
      </sec>
      <sec id="sec-3-4">
        <title>RQ4: Graph Cost-Based Optimization (How can we use</title>
        <p>
          graph CBO for better performance?): In general, Spark SQL
uses the Catalyst optimizer to optimize all the queries written
both in explicit SQL or in a DataFrame Domain Specific Language
(DSL). Basically, Catalyst is a Spark library built as a
relationalbased optimization engine. Each rule in the rule-based part of
Catalyst focuses on a specific optimization. Catalyst can also
apply various relational cost-based optimizations for improving
the quality of multiple alternative query physical execution plans.
Although there are several eforts for optimizing the cost-based
techniques in Spark-SQL such the work proposed recently in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]
optimizing (Generalized Projection/Selection/Join) queries, these
optimizations are not graph-aware cost optimizations. To this
extent, providing Graph-aware Cost-Based-Optimizations (GCBOs)
for selecting the best execution plan of the graph query (using
best guess approach that takes into account the important graph
structural information/statistics about the graph dataset instead
of basic relational statistics) will have better optimization and
performance for addressing such graph queries in Spark.
        </p>
        <p>To tackle this challenge, we aim to provide a graph-aware
query planner which will be implemented as a layer on top of the
default Spark Catalyst for providing a GCBO query plan, taking
into account the statistics of the property graph that resides in
Morpheus storage backend. Particularly, the new graph
planner/optimizer can select the best join of tables order based on
selectivity and cardinality estimations of graph patterns in the
graph query for filter and join operators. Therefore, at the query
time, the new GCBO can suggest a more optimized query plan
for the Catalyst to follow.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>PRELIMINARY RESULTS</title>
      <p>In this section, we describe our initial experimental results for
answering RQ1. In particular, we have designed a set of micro and
macro benchmarking experiments for evaluating the performance
of diferent Spark storage backends supported by the Morpheus
framework. These storage backends are: Neo4j, Hive, and HDFS
with its diferent file formats (CSV,Parquet, and ORC). Notably,
we don’t copy data from these Spark storage backends, we only
evaluate Morpheus performance with the data already resides in
them. We have used the Cypher LDBC Social Network Benchmark
(SNB) BI benchmark query workload12. Our selected queries are
read only queries (i.e. no updates are supported by Morpheus).</p>
      <sec id="sec-4-1">
        <title>Hardware and Software Configurations : Our experiments</title>
        <p>have been performed on a Desktop PC running a Cloudera
Virtual Machine (VM) v.5.13 with Centos v7.3 Linux system, running
12https://github.com/ldbc/ldbc_snb_implementations/tree/master/cypher/queries
on Intel(R) Core(TM) i5-8250U 1.60 GHzX64-based CPU and 24
GB DDR3 of physical memory. We also used a 64GB virtual
hard drive for our VM. We used Spark V2.3 parcel on
Cloudera VM to fully support Spark-SQL capabilities. We used the
already installed Hive service on Cloudera VM
(version:hive1.1.0+cdh5.16.1+1431), and neo4j V3.5.8.</p>
        <p>Benchmark Datasets: Using the LDBC SNB data generator13,
we generated a graph data set (in CSV format) of Scale Factor
(SF=1). We used this data to create a property graph in Neo4j
using Neo4j import tool14. The generated property graph has
more than 3M nodes, and more than 17M relationships. We also
created a graph of tables and views of the same schema inside
Hive. Further, we used Morpheus Framework to read this property
graph either from Hive or Neo4j to store the same graph into
HDFS into Morpheus supported file formats (CSV, ORC, Parquet).</p>
        <p>For both experiments (Micro and Macro Benchmarking), we
run the experiments for all queries five times (excluding the first
cold-start run time, to avoid the warm-up bias, and computed an
average of the other four run times). Notably, we take the ( ln)
function of average run times in the Macro-Benchmark
experiment15.</p>
      </sec>
      <sec id="sec-4-2">
        <title>Morpheus Macro-Benchmark: For the Macro Benchmark</title>
        <p>ing experiment, we selected 21 BI queries (i.e. which are valid to
run in the current Morpheus Cypher constructs)16. The results of
Figure 4 show that Hive has the lowest performance in general
for running most of the queries even those that are not complex
with 70% of low performance than others. HDFS backends in
general outperform Neo4j and Hive with 100% of better performance.
In particular, Parquet format in HDFS has the best performance.
It outperforms ORC and CSV format in most cases of running the
queries with 42%. While both CSV and ORC achieve only 28.5%
of higher performance.</p>
        <p>Morpheus Micro-Benchmark: In our Micro-benchmark
experiment, we run 18 Atomic/micro level BI queries17. The results
of Figure 5 show that Neo4j has the lowest performance in general
for running the first 12 queries with 66% of low performance than
others. Hive starts to perform worse than Neo4j (and all other
systems) only when the number of joins increase and sorting
being applied on queries from Q13 to Q18. While, HDFS
backends in general outperform Neo4j and Hive with 94.4% of better
performance. In particular, Parquet format in HDFS has the best
performance, it outperforms ORC and CSV in most queries with
55%. While CSV and ORC only outperform with 22.2% and 16.6%,
respectively.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>CONCLUSIONS AND FUTURE WORK</title>
      <p>We are living in an era of continuous huge growth of more and
more connected data. Querying and processing large graphs is an
interesting and challenging task. The Morpheus framework aims
at integrating Cypher query language to work as a graph query
language on top of Spark. Morpheus translates Cypher queries
into relational Dataframes operations that can fit in the
SparkSQL environment. Morpheus depends mainly on default Spark
Catalyst optimizer for optimizing those relational operators. No
graph indexing nor graph materialized views are maintained
in Morpheus or Spark SQL framework for optimizing property
13https://github.com/ldbc/ldbc_snb_datagen
14https://neo4j.com/docs/operations-manual/current/tools/import/
15The code and results of our initial experiments is available on https://github.com/
DataSystemsGroupUT/MorephusStorageBenchmarking
16http://bit.ly/2W5b01N Macro LDBC SNB BI Queries
17http://bit.ly/2Pa4TrF Micro/Atomic level queries
graph data querying and processing. In this PhD work, we focus
on tackling these challenges by designing an eficient storage
backend for persisting property graphs for Morpheus. In addition,
we aim at providing graph-aware techniques (e.g., indexes,
materialized views) for Spark to optimize the graph queries, in addition
to other graph-aware CBO for Spark Catalyst Optiomizer. We
believe that achieving these contributions as our future research
plan can significantly enhance the performance of executing
graph queries using the Morpheus framework.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Renzo</given-names>
            <surname>Angles</surname>
          </string-name>
          , Marcelo Arenas, Pablo Barceló, Aidan Hogan, Juan Reutter, and
          <string-name>
            <given-names>Domagoj</given-names>
            <surname>Vrgoč</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Foundations of modern query languages for graph databases</article-title>
          .
          <source>ACM Computing Surveys (CSUR) 50</source>
          ,
          <issue>5</issue>
          (
          <year>2017</year>
          ),
          <fpage>68</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Armbrust</surname>
          </string-name>
          et al.
          <year>2015</year>
          .
          <article-title>Scaling spark in the real world: performance and usability</article-title>
          .
          <source>PVLDB 8</source>
          ,
          <issue>12</issue>
          (
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Armbrust</surname>
          </string-name>
          et al.
          <year>2015</year>
          .
          <article-title>Spark sql: Relational data processing in spark</article-title>
          .
          <source>In SIGMOD.</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Armbrust</surname>
          </string-name>
          , Doug Bateman, Reynold Xin, and
          <string-name>
            <given-names>Matei</given-names>
            <surname>Zaharia</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>Introduction to spark 2.0 for database researchers</article-title>
          .
          <source>In Proceedings of the 2016 International Conference on Management of Data. ACM</source>
          ,
          <volume>2193</volume>
          -
          <fpage>2194</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Ramazan</given-names>
            <surname>Ali</surname>
          </string-name>
          <string-name>
            <surname>Bahrami</surname>
          </string-name>
          , Jayati Gulati, and
          <string-name>
            <given-names>Muhammad</given-names>
            <surname>Abulaish</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Eficient processing of SPARQL queries over graphframes</article-title>
          .
          <source>In Proceedings of the International Conference on Web Intelligence. ACM</source>
          ,
          <volume>678</volume>
          -
          <fpage>685</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Lorenzo</given-names>
            <surname>Baldacci</surname>
          </string-name>
          and
          <string-name>
            <given-names>Matteo</given-names>
            <surname>Golfarelli</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>A Cost Model for SPARK SQL</article-title>
          .
          <source>IEEE Transactions on Knowledge and Data Engineering</source>
          <volume>31</volume>
          ,
          <issue>5</issue>
          (
          <year>2018</year>
          ),
          <fpage>819</fpage>
          -
          <lpage>832</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Angela</given-names>
            <surname>Bonifati</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Peter</given-names>
            <surname>Furniss</surname>
          </string-name>
          , Alastair Green, Russ Harmer, Eugenia Oshurko, and
          <string-name>
            <given-names>Hannes</given-names>
            <surname>Voigt</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Schema validation and evolution for graph databases</article-title>
          . arXiv preprint arXiv:
          <year>1902</year>
          .
          <volume>06427</volume>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Hirokazu</given-names>
            <surname>Chiba</surname>
          </string-name>
          , Ryota Yamanaka, and
          <string-name>
            <given-names>Shota</given-names>
            <surname>Matsumoto</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Property Graph Exchange Format</article-title>
          . arXiv preprint arXiv:
          <year>1907</year>
          .
          <volume>03936</volume>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Nadime</given-names>
            <surname>Francis</surname>
          </string-name>
          et al.
          <year>2018</year>
          .
          <article-title>Cypher: An evolving query language for property graphs</article-title>
          .
          <source>In SIGMOD.</source>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Abel</surname>
            <given-names>Gómez</given-names>
          </string-name>
          , Amine Benelallam, and
          <string-name>
            <given-names>Massimo</given-names>
            <surname>Tisi</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Decentralized model persistence for distributed computing</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Joseph</surname>
            <given-names>E Gonzalez</given-names>
          </string-name>
          , Reynold S Xin, Ankur Dave, Daniel Crankshaw, Michael J Franklin, and
          <string-name>
            <given-names>Ion</given-names>
            <surname>Stoica</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Graphx: Graph processing in a distributed dataflow framework</article-title>
          .
          <source>In 11th {USENIX} Symposium on Operating Systems Design and Implementation</source>
          ({
          <source>OSDI} 14)</source>
          .
          <fpage>599</fpage>
          -
          <lpage>613</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Chuang-Yi Gui</surname>
          </string-name>
          et al.
          <year>2019</year>
          .
          <article-title>A survey on graph processing accelerators: Challenges and opportunities</article-title>
          .
          <source>Journal of Computer Science and Technology 34</source>
          ,
          <issue>2</issue>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Olaf</given-names>
            <surname>Hartig</surname>
          </string-name>
          and
          <string-name>
            <given-names>Jorge</given-names>
            <surname>Pérez</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Semantics and complexity of GraphQL</article-title>
          .
          <source>In Proceedings of the 2018 World Wide Web Conference. International World Wide Web Conferences Steering Committee</source>
          ,
          <fpage>1155</fpage>
          -
          <lpage>1164</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Foteini</surname>
            <given-names>Katsarou</given-names>
          </string-name>
          , Nikos Ntarmos, and
          <string-name>
            <given-names>Peter</given-names>
            <surname>Triantafillou</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Performance and scalability of indexed subgraph query processing methods</article-title>
          .
          <source>Proceedings of the VLDB Endowment 8</source>
          ,
          <issue>12</issue>
          (
          <year>2015</year>
          ),
          <fpage>1566</fpage>
          -
          <lpage>1577</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Karsten</surname>
            <given-names>Klein</given-names>
          </string-name>
          , Nils Kriege, and
          <string-name>
            <given-names>Petra</given-names>
            <surname>Mutzel</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>CT-index: Fingerprintbased graph indexing combining cycles and trees</article-title>
          .
          <source>In ICDE.</source>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Egor</surname>
            <given-names>V Kostylev</given-names>
          </string-name>
          et al.
          <year>2015</year>
          .
          <article-title>SPARQL with property paths</article-title>
          .
          <source>In ISWC.</source>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Yike</surname>
            <given-names>Liu</given-names>
          </string-name>
          , Tara Safavi, Abhilash Dighe, and
          <string-name>
            <given-names>Danai</given-names>
            <surname>Koutra</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Graph summarization methods and applications: A survey</article-title>
          .
          <source>ACM Computing Surveys (CSUR) 51</source>
          ,
          <issue>3</issue>
          (
          <year>2018</year>
          ),
          <fpage>62</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Bingqing</surname>
            <given-names>Lyu</given-names>
          </string-name>
          , Lu Qin, Xuemin Lin,
          <source>Lijun Chang, and Jefrey Xu Yu</source>
          .
          <year>2016</year>
          .
          <article-title>Scalable supergraph search in large graph databases</article-title>
          .
          <source>In 2016 IEEE 32nd International Conference on Data Engineering (ICDE)</source>
          . IEEE,
          <fpage>157</fpage>
          -
          <lpage>168</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Marko</surname>
            <given-names>A</given-names>
          </string-name>
          <string-name>
            <surname>Rodriguez</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>The Gremlin graph traversal machine and language (invited talk)</article-title>
          .
          <source>In PDPL.</source>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>Gábor</given-names>
            <surname>Szárnyas</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Query, analysis, and benchmarking techniques for evolving property graphs of software systems</article-title>
          . (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Oskar van Rest</surname>
          </string-name>
          et al.
          <year>2016</year>
          .
          <article-title>PGQL: a property graph query language</article-title>
          .
          <source>In Proceedings of the Fourth International Workshop on Graph Data Management Experiences and Systems.</source>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Da</surname>
            <given-names>Yan</given-names>
          </string-name>
          , Yingyi Bu, Yuanyuan Tian,
          <string-name>
            <given-names>Amol</given-names>
            <surname>Deshpande</surname>
          </string-name>
          , et al.
          <year>2017</year>
          .
          <article-title>Big graph analytics platforms</article-title>
          .
          <source>Foundations and Trends® in Databases 7</source>
          ,
          <fpage>1</fpage>
          -
          <lpage>2</lpage>
          (
          <year>2017</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>195</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>Xifeng</surname>
            <given-names>Yan</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Philip S Yu</surname>
          </string-name>
          , and Jiawei Han.
          <year>2004</year>
          .
          <article-title>Graph indexing: a frequent structure-based approach</article-title>
          .
          <source>In Proceedings of the 2004 ACM SIGMOD international conference on Management of data. ACM</source>
          ,
          <volume>335</volume>
          -
          <fpage>346</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Matei</surname>
            <given-names>Zaharia</given-names>
          </string-name>
          , Mosharaf Chowdhury,
          <string-name>
            <surname>Michael J Franklin</surname>
            ,
            <given-names>Scott</given-names>
          </string-name>
          <string-name>
            <surname>Shenker</surname>
          </string-name>
          , and Ion Stoica. [n.d.]. Spark:
          <article-title>Cluster computing with working sets</article-title>
          .
          <source>([n. d.]).</source>
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>Yan</given-names>
            <surname>Zhang</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Eficient Structure-aware OLAP Query Processing over Large Property Graphs</article-title>
          .
          <source>Master's thesis</source>
          . University of Waterloo.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Peixiang</surname>
            <given-names>Zhao</given-names>
          </string-name>
          ,
          <source>Jefrey Xu Yu, and Philip S Yu</source>
          .
          <year>2007</year>
          .
          <article-title>Graph indexing: tree+ delta&lt;= graph</article-title>
          .
          <source>In PVLDB.</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>