Graph database: Difference between revisions
m updated Virtuoso version details |
Major cleanup, removed all non-notable and/or unreferenced products/features |
||
Line 1: | Line 1: | ||
{{original research}} |
|||
{{primary sources}} |
|||
{{refimprove}} |
|||
In [[computing]], a '''graph database''' is a [[database]] that uses [[Graph (data structure)|graph structures]] for [[Semantic query|semantic queries]] with [[Node (graph theory) | node]]s, [[Edge (graph theory) | edge]]s and properties to represent and store data. A key concept of the system is the ''graph'' (or ''edge'' or ''relationship''), which directly relates data items in the store. The relationships allow data in the store to be linked together directly, and in most cases retrieved with a single operation. This contrasts with conventional [[relational database]]s, where links between data are stored in the data itself, and queries search for this data within the store and use the [[Join (SQL)|JOIN]] concept to collect the related data. Graph databases by design allow simple and rapid retrieval of complex hierarchical structures that are difficult to model in relational systems. Graph databases are similar to 1970s [[Network model|network-model databases]] in that both represent general graphs, but network-model databases operate at a lower level of abstraction<ref name="Gutierrez">{{cite journal |last= Angles |first= Renzo |last2= Gutierrez |first2= Claudio |date= 1 Feb 2008 |title= Survey of graph database models |url= http://www.cse.iitk.ac.in/users/smitr/PhD%20Resources/Survey%20of%20Graph%20Databases%20Models.pdf |journal= ACM Computing Surveys |publisher= [[Association for Computing Machinery]] |volume= 40 |issue= 1 |doi= 10.1145/1322432.1322433 |access-date= 28 May 2016|quote= network models [...] lack a good abstraction level: it is difficult to separate the db-model from the actual implementation}}</ref> and lack easy traversal over a chain of edges.<ref>{{cite book |last= Silberschatz |first= Avi |date= 28 January 2010 |title= Database System Concepts, Sixth Edition |url= http://codex.cs.yale.edu/avi/db-book/db6/appendices-dir/d.pdf |publisher= McGraw-Hill |page= D-29 |isbn= 0-07-352332-1}}</ref> |
In [[computing]], a '''graph database''' is a [[database]] that uses [[Graph (data structure)|graph structures]] for [[Semantic query|semantic queries]] with [[Node (graph theory) | node]]s, [[Edge (graph theory) | edge]]s and properties to represent and store data. A key concept of the system is the ''graph'' (or ''edge'' or ''relationship''), which directly relates data items in the store. The relationships allow data in the store to be linked together directly, and in most cases retrieved with a single operation. This contrasts with conventional [[relational database]]s, where links between data are stored in the data itself, and queries search for this data within the store and use the [[Join (SQL)|JOIN]] concept to collect the related data. Graph databases by design allow simple and rapid retrieval of complex hierarchical structures that are difficult to model in relational systems. Graph databases are similar to 1970s [[Network model|network-model databases]] in that both represent general graphs, but network-model databases operate at a lower level of abstraction<ref name="Gutierrez">{{cite journal |last= Angles |first= Renzo |last2= Gutierrez |first2= Claudio |date= 1 Feb 2008 |title= Survey of graph database models |url= http://www.cse.iitk.ac.in/users/smitr/PhD%20Resources/Survey%20of%20Graph%20Databases%20Models.pdf |journal= ACM Computing Surveys |publisher= [[Association for Computing Machinery]] |volume= 40 |issue= 1 |doi= 10.1145/1322432.1322433 |access-date= 28 May 2016|quote= network models [...] lack a good abstraction level: it is difficult to separate the db-model from the actual implementation}}</ref> and lack easy traversal over a chain of edges.<ref>{{cite book |last= Silberschatz |first= Avi |date= 28 January 2010 |title= Database System Concepts, Sixth Edition |url= http://codex.cs.yale.edu/avi/db-book/db6/appendices-dir/d.pdf |publisher= McGraw-Hill |page= D-29 |isbn= 0-07-352332-1}}</ref> |
||
The underlying storage mechanism of graph database products varies. Some depend on a relational engine and store the graph data in a [[Table (database)|table]] |
The underlying storage mechanism of graph database products varies. Some depend on a relational engine and store the graph data in a [[Table (database)|table]] while others use a [[key-value store]] or [[document-oriented database]] for storage, making them inherently [[NoSQL]] structures. Most{{says who}} graph databases based on non-relational storage engines also add the concept of ''tags'' or ''properties'', which are essentially relationships lacking a pointer to another document. This allows data elements to be categorized for easy retrieval ''en masse''. |
||
Retrieving data from a graph database requires new concepts and generally a new [[query language]]. {{As of | 2016}}, no other single graph query language has risen to prominence in the same fashion as [[SQL]] did for relational databases, and there are a wide variety of systems - most often tightly tied to a particular product. Some standardization efforts have taken place, leading to systems like [[Gremlin (programming language)|Gremlin]] (which works with a variety of graph engines), and the [[SPARQL]] system (which has seen some multi-vendor adoption). In addition to having [[SQL]] interfaces, some graph databases are accessed through [[Application programming interface|APIs]]. |
Retrieving data from a graph database requires new concepts and generally a new [[query language]]. {{As of | 2016}}, no other single graph query language has risen to prominence in the same fashion as [[SQL]] did for relational databases, and there are a wide variety of systems - most often tightly tied to a particular product. Some standardization efforts have taken place, leading to systems like [[Gremlin (programming language)|Gremlin]] (which works with a variety of graph engines), and the [[SPARQL]] system (which has seen some multi-vendor adoption). In addition to having [[SQL]] interfaces, some graph databases are accessed through [[Application programming interface|APIs]]. |
||
Line 34: | Line 38: | ||
== History == |
== History == |
||
In the pre-history of graph databases, in the mid-1960s [[Navigational database]]s such as [[IBM]]'s [[IBM Information Management System|IMS]] supported tree-like structures in its [[Hierarchical database model|hierarchical model]], but the strict tree structure could be circumvented with virtual records.<ref>{{cite book |last=Silberschatz |first=Avi |date=28 January 2010 |title=Database System Concepts, Sixth Edition |url=http://codex.cs.yale.edu/avi/db-book/db6/appendices-dir/e.pdf |publisher=McGraw-Hill |page=E-20 |isbn=0-07-352332-1}}</ref><ref>{{cite web |url=http://www.people.vcu.edu/~lparker/IMS.html |title=IMS Notes |last1=Parker |first1=Lorraine |website=vcu.edu |access-date=31 May 2016}}</ref> |
In the pre-history of graph databases, in the mid-1960s [[Navigational database]]s such as [[IBM]]'s [[IBM Information Management System|IMS]] supported tree-like structures in its [[Hierarchical database model|hierarchical model]], but the strict tree structure could be circumvented with virtual records.<ref>{{cite book |last=Silberschatz |first=Avi |date=28 January 2010 |title=Database System Concepts, Sixth Edition |url=http://codex.cs.yale.edu/avi/db-book/db6/appendices-dir/e.pdf |publisher=McGraw-Hill |page=E-20 |isbn=0-07-352332-1}}</ref><ref>{{cite web |url=http://www.people.vcu.edu/~lparker/IMS.html |title=IMS Notes |last1=Parker |first1=Lorraine |website=vcu.edu |access-date=31 May 2016}}</ref> |
||
Line 56: | Line 59: | ||
|- |
|- |
||
| [[ArangoDB]] || 3.0.5 (August 2016) || [[Apache 2 License|Apache 2]] || [[C (programming language)|C]], [[C++]] & [[JavaScript]] || A distributed multi-model [[Document-oriented database|document store]] and graph database. Highly scalable supporting [[ACID]] and full transaction support. Including a built-in graph explorer. |
| [[ArangoDB]] || 3.0.5 (August 2016) || [[Apache 2 License|Apache 2]] || [[C (programming language)|C]], [[C++]] & [[JavaScript]] || A distributed multi-model [[Document-oriented database|document store]] and graph database. Highly scalable supporting [[ACID]] and full transaction support. Including a built-in graph explorer. |
||
|- |
|||
| Blazegraph || 1.5.3 (September 2015) || [[GPLv2]], evaluation license, or commercial license. || [[Java (programming language)|Java]] || A RDF/graph database capable of clustered deployment. Blazegraph supports high availability (HA) mode, embedded mode, single server mode. As of version 1.3.1, it supports the Blueprints API and Reification Done Right (RDR). Prior to version 1.5.0; formerly named Bigdata. |
|||
|- |
|||
|- |
|||
| Bitsy|| 1.5.0 || [[Affero General Public License|AGPL]], Enterprise license (unlimited use, annual/perpetual) || [[Java (programming language)|Java]] || A small, embeddable, durable in-memory graph database |
|||
|- |
|||
| BrightstarDB || 1.10.1 (May 2015) || [[MIT License]]<ref>http://brightstardb.com/blog/2013/02/brightstardb-goes-open-source/</ref> || [[C Sharp (programming language)|C#]] || An embeddable NoSQL database for the [[.NET Framework]] with code-first data model generation. |
|||
|- |
|||
| Cayley || 0.5.0 (March 2016) || [[Apache 2 License|Apache 2]] || [[Go (programming language)|Go]] || An open-source graph inspired by the graph database behind Freebase and Google's Knowledge Graph. |
|||
|- |
|- |
||
| [[DEX (Graph database)|DEX/Sparksee]]<ref name="sparsity-technologies.com#sparksee">http://sparsity-technologies.com#sparksee</ref> || 5.2.0 (2015) || Evaluation, research or development use is free; commercial use is not free || [[C++]] || A high-performance and scalable graph database management system from Sparsity Technologies. Its main characteristics is its query performance for the retrieval & exploration of large networks. Sparksee offers bindings for Java, C++, C#, Python and [[Objective-C]]. [[Mobile database|Sparksee 5 mobile]] is the first graph database for mobile devices. |
| [[DEX (Graph database)|DEX/Sparksee]]<ref name="sparsity-technologies.com#sparksee">http://sparsity-technologies.com#sparksee</ref> || 5.2.0 (2015) || Evaluation, research or development use is free; commercial use is not free || [[C++]] || A high-performance and scalable graph database management system from Sparsity Technologies. Its main characteristics is its query performance for the retrieval & exploration of large networks. Sparksee offers bindings for Java, C++, C#, Python and [[Objective-C]]. [[Mobile database|Sparksee 5 mobile]] is the first graph database for mobile devices. |
||
|- |
|||
|Dgraph |
|||
|0.3 |
|||
|[[Apache License|Apache 2]] |
|||
|[[Go (programming language)|Go]] |
|||
|Dgraph is a scalable, distributed, low latency, high throughput graph database. Dgraph is available under a very liberal Apache License 2.0. |
|||
|- |
|||
| Filament || || [[BSD licenses|BSD]] || [[Java (programming language)|Java]] || A graph persistence framework and associated toolkits based on a navigational query style. |
|||
|- |
|||
| GraphBase || 1.0.03a || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || A customizable, distributed, small-footprint graph store with a rich tool set from FactNexus. |
|||
|- |
|||
| graphd || || [[Proprietary software|Proprietary]] || || The proprietary back-end of [[Freebase]]. |
|||
|- |
|||
| Graph Engine || 1.0 || Office Store Standard Application License (Free) || [[C++]], [[C Sharp (programming language)|C#]] || A distributed, in-memory, large graph processing engine. |
|||
|- |
|||
| Grapholytic || 0.1 || [[Proprietary software|Proprietary]] || || A distributed GraphDB from MIOsoft. |
|||
|- |
|||
| Horton || || [[Proprietary software|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 (programming language)|Java]] || A graph database supporting generalized [[hypergraph]]s where edges can point to other edges. |
|||
|- |
|||
|IBM Graph |
|||
|1.0 (August 2016) |
|||
|[[Proprietary software|Proprietary]] |
|||
|[[Java (programming language)|Java]] |
|||
|A highly available, and fully managed graph database-as-a-service based on the Apache TinkerPop stack and offered through [[Bluemix]] |
|||
|- |
|||
| IBM System G Native Store || v1.0 (July 2014) || [[Proprietary software|Proprietary]] || [[C (programming language)|C]], [[C++]], [[Java (programming language)|Java]] || A high performance graph store using natively implemented graph data structures and primitives for achieving superior efficiency. IBM System G Native Store can handle various simple graphs, property graphs, and RDF graphs, in terms of storage, analytics, and visualization. Native Store is accessible from most programming languages by providing APIs in C++, Java (Tinkerpop/Blueprints), and Python. Its gShell graph command collection and the Native Store REST APIs provide language-free interfaces. |
|||
|- |
|- |
||
| [[InfiniteGraph]] || 3.0 (January 2013) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || A distributed and cloud-enabled commercial product with flexible licensing. |
| [[InfiniteGraph]] || 3.0 (January 2013) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || A distributed and cloud-enabled commercial product with flexible licensing. |
||
|- |
|||
| InfoGrid || 2.9.5 (2011) || [[AGPLv3]], free for small entities<ref>http://infogrid.org/wiki/Docs/License</ref> || [[Java (programming language)|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. |
|||
|- |
|||
| k-infinity || 4.0 (2015) || [[Proprietary software|Proprietary]], free tryout version and demo scenarios || || A semantic graph database which is characterised by its graphical user interface and requires no knowledge of any query language. API is open and based on REST and JSON. Thus it can be easily embedded in existing architectures. |
|||
|- |
|- |
||
| [[MarkLogic]] || 8.0.4 (2015) || [[Proprietary software|Proprietary]], free developer version || [[Java (programming language)|Java]], [[JavaScript]], [[XQuery]] || Multi-model [[NoSQL]] database that stores [[Document-oriented database|documents]] (JSON and XML) and semantic graph data ([[Resource Description Framework|RDF]] triples). MarkLogic also has a built-in search engine and a full-list of enterprise features such as ACID transactions, [[high availability]] and [[disaster recovery]], certified security, and [[scalability]] and [[Elasticity (data store)|elasticity]]. |
| [[MarkLogic]] || 8.0.4 (2015) || [[Proprietary software|Proprietary]], free developer version || [[Java (programming language)|Java]], [[JavaScript]], [[XQuery]] || Multi-model [[NoSQL]] database that stores [[Document-oriented database|documents]] (JSON and XML) and semantic graph data ([[Resource Description Framework|RDF]] triples). MarkLogic also has a built-in search engine and a full-list of enterprise features such as ACID transactions, [[high availability]] and [[disaster recovery]], certified security, and [[scalability]] and [[Elasticity (data store)|elasticity]]. |
||
Line 115: | Line 75: | ||
|- |
|- |
||
| [[Ontotext]] GraphDB || 7|| GraphDB Free is free.<br />GraphDB Standard and GraphDB Enterprise are commercially licensed. || [[Java (programming language)|Java]] || A graph database engine, based fully on Semantic Web standards from W3C: RDF, RDFS, OWL, SPARQL. GraphDB Free is a database engine for small projects. GraphDB Standard is robust standalone database engine. GraphDB Enterprise is a clustered version which offers horizontal scalability and failover support and other enterprise features. |
| [[Ontotext]] GraphDB || 7|| GraphDB Free is free.<br />GraphDB Standard and GraphDB Enterprise are commercially licensed. || [[Java (programming language)|Java]] || A graph database engine, based fully on Semantic Web standards from W3C: RDF, RDFS, OWL, SPARQL. GraphDB Free is a database engine for small projects. GraphDB Standard is robust standalone database engine. GraphDB Enterprise is a clustered version which offers horizontal scalability and failover support and other enterprise features. |
||
|- |
|||
| Orly || (March 2014) || [[Apache 2 License|Apache 2]] || [[C++]] || A highly scalable open source graph database; accessible from most programming languages via its built-in REST [[web API]] interface. |
|||
|- |
|- |
||
| [[OpenLink Software|OpenLink]] [[Virtuoso Universal Server|Virtuoso]] || 7.2.4 (April 2016) || [[GPLv2]] for Open Source Edition. [[Proprietary software|Proprietary]] for Enterprise Edition. || [[C (programming language)|C]], [[C++]] || A hybrid database server handling RDF and other graph data, RDB/SQL data, XML data, filesystem documents/objects, and free text. May be deployed as a local embedded instance (as used in the [[NEPOMUK (framework)|NEPOMUK]] Semantic Desktop), a single-instance network server, or a shared-nothing elastic-cluster multiple-instance networked server.<ref name="Virtuoso Clustering Diagrams">{{cite web |url=http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtClusteringDiagrams |title= Clustering Deployment Architecture Diagrams for Virtuoso (Release 6 and later, Commercial Edition only) |author=OpenLink Software |work=Virtuoso Open-Source Wiki |publisher=[[OpenLink Software]] |accessdate=2014-05-01 }}</ref> |
| [[OpenLink Software|OpenLink]] [[Virtuoso Universal Server|Virtuoso]] || 7.2.4 (April 2016) || [[GPLv2]] for Open Source Edition. [[Proprietary software|Proprietary]] for Enterprise Edition. || [[C (programming language)|C]], [[C++]] || A hybrid database server handling RDF and other graph data, RDB/SQL data, XML data, filesystem documents/objects, and free text. May be deployed as a local embedded instance (as used in the [[NEPOMUK (framework)|NEPOMUK]] Semantic Desktop), a single-instance network server, or a shared-nothing elastic-cluster multiple-instance networked server.<ref name="Virtuoso Clustering Diagrams">{{cite web |url=http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtClusteringDiagrams |title= Clustering Deployment Architecture Diagrams for Virtuoso (Release 6 and later, Commercial Edition only) |author=OpenLink Software |work=Virtuoso Open-Source Wiki |publisher=[[OpenLink Software]] |accessdate=2014-05-01 }}</ref> |
||
|- |
|- |
||
| Oracle Spatial and Graph || 11.2 (2012) || [[Proprietary software|Proprietary]] || [[Java (programming language)|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 Database|Oracle Spatial and Graph (part of Oracle Database]] || 11.2 (2012) || [[Proprietary software|Proprietary]] || [[Java (programming language)|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 software|Proprietary]] || [[Java (programming language)|Java]] || RDF Graph for Oracle NoSQL Database is a feature of Enterprise Edition providing W3C RDF graph capabilities in NoSQL Database. |
| [[Oracle Database|Oracle NoSQL Database (part of Oracle Database]] || 2.0.39 (2013) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || RDF Graph for Oracle NoSQL Database is a feature of Enterprise Edition providing W3C RDF graph capabilities in NoSQL Database. |
||
|- |
|- |
||
| [[OrientDB]] || 2.2.0 (May 2016) || Community Edition is [[Apache 2 License|Apache 2]], Enterprise Edition is commercial || [[Java (programming language)|Java]] || OrientDB is an open source 2nd Generation Distributed Graph Database with the flexibility of Documents in one product (i.e., it is both a graph database and a document nosql database at the same time.) It has an open source commercial friendly (Apache 2) license. It is a highly scalable graph database with full ACID support. It has a multi-master replication and sharding. Supports schema-less, schema-full and schema-mixed modes. Has a strong security profiling system based on user and roles. Supports a query language that is so similar to SQL which is friendly to those coming from a SQL and relational database background decreasing the learning curve needed. It has HTTP REST + [[JSON]] [[API]]. |
| [[OrientDB]] || 2.2.0 (May 2016) || Community Edition is [[Apache 2 License|Apache 2]], Enterprise Edition is commercial || [[Java (programming language)|Java]] || OrientDB is an open source 2nd Generation Distributed Graph Database with the flexibility of Documents in one product (i.e., it is both a graph database and a document nosql database at the same time.) It has an open source commercial friendly (Apache 2) license. It is a highly scalable graph database with full ACID support. It has a multi-master replication and sharding. Supports schema-less, schema-full and schema-mixed modes. Has a strong security profiling system based on user and roles. Supports a query language that is so similar to SQL which is friendly to those coming from a SQL and relational database background decreasing the learning curve needed. It has HTTP REST + [[JSON]] [[API]]. |
||
|- |
|||
| OQGRAPH || || [[GPLv2]] || || A graph computing engine for [[MySQL]], [[MariaDB]] and [[Drizzle (database server)|Drizzle]]. |
|||
|- |
|- |
||
| [[Profium]] Sense || 6.0|| [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || Profium Sense is a contextual content management platform with a built-in triple store. Profium's own reasoning engine supports OWL 2 RL and RDFS and is optimized to manage continuous information streams that require continuous inferencing on-the-fly. Profium architecture is based on an in-memory database with ACID transaction support and supports distributed high-availability deployment. |
| [[Profium]] Sense || 6.0|| [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || Profium Sense is a contextual content management platform with a built-in triple store. Profium's own reasoning engine supports OWL 2 RL and RDFS and is optimized to manage continuous information streams that require continuous inferencing on-the-fly. Profium architecture is based on an in-memory database with ACID transaction support and supports distributed high-availability deployment. |
||
|- |
|||
| R2DF || || || || R2DF framework for ranked path queries over weighted RDF graphs. |
|||
|- |
|||
| ROIS || || [[Freeware]] || [[Modula-2]] || A programmable knowledge server that supports [[Inheritance (computer science)|inheritance]] and [[Transitive relation|transitivity]]. Used in [[OpenGALEN]] as a [[terminology server]]. |
|||
|- |
|- |
||
| [[SAP HANA]] || SPS12 Revision 120 || [[Proprietary software|Proprietary]] || [[C (programming language)|C]], [[C++]], [[Java (programming language)|Java]], [[JavaScript]] & [[SQL]] like language || In-memory ACID transaction supported property graph |
| [[SAP HANA]] || SPS12 Revision 120 || [[Proprietary software|Proprietary]] || [[C (programming language)|C]], [[C++]], [[Java (programming language)|Java]], [[JavaScript]] & [[SQL]] like language || In-memory ACID transaction supported property graph |
||
|- |
|- |
||
| Semblent Lionsgate || v1.0.3 (December 2014) || [[Proprietary software|Proprietary]] || [[JavaScript]] ||A scalable, generic distributed database framework coupled with graph search able to efficiently maintain synchronisation persistently between server side and client side databases via a self-building API. |
|||
|- |
|||
| SPARQLCity || v1.0.95 (October 2014) || [[GPLv3]] || [[C (programming language)|C]], [[C++]] & [[JavaScript]] || SPARQLCity produces SPARQLVerse: A standards and Hadoop based analytic graph engine for performing rich business analytics on structured and semi-structured data. |
|||
|- |
|||
| Sqrrl Enterprise || v1.5.1 (August 2014) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || Distributed, real-time graph database featuring cell-level security and mass-scalability. |
|||
|- |
|||
| [[Stardog]] || v3.1.5 (July 2015) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || Fast, scalable, pure Java [[Semantic Web|semantic]] graph database. |
| [[Stardog]] || v3.1.5 (July 2015) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]] || Fast, scalable, pure Java [[Semantic Web|semantic]] graph database. |
||
|- |
|||
| Teradata Aster || v6 (2013) || [[Proprietary software|Proprietary]] || [[Java (programming language)|Java]], [[SQL]], [[Python (programming language)|Python]], [[C++]], [[R (programming language)|R]] || A high performance, multi-purpose, highly scalable and extensible [[Massive parallel processing|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 || 1.0 (September 2015) || [[Apache 2 License|Apache 2]] || [[Java (programming language)|Java]] || A distributed, real-time, scalable transactional graph database developed by Aurelius. |
|||
|- |
|||
| TripleBit || || || [[C (programming language)|C]], [[C++]] || A centralized RDF store. |
|||
|- |
|||
| VelocityGraph || || Open source with proprietary back-end || [[C Sharp (programming language)|C#]] || High performance, scalable & flexible graph database build with VelocityDB object database. |
|||
|- |
|||
| VertexDB || || [[BSD licenses|Revised BSD]] || [[C (programming language)|C]] || A graph database server that supports automatic garbage collection. |
|||
|- |
|||
| VivaceGraph || 3.0 (December 2014) || [[MIT License]] || [[Common Lisp (programming language)|Common Lisp]] || Pure Common Lisp graph database. |
|||
|- |
|||
| Weaver || 0.2 (April 2015) || [[BSD licenses]] || [[C (programming language)|C]], [[Python (programming language)|Python]] || A fast, scalable, ACID transactional graph database with replication and migration. |
|||
|- |
|||
| WhiteDB || 0.7.0 (October 2013) || [[GPLv3]] and a free commercial licence || [[C (programming language)|C]] || A graph/N-tuples shared memory database library. |
|||
|- |
|||
| OhmDB || 1.0.0 (August 2014) || [[Apache 2 License|Apache 2]] || [[Java (programming language)|Java]] || RDBMS + NoSQL Database for Java. |
|||
|} |
|} |
||
== Features == |
|||
The table below compares the features of the above graph databases. |
|||
{| class="wikitable sortable" |
|||
|- |
|||
! Name !! Graph Model !! API !! Query Methods || Visualizer || Consistency || Backend || Scalability |
|||
|- |
|||
| [[AllegroGraph]] || [[Resource Description Framework|RDF]] || Java, Java:[[Sesame (framework)|Sesame]], JavaJena, Python, Ruby, Perl, C#, Clojure, Lisp, Scala, REST|| SPARQL 1.1, Prolog, JIG, JavaScript|| Gruff - View Graphs, Visual Query Builder for SPARQL and Prolog|| ACID|| Native Graph Storage||1 Trillion RDF triples |
|||
|- |
|||
| ArangoDB || Property graph || JavaScript, Blueprints, REST || Graph Traversals via JavaScript, [[Gremlin (programming language)|Gremlin]] || Built-in graph explorer ||MVCC/ACID ||native C/C++ || Replication and sharding |
|||
|- |
|||
| Blazegraph || [[Resource Description Framework|RDF]] || Java, Sesame, Blueprints, Gremlin, SPARQL, REST || SPARQL, Gremlin || Blazegraph Workbench UI || MVCC/ACID || Native Java || Embedded, Client/Server, High Availability (HA) |
|||
|- |
|||
| Bitsy || Property graph || Blueprints || Gremlin, Pixy || || ACID with optimistic concurrency control || Human-readable JSON-encoded text files with checksums and markers for recovery || |
|||
|- |
|||
| [[DEX (Graph database)|DEX/Sparksee]]<ref name="sparsity-technologies.com#sparksee"/> || Labeled and directed attributed multigraph || [[Java (programming language)|Java]], [[C++]], [[.NET Framework|.NET]], [[Python (programming language)|Python]] || Native Java, C#, Python 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 |
|||
|- |
|||
| Filament || || || || || || || |
|||
|- |
|||
| 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 |
|||
|- |
|||
| Graph Engine || Property graph || [[C Sharp (programming language)|C#]], REST || LINQ, TQL, LIKQ || || Atomicity || Native graph store and processing engine || Graphs with billions of nodes, Microsoft Azure Platform |
|||
|- |
|||
| 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 || || |
|||
|- |
|||
|IBM Graph |
|||
|Property graph |
|||
|HTTP |
|||
|Gremlin, HTTP |
|||
|Built-in Visualizer |
|||
| |
|||
|Apache Cassandra, Elasticsearch |
|||
|Scales seamlessly through cloud platform |
|||
|- |
|||
| IBM System G Native Store || Property graph, RDF* || C++, Java, Python || Native Store gShell, Gremlin, SPARQL || Built-in Visualizer || ACID|| Native Graph Storage|| Both scale-up (using multithreading) and scale-out (using IBM PAMI) |
|||
|- |
|||
| 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; and a parallel, loosely synchronized batch loader || Objectivity/DB on standard filesystems || Distributed & sharded. [[Objectivity/DB]] was first DBMS to store a petabyte of objects |
|||
|- |
|||
| InfoGrid || Dynamically typed, object-oriented graph, multigraphs, semantic models || || || || || || |
|||
|- |
|||
| [[MarkLogic]] || RDF triple store || JavaScript and XQuery Semantics APIs, support for Sesame and Jena APIs || SPARQL 1.1, JavaScript, XQuery || MarkLogic Query Console, and support for visualization tools (e.g., Keylines) and integrates with other more robust tools (Smartlogic, Cambridge Semantics, PoolParty) || ACID || Native graph and document storage || Hundreds of billions of triples and documents using a distributed architecture |
|||
|- |
|||
| [[Neo4j]] || Property graph || Java, Python, JPython, Ruby, JRuby, JavaScript (Node.js), PHP, .NET, Django, Clojure, Spring, Scala, or Bolt+REST (any language) || Cypher (native/preferred), Java Stored Procedures, Native Java APIs (special cases), Traverser API, REST, Blueprints, Gremlin || Data browser included. Supports a variety of 3rd party tools: Gephi, Linkurio.us, Cytoscape, Tom Sawyer, Keylines, etc. || ACID || Native graph storage with native graph processing engine || Horizontal read scaling via master-slave clustering with cache sharding |
|||
|- |
|||
| [[Ontotext]] GraphDB ||RDF Triplestore||Java: Sesame, Jena REST APIs: SPARQL 1.1 Protocol (end-point), SPARQL 1.1 Graph Store HTTP Protocol, Linked Data Platform, SPARQL results in JSON, JSON-LD and all RDF syntaxes || SPARQL 1.1 (full support), Geo-spatial extension of SPARQL, FTS extensions: Lucene, SOLR, [[Elasticsearch]] queries, through GraphDB Connectors || GraphDB Workbench: Explore, SPARQL queries, repository management, cluster management, RelFinder.) || Persistent, synchronous, asynchronous || Native graph storage || Master-slave replication, high-availability clustering || |
|||
|- |
|||
| [[OpenLink Software|OpenLink]] [[Virtuoso Universal Server|Virtuoso]] || RDF graph: Triple & Quad (named graphs); expandable column store || SPARQL, XMLA, ODBC, JDBC, ADO.NET, OLE DB, Jena, Sesame, Virtuoso PL/SQL, Java, Python, Perl, PHP, HTTP, etc. || SPARQL 1.1; SPARQL web service endpoint; SQL; others || Pivot Viewer (Silverlight or HTML5); OpenLink Data Explorer; SPARQL-compliant tools; Apache Jena-based tools; XML & JSON-based tools; SQL based tools || ACID || Internal column-store or row-store (depending on licensure), hybrid RDF/SQL/RDB engine || Infinite via Commercial Edition's Cluster Module elastic cluster functionality; simple master-slave clustering of single-server instances also an option. |
|||
|- |
|||
| 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, Python, JPython, Ruby, JRuby, JavaScript (Node.js), PHP, .NET, Clojure, Spring, Scala, or REST (any language) || Own SQL-like Query Language, REST, Blueprints, Gremlin, SparQL (via Blueprints) || Console and Studio Web tool supporting also graph editor || ACID, MVCC || Custom on disc or in memory || Horizontal read and write scaling via multi-master replication + sharding |
|||
|- |
|||
| OQGRAPH || Property graph || || SQL || || ACID || MySQL, MariaDB || |
|||
|- |
|||
| [[SAP HANA]] || Property graph || ? || Java, JavaScript, SQL like language || Built-in visualizer || ACID, MVCC || Native graph engine based on in-memory columnar store with native algorithms such as neighborhood search, shortest path, strongly connected components and pattern matching<ref>{{Cite web|url=https://www.linkedin.com/pulse/what-new-sap-hana-sps12-ravi-shankar|title=What is New in SAP HANA SPS12|date=2016-05-13|access-date=2016-07-07}}</ref> || ? |
|||
|- |
|||
| Semblent-Lionsgate || Property graph || Python, JavaScript (Node.js), Django, Scala, or REST || Dave (native/preferred), Native Json APIs, REST || Data Browser included, integrates with 3rd party tools. || Fully Consistent and ACID || Native graph storage with native graph processing engine, [[Apache Cassandra]], [[Apache HBase]] ||Distributed server and client side, billions of nodes |
|||
|- |
|||
| Sqrrl Enterprise || Property graph || Thrift, Blueprint || Own SQL-like query language and Java API || Integrates with 3rd party tools || Fully Consistent and ACID (transactions limited to a single graph node) || [[Apache Accumulo]] || Distributed cluster with tens of trillions of edges |
|||
|- |
|||
| [[Stardog]] || [[Resource Description Framework|RDF]] || Java, Sesame, Jena, SNARL, HTTP/REST, Python, Ruby, Node.js, C#, Clojure, Spring|| SPARQL 1.1|| Stardog Web, Pelorus || ACID|| Native Graph Storage|| 50 billion RDF triples on $10,000 server |
|||
|- |
|||
| Titan || Property graph || Java, Blueprints, REST, RexPro binary protocol, Python, Clojure (any language) || Gremlin, SPARQL {{Citation needed|date=October 2014}} || Integrates with 3rd party tools || ACID or Eventually Consistent || [[Apache Cassandra]], [[Apache HBase]], MapR M7 Tables, [[Berkeley DB]], Persistit, [[Hazelcast]] || Distributed cluster (120 billion+ edges) or single server |
|||
|- |
|||
| TripleBit || Labeled direct graph || [[C (programming language)|C]], [[C++]] || SPARQL || || ACID or Eventually Consistent] || Native graph store and processing engine || billion triples |
|||
|- |
|||
| VertexDB || || AJAX API|| JSON || || || || |
|||
|- |
|||
| Weaver || Property graph || [[C (programming language)|C]], [[Python (programming language)|Python]] || Node programs || || ACID || [[HyperDex]] || Automatic replication and migration |
|||
|} |
|||
== Distributed processing == |
|||
* Angrapa - graph package in Hama, a bulk synchronous parallel ([[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. |
|||
* Blazegraph - A RDF/graph database capable of clustered deployment. Blazegraph supports high availability (HA) mode, embedded mode, single server mode and has available commercial licenses. As of version 1.3.1, it supports the Blueprints API and Reification Done Right (RDR). |
|||
* Cyclops - A computing and communication efficient graph processing system with significantly low communication cost. |
|||
* 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 (Scala framework)|Gizzard]] framework for managing Twitter-like graph data (single-hop relationships). |
|||
* 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. |
|||
* Graph Engine - A free distributed, in-memory, large graph processing engine, formerly named Trinity. |
|||
* 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 |
|||
* IBM System G Graph Analytics Toolkit - A comprehensive graph analytics library consisted of network topological analysis tools, graph matching and search tools, and graph path and flow tools. It has been applied to various use cases and industry solutions. |
|||
* Imitator - A reliable distributed graph processing system with replication-based fault-tolerance. |
|||
* InfiniteGraph - a commercially available distributed graph database that supports parallel load and parallel queries. |
|||
* JPregel - In-memory java based Pregel implementation |
|||
* Lionsgate - A distributed, browser-based graph database developed by Semblent. |
|||
* KDT - An open-source distributed graph library with a Python front-end and C++/MPI backend. |
|||
* 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.<ref>http://dl.acm.org/citation.cfm?id=2465369</ref> |
|||
* 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 computing on natural graphs |
|||
* PowerLyra - A distributed graph analytics based on GraphLab using differentiated graph computing and partitioning on skewed (e.g., power-law and bipartite) graphs: dynamically applying different computing and partition strategies for different vertices |
|||
* PowerSwitch - Adaptive prediction and mode switch (sync & aysnc) on graph-parallel computing |
|||
* 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 |
|||
* Parallel Boost Graph Library (PBGL) - a C++ library for graph processing on distributed machines, part of [[Boost (C++ libraries)|Boost]] framework |
|||
* Weaver - A fast and scalable graph store designed specifically for dynamically-changing graphs |
|||
== Shared-memory graph processing == |
|||
* Ligra - A framework for graph processing using shared-memory multicores written in C++ and using Cilk Plus and OpenMP for parallelism |
|||
* Galois - A programming framework that can be used to implement graph algorithms and APIs |
|||
* Polymer - A shared-memory graph processing system using the interface of the Ligra system with optimizations for NUMA machines |
|||
* X-Stream - An edge-centric graph framework that runs in shared-memory and also includes disk-based optimizations |
|||
== GPGPU graph processing == |
|||
* Medusa - A framework for graph processing using [[graphics processing unit]]s (GPUs) on both shared memory and distributed environments; allows users with no GPU programming expertise to leverage GPUs for graph processing |
|||
== APIs and graph query-programming languages == |
== 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. |
|||
* Bulbs – a Python persistence framework for TinkerPop, Gremlin Server, Rexster, Titan, and Neo4j Server. |
|||
* Cypher Query Language – a declarative graph query language for Neo4j that enables ad hoc and programmatic (SQL-like) access to the graph. Spec opened up as [http://www.opencypher.org/ openCypher project]. |
|||
* Dave – a declarative graph query language for Semblent – Lionsgate |
|||
* [[GraphQL]] – Facebook query language for any backend service |
* [[GraphQL]] – Facebook query language for any backend service |
||
* [[Gremlin (programming language)|Gremlin]] – an open-source graph programming language that works over various graph database systems. |
* [[Gremlin (programming language)|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 (programming language)|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. |
|||
* RDFSharp – a .NET API for modeling [[Resource Description Framework|RDF]] graphs, storing them on many SQL databases (Firebird, MySQL, PostgreSQL, SQL Server, SQLite) and querying them with [[SPARQL]]. |
|||
* [[SPARQL]] – a query language for databases, able to retrieve and manipulate data stored in Resource Description Framework format. |
* [[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 ([[Open Database Connectivity|ODBC]], [[Java Database Connectivity|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 (formerly named Pipes.Net) – a dataflow framework for C#/.NET for processing generic and property graphs. |
|||
* Thunderdome – Titan Rexster object-graph mapper for Python. No longer maintained. |
|||
* Mogwai – a Titan Rexster Object-Graph Mapper for Python – Forked from Thunderdome |
|||
* Rexpro-Python – Titan Rexpro connection handler for Python. |
|||
== See also == |
== See also == |
||
* [[Structured storage]] |
* [[Structured storage]] |
||
* [[Object database]] |
* [[Object database]] |
||
* [[Graph transformation]] |
|||
* [[Graph transformation]] for a complementary topic (rule based in memory manipulation of graphs instead of [[Database transaction|transaction]] safe [[Persistence (computer science)|Persistence]]). |
|||
* [[RDF Database]] |
* [[RDF Database]] |
||
==References== |
==References== |
||
{{Reflist}} |
{{Reflist}} |
||
==External links== |
|||
* [http://db-engines.com/en/ranking/graph+dbms DB-Engines Ranking of Graph DBMS] by popularity, updated monthly |
|||
{{Database models}} |
{{Database models}} |
Revision as of 18:04, 27 August 2016
This article possibly contains original research. |
This article relies excessively on references to primary sources. |
This article needs additional citations for verification. |
In computing, a graph database is a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data. A key concept of the system is the graph (or edge or relationship), which directly relates data items in the store. The relationships allow data in the store to be linked together directly, and in most cases retrieved with a single operation. This contrasts with conventional relational databases, where links between data are stored in the data itself, and queries search for this data within the store and use the JOIN concept to collect the related data. Graph databases by design allow simple and rapid retrieval of complex hierarchical structures that are difficult to model in relational systems. Graph databases are similar to 1970s network-model databases in that both represent general graphs, but network-model databases operate at a lower level of abstraction[1] and lack easy traversal over a chain of edges.[2]
The underlying storage mechanism of graph database products varies. Some depend on a relational engine and store the graph data in a table while others use a key-value store or document-oriented database for storage, making them inherently NoSQL structures. Most[according to whom?] graph databases based on non-relational storage engines also add the concept of tags or properties, which are essentially relationships lacking a pointer to another document. This allows data elements to be categorized for easy retrieval en masse.
Retrieving data from a graph database requires new concepts and generally a new query language. As of 2016[update], no other single graph query language has risen to prominence in the same fashion as SQL did for relational databases, and there are a wide variety of systems - most often tightly tied to a particular product. Some standardization efforts have taken place, leading to systems like Gremlin (which works with a variety of graph engines), and the SPARQL system (which has seen some multi-vendor adoption). In addition to having SQL interfaces, some graph databases are accessed through APIs.
Description
Graph databases are based on graph theory. Graph databases employ nodes, edges and properties.
- Nodes represent entities such as people, businesses, accounts, or any other item you might want to keep track of. They are roughly the equivalent of the record, relation or row in a relational database, or the document in a document database.
- Edges, also known as graphs or relationships, are the lines that connect nodes to other nodes; they represent the relationship between them. Meaningful patterns emerge when examining the connections and interconnections of nodes, properties, and edges. Edges are the key concept in graph databases, representing an abstraction that is not directly implemented in other systems.
- 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.
The relational model gathers data together using information in the data itself. For instance, one might look for all the "users" whose phone number contains the area code "311". This would be accomplished by searching selected datastores, or tables, looking in the selected phone number fields for the string "311". This can be a time consuming process in large tables, so relational databases offer the concept of an index which allows data like this to be stored in a smaller sub-table, containing only the selected data and a unique key (or primary key) of the record it is part of. If the phone numbers are indexed, the same search would take place in the smaller index table, gathering the keys of matching records, and then looking in the main data table for the records with those keys. Generally, the tables are physically stored so that lookups on these keys are rapid.[3]
Relational databases do not inherently contain the idea of fixed relationships between records. Instead, related data is linked to each other by storing one record's unique key in another record's data. For instance, a table containing email addresses for users might hold a data item called userpk
, which contains the primary key of the user record it is associated with. In order to link users and their email addresses, the system first looks up the selected user records primary keys, looks for those keys in the userpk
column in the email table (or more likely, an index of them), extracts the email data, and then links the user and email records to make composite records containing all the selected data. This operation, known as a join, can be computationally expensive. Depending on the complexity of the query, the number of joins, and the indexing of the various keys, the system may have to search through multiple tables and indexes, gather up lots of information, and then sort it all to match it together.[3]
In contrast, graph databases directly store the relationships between records. Instead of an email address being found by looking up its user's key in the userpk
column, the user record has a pointer directly to the email address record. That is, having selected a user, the pointer can be followed directly to the email records, there is no need to search the email table to find the matching records. This can eliminate the costly join operations. For instance, if one searches for all of the email addresses for users in area code "311", the engine would first perform a conventional search to find the users in "311", but then retrieve the email addresses by following the links found in those records. A relational database would first find all the users in "311", extract a list of the pk's, perform another search for any records in the email table with those pk's, and link the matching records together. For these types of common operations, a graph database (in theory at least) is significantly faster.[3]
The true value of the graph approach becomes evident when one performs searches that are more than one level deep. For instance, consider a search for users who have "subscribers" (a table linking users to other users) in the "311" area code. In this case a relational database has to first look for all the users with an area code in "311", then look in the subscribers table for any of those users, and then finally look in the users table to retrieve the matching users. In comparison, a graph database would look for all the users in "311", then follow the back-links through the subscriber relationship to find the subscriber users. This avoids several searches, lookups and the memory involved in holding all of the temporary data from multiple records needed to construct the output. Technically, this sort of lookup is completed in O(log(n)) + O(1) time, that is, roughly relative to the logarithm of the size of the data. In comparison, the relational version would be multiple O(log(n)) lookups plus additional time to join all the data.[3]
The relative advantage of graph retrieval grows with the complexity of the query. For instance, one might want to know "that movie about submarines with the actor who was in that movie with that other actor that played the lead in Gone With the Wind". This first requires the system to find the actors in Gone With the Wind, find all the movies they were in, find all the actors in all of those movies who were not the lead in Gone With the Wind, and then find all of the movies they were in, finally filtering that list to those with descriptions containing "submarine". In a relational database this will require several separate searches through the movies and actors tables, doing another search on submarine movies, finding all the actors in those movies, and the comparing the (large) collected results. In comparison, the graph database would simply walk from Gone With the Wind to Clark Gable, gather the links to the movies he has been in, gather the links out of those movies to other actors, and then follow the links out of those actors back to the list of movies. The resulting list of movies can then be searched for "submarine". All of this can be accomplished using a single search.[4]
Properties add another layer of abstraction to this structure that also improves many common queries. Properties are essentially labels that can be applied to any record, or in some cases, edges as well. For instance, one might label Clark Gable as "actor", which would then allow the system to quickly find all the records that are actors, as opposed to director or camera operator. If labels on edges are allowed, one could also label the relationship between Gone With the Wind and Clark Gable as "lead", and by performing a search on people that are "lead" "actor" in the movie Gone With the Wind, the database would produce Vivien Leigh, Olivia de Havilland and Clark Gable. The equivalent SQL query would have to rely on additional data in the table linking people and movies, adding more complexity to the query syntax. These sorts of labels may improve search performance under certain circumstances, but are generally more useful in providing additional semantic data for end users.[4]
Relational databases are very well suited to flat data layouts, where relationships between data is one or two levels deep. For instance, an accounting database might need to look up all the line items for all the invoices for a given customer, a three-join query. Graph databases are aimed at datasets that contain many more links. They are especially well suited to social networking systems, where the "friends" relationship is essentially unbounded. These properties make graph databases naturally suited to types of searches that are increasingly common in online systems, and in big data environments. For this reason, graph databases are becoming very popular for large online systems like Facebook, Google, Twitter and similar systems with deep links between records.
Properties
Compared with relational databases, graph databases are often faster for associative data sets[citation needed] 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).
History
In the pre-history of graph databases, in the mid-1960s Navigational databases such as IBM's IMS supported tree-like structures in its hierarchical model, but the strict tree structure could be circumvented with virtual records.[5][6]
Graph structures could be represented in network model databases from the late 1960s. CODASYL, which had defined COBOL in 1959, defined the Network Database Language in 1969.
Labeled graphs could be represented in graph databases from the mid-1980s, such as the Logical Data Model.[7][1]
A number of improvements to graph databases appeared in the early 1990s, accelerating in the late 1990s with endeavors to index web pages.
In the late 2000s, commercial ACID graph databases such as Oracle Spatial and Graph and Neo4j became available.
In the 2010s, commercial ACID graph databases that could be scaled horizontally became available. SAP HANA additionally brought in-memory and columnar technologies to graph databases.[8] During this time, graph databases of various types have become particularly popular with social network analysis with the advent of social media companies.
List of graph databases
The following is a list of graph databases:
Name | Version | License | Language | Description |
---|---|---|---|---|
AllegroGraph | 5.1 (May 2015) | Proprietary. Clients: Eclipse Public License v1. | C#, C, Common Lisp, Java, Python | An RDF and graph database. |
ArangoDB | 3.0.5 (August 2016) | Apache 2 | C, C++ & JavaScript | A distributed multi-model document store and graph database. Highly scalable supporting ACID and full transaction support. Including a built-in graph explorer. |
DEX/Sparksee[9] | 5.2.0 (2015) | Evaluation, research or development use is free; commercial use is not free | C++ | A high-performance and scalable graph database management system from Sparsity Technologies. Its main characteristics is its query performance for the retrieval & exploration of large networks. Sparksee offers bindings for Java, C++, C#, Python and Objective-C. Sparksee 5 mobile is the first graph database for mobile devices. |
InfiniteGraph | 3.0 (January 2013) | Proprietary | Java | A distributed and cloud-enabled commercial product with flexible licensing. |
MarkLogic | 8.0.4 (2015) | Proprietary, free developer version | Java, JavaScript, XQuery | Multi-model NoSQL database that stores documents (JSON and XML) and semantic graph data (RDF triples). MarkLogic also has a built-in search engine and a full-list of enterprise features such as ACID transactions, high availability and disaster recovery, certified security, and scalability and elasticity. |
Neo4j | 3.0.1
(May 2016) |
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, as well as a proprietary Bolt protocol with official drivers. Neo4j is the most popular graph database in use as of March 2016.[10] |
OpenCog | AGPL | C++, Scheme, Python | Includes a satisfiability modulo theories solver and a unified rule engine for performing both crisp (boolean) logic and probabilistic reasoning. Backed onto Postgres. | |
Ontotext GraphDB | 7 | GraphDB Free is free. GraphDB Standard and GraphDB Enterprise are commercially licensed. |
Java | A graph database engine, based fully on Semantic Web standards from W3C: RDF, RDFS, OWL, SPARQL. GraphDB Free is a database engine for small projects. GraphDB Standard is robust standalone database engine. GraphDB Enterprise is a clustered version which offers horizontal scalability and failover support and other enterprise features. |
OpenLink Virtuoso | 7.2.4 (April 2016) | GPLv2 for Open Source Edition. Proprietary for Enterprise Edition. | C, C++ | A hybrid database server handling RDF and other graph data, RDB/SQL data, XML data, filesystem documents/objects, and free text. May be deployed as a local embedded instance (as used in the NEPOMUK Semantic Desktop), a single-instance network server, or a shared-nothing elastic-cluster multiple-instance networked server.[11] |
Oracle Spatial and Graph (part of Oracle Database | 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 (part of Oracle 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 | 2.2.0 (May 2016) | Community Edition is Apache 2, Enterprise Edition is commercial | Java | OrientDB is an open source 2nd Generation Distributed Graph Database with the flexibility of Documents in one product (i.e., it is both a graph database and a document nosql database at the same time.) It has an open source commercial friendly (Apache 2) license. It is a highly scalable graph database with full ACID support. It has a multi-master replication and sharding. Supports schema-less, schema-full and schema-mixed modes. Has a strong security profiling system based on user and roles. Supports a query language that is so similar to SQL which is friendly to those coming from a SQL and relational database background decreasing the learning curve needed. It has HTTP REST + JSON API. |
Profium Sense | 6.0 | Proprietary | Java | Profium Sense is a contextual content management platform with a built-in triple store. Profium's own reasoning engine supports OWL 2 RL and RDFS and is optimized to manage continuous information streams that require continuous inferencing on-the-fly. Profium architecture is based on an in-memory database with ACID transaction support and supports distributed high-availability deployment. |
SAP HANA | SPS12 Revision 120 | Proprietary | C, C++, Java, JavaScript & SQL like language | In-memory ACID transaction supported property graph |
Stardog | v3.1.5 (July 2015) | Proprietary | Java | Fast, scalable, pure Java semantic graph database. |
APIs and graph query-programming languages
- GraphQL – Facebook query language for any backend service
- Gremlin – an open-source graph programming language that works over various graph database systems.
- SPARQL – a query language for databases, able to retrieve and manipulate data stored in Resource Description Framework format.
See also
References
- ^ a b Angles, Renzo; Gutierrez, Claudio (1 Feb 2008). "Survey of graph database models" (PDF). ACM Computing Surveys. 40 (1). Association for Computing Machinery. doi:10.1145/1322432.1322433. Retrieved 28 May 2016.
network models [...] lack a good abstraction level: it is difficult to separate the db-model from the actual implementation
- ^ Silberschatz, Avi (28 January 2010). Database System Concepts, Sixth Edition (PDF). McGraw-Hill. p. D-29. ISBN 0-07-352332-1.
- ^ a b c d "From Relational to Graph Databases". Neo4j.
- ^ a b "Examples where Graph databases shine: Neo4j edition", ZeroTurnaround
- ^ Silberschatz, Avi (28 January 2010). Database System Concepts, Sixth Edition (PDF). McGraw-Hill. p. E-20. ISBN 0-07-352332-1.
- ^ Parker, Lorraine. "IMS Notes". vcu.edu. Retrieved 31 May 2016.
- ^ Kuper, Gabriel M (1985). he Logical Data Model: A New Approach to Database Logic (PDF) (Ph.D.). Docket STAN-CS-85-1069. Retrieved 31 May 2016.
- ^ "SAP Announces New Capabilities in the Cloud with HANA". 2014-10-22. Retrieved 2016-07-07.
- ^ http://sparsity-technologies.com#sparksee
- ^ DB-Engines Ranking of Graph DBMS
- ^ OpenLink Software. "Clustering Deployment Architecture Diagrams for Virtuoso (Release 6 and later, Commercial Edition only)". Virtuoso Open-Source Wiki. OpenLink Software. Retrieved 2014-05-01.