A graph database is a database that uses graph structures with nodes, edges, and properties to represent and store data. By definition,[according to whom?] a graph database is any storage system that provides index-free adjacency. This means that every element contains a direct pointer to its adjacent element and no index lookups are necessary. General graph databases that can store any graph are distinct from specialized graph databases such as triplestores and network databases.
Graph databases are based on graph theory. Graph databases employ nodes, properties, and edges.
Nodes represent entities such as people, businesses, accounts, or any other item you might want to keep track of.
Properties are pertinent information that relate to nodes. For instance, if "Wikipedia" were one of the nodes, one might have it tied to properties such as "website", "reference material", or "word that starts with the letter 'w'", depending on which aspects of "Wikipedia" are pertinent to the particular database.
Edges are the lines that connect nodes to nodes or nodes to properties and they represent the relationship between the two. Most of the important information is really stored in the edges. Meaningful patterns emerge when one examines the connections and interconnections of nodes, properties, and edges.
Compared with relational databases, graph databases are often faster for associative data sets, and map more directly to the structure of object-oriented applications. They can scale more naturally to large data sets as they do not typically require expensive join operations. As they depend less on a rigid schema, they are more suitable to manage ad hoc and changing data with evolving schemas. Conversely, relational databases are typically faster at performing the same operation on large numbers of data elements.
Graph databases are a powerful tool for graph-like queries, for example computing the shortest path between two nodes in the graph. Other graph-like queries can be performed over a graph database in a natural way (for example graph's diameter computations or community detection).
Graph database projects
The following is a list of several well-known graph database projects:
|AllegroGraph||4.11 (June 2013)||Proprietary, Clients - Eclipse Public License v1||C#, C, Common Lisp, Java, Python||A RDF and graph database.|
|Bigdata||GPL||Java||A RDF/graph database capable of clustered deployment.|
|Bitsy||1.5.0||AGPL, Enterprise license (unlimited use, annual/perpetual)||Java||A small, embeddable, durable in-memory graph database|
|BrightstarDB||MIT License ||C#||An embeddable NoSQL database for the .NET platform with code-first data model generation.|
|DEX||4.8 (2013)||evaluation, research or development use (free) / commercial use||C++||A high-performance and scalable graph database management system from Sparsity Technologies, a technology transition company from DAMA-UPC. Its main characteristics is its query performance for the retrieval & exploration of large networks|
|Filament||BSD||Java||A graph persistence framework and associated toolkits based on a navigational query style.|
|GraphBase||1.0.03a||Proprietary||Java||A customizable, distributed, small-footprint graph store with a rich tool set from FactNexus.|
|Graphd||Proprietary||The proprietary back-end of Freebase.|
|Horton||Proprietary||C#||A graph database from Microsoft Research Extreme Computing Group (XCG) based on the cloud programming infrastructure Orleans.|
|HyperGraphDB||1.2 (2012)||LGPL||Java||A graph database supporting generalized hypergraphs where edges can point to other edges.|
|InfiniteGraph||3.0 (January 2013)||Proprietary||Java||A distributed and cloud-enabled commercial product with flexible licensing.|
|InfoGrid||2.9.5 (2011)||AGPLv3, free for small entities||Java||A graph database with web front end and configurable storage engines (MySQL, PostgreSQL, Files, Hadoop).|
|jCoreDB Graph||An extensible database engine with a graph database subproject.|
|Neo4j||1.9.2 (July 2013)||GPLv3 Community Edition. Commercial & AGPLv3 options for Enterprise and Advanced editions||Java||A highly scalable open source graph database that supports ACID, has high-availability clustering for enterprise deployments, and comes with a web-based administration tool that includes full transaction support and visual node-link graph explorer. Neo4j is accessible from most programming languages using its built-in REST web API interface. Neo4j is the most popular graph database in use today.|
|OpenLink Virtuoso||A RDF graph database server, deployable as a local embedded instance (as used in the Nepomuk Semantic Desktop), a single-instance network server, or a shared-nothing network cluster instance.|
|Oracle Spatial and Graph||11.2 (2012)||Proprietary||Java, PL/SQL||1) RDF Semantic Graph: comprehensive W3C RDF graph management in Oracle Database with native reasoning and triple-level label security. 2) Network Data Model property graph: for physical/logical networks with persistent storage and a Java API for in-memory graph analytics.|
|Oracle NoSQL Database||2.0.39 (2013)||Proprietary||Java||RDF Graph for Oracle NoSQL Database is a feature of Enterprise Edition providing W3C RDF graph capabilities in NoSQL Database.|
|OrientDB||1.6.1 (November 2013)||Apache 2||Java||A distributed Graph Database with a hybrid model taken from Document Database.|
|OQGRAPH||GPLv2||A graph computation engine for MySQL, MariaDB and Drizzle.|
|Ontotext OWLIM||5.3||OWLIM Lite is free
OWLIM SE and Enterprise are commercially licenced
|Java||A graph database engine, based entirely on Semantic Web standards from W3C: RDF, RDFS, OWL, SPARQL. OWLIM Lite is an "in memory" engine. OWLIM SE is robust standalone database engine. OWLIM Enterprise is a clustered version which offers horizontal scalability and failover support and other enterprise features.|
|R2DF||R2DF framework for ranked path queries over weighted RDF graphs.|
|ROIS||Freeware||Modula-2||A programmable knowledge server that supports inheritance and transitivity. Used in OpenGALEN as a Terminology Server.|
|sones GraphDB||AGPLv3||C#||A graph database and universal access layer (funded by Deutsche Telekom).|
|Sqrrl Enterprise||v1.1 (2013)||Proprietary||Java||Distributed, real-time graph database featuring cell-level security and massive scalability.|
|Teradata Aster||v6 (2013)||Proprietary||Java, SQL, Python, C++, R||A high performance, multi-purpose, highly scalable and extensible MPP database incorporating patented engines supporting native SQL, MapReduce and Graph data storage and manipulation. An extensive set of analytical function libraries and data visualization capabilities are also provided.|
|Titan||0.4.1 (2013)||Apache 2||Java||A distributed, real-time, transactional graph database developed by Aurelius.|
|Trinity||C#, C, X64 Assembly||A distributed general purpose graph engine on a memory cloud.|
|VelocityGraph||Open source with proprietary back-end||C#||High performance, scalable & flexible graph database build with VelocityDB object database.|
|VertexDB||Revised BSD||C||A graph database server that supports automatic garbage collection.|
|WhiteDB||0.7.0 (October 2013)||GPLv3 and a free commercial licence||C||A graph/N-tuples shared memory database library.|
Graph database features
The following table compares the features of the above graph databases.
|Name||Graph Model||API||Query Methods||Visualizer||Consistency||Backend||Scalability|
|Bitsy||Property Graph||Blueprints||Gremlin, Pixy||ACID with optimistic concurrency control||Human-readable JSON-encoded text files with checksums and markers for recovery|
|DEX||Labeled and directed attributed multigraph||Java, C++, .NET||Native Java, C# and C++ APIs, Blueprints, Gremlin||Exporting functionality to visualization formats||Consistency, durability and partial isolation and atomicity||Native graph. light and independent data structures with a small memory footprint for storage||Master/Slave replication|
|GraphBase Enterprise(1) GraphBase Agility(2)||(1) mixed, (2) Framework-managed Simple Graph||Java||Bounds Language, embedded java||GraphPad, BoundsPad, Navigator||ACID, graph-based transactions||proprietary native||(1) shared nothing distributed, (2) simple replication, 100+ Billion arcs per server|
|Horton||Attributed multigraph||Horton Query Language (Regular Language Expression + SQL)||C#, .Net Framework, Asynchronous communication protocols|
|HyperGraphDB||Object-oriented multi-relational labeled hypergraph||Custom,Java||MVCC/STM|
|InfiniteGraph||Labeled and directed multi-property graph||Java, Blueprints (Read Only)||Java (with parallel, distributed queries), Gremlin (Read Only)||Graph browser for developers. Plugins to allow use of external libraries.||ACID. There is also a parallel, loosely synchronized batch loader.||Objectivity/DB on standard filesystems||Distributed & Sharded. Objectivity/DB was the first DBMS to store a Petabyte of objects.|
|InfoGrid||Dynamically typed, object-oriented graph, multigraphs, semantic models|
|Oracle Spatial and Graph||RDF graph: Triple & Quad (named graphs); Network Data Model property graph||Java; Apache Jena; PL/SQL||SPARQL 1.1; SPARQL web service end point; SQL||SPARQL-compliant tools; Apache Jena-based tools; XML & JSON-based tools; SQL based tools||ACID||Efficient, compressed, partitioned graph storage; Native persisted in-database inferencing; SPARQL 1.1 & SQL integration; Triple-level label security; Semantic indexing of documents||Parallel load, query, inference; Query controls; Scales from PC to Oracle Exadata; Supports Oracle Real Application Clusters and Oracle Database 8 exabytes|
|Oracle NoSQL Database||RDF graph: Triple default graph, Triple & Quad named graphs||Java (Apache Jena)||SPARQL 1.1; SPARQL web service end point||SPARQL-compliant tools; Apache Jena-based tools; XML & JSON-based tools||ACID; Configurable consistency & durability policies||Key/value store; W3C SPARQL 1.1 & Update; In-memory RDFS/OWL inferencing||Parallel load/query; Query controls for: parallel execution, timeout, query optimization hints|
|OrientDB||Property Graph||Java Traverser API, Blueprints, Rexster||Own SQL-like Query Language, Gremlin||ACID, MVCC||Custom on disc or in memory|
|Sqrrl Enterprise||Property Graph||Thrift, Blueprint||Gremlin||Integrates with 3rd party tools||Eventually Consistent||Accumulo||Distributed cluster with tens of trillions of edges|
|Titan||Property Graph||Java, Blueprints, REST, RexPro binary protocol, Python, Clojure (any language)||Gremlin, SPARQL||Integrates with 3rd party tools||ACID or Eventually Consistent||Cassandra, HBase, MapR M7 Tables, Berkeley DB, Persistit, Hazelcast||Distributed cluster (120 billion+ edges) or single server.|
|Trinity||Cell Based Graph Model||C#||Trinity Query Language||Cell level Atomicity||Native graph store and processing engine||billion node in-memory graph|
Distributed Graph Processing
- Angrapa - graph package in Hama, a bulk synchronous parallel (BSP) platform
- Apache Hama - a pure BSP(Bulk Synchronous Parallel) computing framework on top of HDFS (Hadoop Distributed File System) for massive scientific computations such as matrix, graph and network algorithms.
- Bigdata - a RDF/graph database capable of clustered deployment.
- Faunus - a Hadoop-based graph computing framework that uses Gremlin as its query language. Faunus provides connectivity to Titan, Rexster-fronted graph databases, and to text/binary graph formats stored in HDFS. Faunus is developed by Aurelius.
- FlockDB - an open source distributed, fault-tolerant graph database based on MySQL and the Gizzard framework for managing Twitter-like graph data (single-hop relationships) FlockDB on GitHub.
- Giraph - a Graph processing infrastructure that runs on Hadoop (see Pregel).
- GraphBase - Enterprise Edition supports embedding of callable Java Agents within the vertices of a distributed graph.
- GoldenOrb - Pregel implementation built on top of Apache Hadoop
- GraphLab - A framework for machine learning and data mining in the cloud
- GraphX - GraphLab built on the Spark cluster computing system. Dr. Joseph Gonzalez is the project lead, the creator of GraphLab.
- HipG - a library for high-level parallel processing of large-scale graphs. HipG is implemented in Java and is designed for distributed-memory machine
- InfiniteGraph - a commercially available distributed graph database that supports parallel load and parallel queries.
- JPregel - In-memory java based Pregel implementation
- KDT - An open-source distributed graph library with a Python front-end and C++/MPI backend (Combinatorial BLAS).
- OpenLink Virtuoso - the shared-nothing Cluster Edition supports distributed graph data processing.
- Oracle Spatial and Graph - loading, inferencing, and querying workloads are automatically and transparently distributed across the nodes in an Oracle Real Application Cluster, Oracle Exadata Database Machine, and Oracle Database Appliance.
- Phoebus - Pregel implementation written in Erlang
- Pregel - Google's internal graph processing platform, released details in ACM paper.
- Powergraph - Distributed graph-parallel computation on natural graphs.
- PowerLyra - differentiated graph computation and partitioning on skewed graphs (dynamically applying different computation and partition strategies for different vertices).
- Sedge - A framework for distributed large graph processing and graph partition management (including an open source version of Google's Pregel)
- Signal/Collect - a framework for parallel graph processing written in Scala
- Sqrrl Enterprise - distributed graph processing utilizing Apache Accumulo and featuring cell-level security, massive scalability, and JSON support
- Titan - A distributed, disk-based graph database developed by Aurelius.
- Trinity - Distributed in-memory graph engine under development at Microsoft Research Labs.
- Parallel Boost Graph Library (PBGL) - a C++ library for graph processing on distributed machines, part of Boost framework.
- Mizan - An optimized Pregel clone that can be deployed easily on Amazon EC2, local clusters, stand-alone Linux systems and supercomputers (IBM BlueGene/P). It utilizes runtime graph repartitioning between iterations to provide dynamic load balancing for better algorithm performance.
APIs and Graph Query/Programming Languages
- Bounds Language - terse C-style syntax which initiates concurrent traversals in GraphBase and supports interaction between them.
- Blueprints - a Java API for Property Graphs from TinkerPop and supported by a few graph database vendors.
- Blueprints.NET - a C#/.NET API for generic Property Graphs.
- Bulbflow - a Python persistence framework for Rexster, Titan, and Neo4j Server.
- Cypher - a declarative graph query language for Neo4j that enables ad hoc as well as programmatic (SQL-like) access to the graph
- Gremlin - an open-source graph programming language that works over various graph database systems.
- Neo4jClient - a .NET client for accessing Neo4j.
- Neography - a thin Ruby wrapper that provides access to Neo4j via REST.
- Neo4jPHP - a PHP library wrapping the Neo4j graph database.
- NodeNeo4j - a Node.js driver for Neo4j that provides access to Neo4j via REST
- Pacer - a Ruby dialect/implementation of the Gremlin graph traversal language.
- Pipes - a lazy dataflow framework written in Java that forms the foundation for various property graph traversal languages.
- Pixy - a declarative graph query language that works on any Blueprints-compatible graph database
- PYBlueprints - a Python API for Property Graphs.
- Pygr - a Python API for large-scale analysis of biological sequences and genomes, with alignments represented as graphs.
- Rexster - a graph database server that provides a REST or binary protocol API (RexPro). Supports Titan, Neo4j, OrientDB, Dex, and any TinkerPop/Blueprints-enabled graph.
- SPARQL - a query language for databases, able to retrieve and manipulate data stored in Resource Description Framework format.
- SPASQL - an extension of the SQL standard, allowing execution of SPARQL queries within SQL statements, typically by treating them as subquery or function clauses. This also allows SPARQL queries to be issued through "traditional" data access APIs (ODBC, JDBC, OLE DB, ADO.NET, etc.)
- Spring Data Neo4j - an extension to Spring Data (part of the Spring Framework), providing direct/native access to Neo4j
- Oracle SQL and PL/SQL APIs - have graph extensions for Oracle Spatial and Graph.
- Styx (previously named Pipes.Net) - a data flow framework for C#/.NET for processing generic graphs and Property Graphs.
- Thunderdome - a Titan Rexster Object-Graph Mapper for Python
- NoSQL (concept)
- Document-oriented database
- Structured storage
- Object database
- Resource Description Framework (RDF) - framework to express node-edge graphs
- Graph transformation for a complementary topic (rule based in memory manipulation of graphs instead of transaction safe persistence).
- RDF Database
- Neo4j, World’s Leading Graph Database. Retrieved September 16, 2013.
- DB-Engines Ranking of Graph DBMS. Retrieved July 19, 2013.
- NoSQL Frankfurt 2010 - The GraphDB Landscape and sones
- Graph Databases and the Future of Large-Scale Knowledge Management
- Graphs in the database: SQL meets social networks
- Social networks in the database: using a graph database
- Scaling Online Social Networks without Pains
- Large-scale Graph Computing at Google
- Eric Lai. (2009, July 1). No to SQL? Anti-database movement gains steam
- Renzo Angles, Claudio Gutierrez. Survey of graph database models. ACM Computing Surveys, Feb. 2008.
- InfoGrid - an open-source application platform including a graph database
- Rodriguez, M.A., Neubauer, P, The Graph Traversal Pattern article.
- Optimizing Schema-Last Tuple-Store Queries in Graphd SIGMOD 2010