图数据库

<image>

在计算机科学中，图数据库（graph database，GDB）是一个使用图结构进行语义查询的数据库，它使用节点、边和属性来表示和存储数据。该系统的关键概念是图，它直接将存储中的数据项，与数据节点和节点间表示关系的边的集合相关联。这些关系允许直接将存储区中的数据链接在一起，并且在许多情况下，可以通过一个操作进行检索。图数据库将数据之间的关系作为优先级。查询图数据库中的关系很快，因为它们永久存储在数据库本身中。可以使用图数据库直观地显示关系，使其对于高度互连的数据非常有用。

图数据库是一种非关系型数据库，以解决现有关系数据库的局限性。图模型明确地列出了数据节点之间的依赖关系，而关系模型和其他NoSQL数据库模型则通过隐式连接来链接数据。图数据库从设计上，就是可以简单快速地检索难以在关系系统中建模的复杂层次结构的。图数据库与20世纪70年代的网络模型数据库相似，它们都表示一般的图，但是网络模型数据库在较低的抽象层次上运行，并且不能轻松遍历一系列边。

图数据库的底层存储机制可能各有不同。有些依赖于关系引擎并将图数据“存储”到表中（虽然表是一个逻辑元素，但是这种方法在图数据库、图数据库管理系统和实际存储数据的物理设备之间施加了另一层抽象）。另一些则使用键值存储或文件导向的数据库进行存储，使它们具有固有的NoSQL结构。大多数基于非关系存储引擎的图数据库还添加了标记或属性的概念，这些标记或属性本质上是具有指向另一个文档的指针的关系。这样就可以对数据元素进行分类，以便于集中检索。

从图数据库中检索数据需要SQL之外的查询语言，SQL是为了处理关系系统中的数据而设计的，因此无法“优雅地”处理遍历图。没有一个像SQL那样通用的图查询语言，通常都是仅限与一个产品的。不过，已经有一些标准化的工作，使得Gremlin、SPARQL和Cypher成为了多供应商查询语言。除了具有查询语言接口外，还可以通过应用程序接口（API）访问一些图数据库。

图数据库与图计算引擎不同。图数据库是转换关系OLTP数据库的技术。而图计算引擎在OLAP中用于批量分析。由于主要技术公司在使用专有图数据库方面的成功以及开源图数据库的引入，图数据库在2000年代引起了相当大的关注。

## 图数据库列表

以下是值得关注的图形数据库列表：

名称｜版本｜许可证｜语言｜描述

AllegroGraph｜5.1 (2015-05)｜专有, 客户端: Eclipse公共许可证 v1｜C♯, C, Common Lisp, Java, Python｜资源描述框架（RDF）和图数据库

Amazon Neptune｜1.0.1.0.200237.0 (2018-09)｜专有｜未披露｜Amazon Neptune 是亚马逊公司完全托管的图数据库。它被用作web服务，是亚马逊云计算服务的一部分。支持流行的图形模型属性图和W3C的RDF，以及它们各自的查询语言 Apache TinkerPop Gremlin和SPARQL。

AnzoGraph｜4.0 (2018-02)｜专有｜C, C++｜AnzoGraph是一个大规模并行原生图GOLAP（图形在线分析处理）样式数据库，用于支持复杂的SPARQL连接查询和分析数万亿个关系。AnzoGraph 被设计用于交互式分析广泛的RDF数据，这些数据在数周或数年的交易中累积，可能来自许多不同的GOLTP和其他数据库来源。

ArangoDB｜3.3.11 (2018-06-28)｜自由 Apache 2, Proprietary,｜C++, JavaScript, .NET, Java, Python, Node.js, PHP, Scala, Go, Ruby, Elixir｜由triAGENS GmbH开发的NoSQL原生多模型数据库系统。数据库系统支持三个重要的数据模型（键/值、文档、图形）、一个数据库核心和一个统一的查询语言AQL（ArangoDB查询语言）

DataStax Enterprise Graph｜v6.0.1 (2018-06)｜专有｜Java｜分布式、实时、可扩展的数据库，支持Tinkerpop并与Cassandra集成

HugeGraph｜ v0.10.4 （2019-11-08）｜Apache 2｜Java, Gremlin, Python｜ 百度开源的分布式图数据库。支持标准的Apache Tinkerpop Gremlin图查询语言，支持属性图，可支持千亿级规模关系数据；支持多种后端存储（Cassandra，HBase，RocksDB，MySQL，PostgreSQL，ScyllaDB）；支持各类索引（二级索引、范围索引、全文索引、联合索引，均无需依赖第三方索引库）；提供可视化的Web界面，可用于图建模、数据导入、图分析；提供导入工具支持从多种数据源中导入数据到图中，支持的数据源包括：CSV、HDFS、关系型数据库（MySQL、Oracle、SQL Server、PostgreSQL）；支持REST接口，并提供10+种通用的图算法；支持与Hadoop、Spark GraphX等大数据系统集成。

InfiniteGraph｜3.0 (2013-01)｜专有, commercial｜Java｜分布式，支持云

JanusGraph｜0.6.1 (2022-01-18)｜Apache 2｜Java｜开源、可扩展、在Linux基金会下的分布式图数据库；支持各种存储后端（Cassandra，HBase，Bigtable，BerkeleyDB）；通过与大数据平台（Spark、Giraph、Hadoop）的集成支持全局图数据分析、报告和ETL；通过外部索引存储支持地理、数字范围和全文检索（ElasticSearch、Solr、Lucene）。

MarkLogic｜8.0.4 (2015)｜专有, 免费软件开发者版｜Java｜存储文档（JSON和XML）和语义图数据（RDF三元组）的多模型NoSQL数据库；还具有内置的搜索引擎和企业功能，如ACID交易。

Microsoft SQL Server 2017｜RC1｜专有｜SQL/T-SQL, R, Python｜提供图数据库功能以模拟多对多关系，图关系已集成到Transact-SQL中，并使用SQL Server作为基础数据库管理系统。

Neo4j｜3.3.5 (2018-04)｜GPLv3 社区版，商业 & AGPLv3 企业和高级版｜Java, .NET, JavaScript, Python, Ruby｜开源，支持ACID，具有用于企业部署的高可用性集群，并附带基于Web的管理工具，包括完整事务支持和可视节点链接图浏览器；可以使用其内置的REST Web API接口从大多数编程语言访问，以及使用官方驱动程序的专有Bolt协议；最受欢迎的图数据库。

Nebula Graph｜2.0.0 pre （2020-08）｜Apache 2｜C++, nGQL｜ 开源的分布式图数据库。属性图建模，可支持万亿级别的关联关系，并支持 RocksDB 后端存储

OpenLink Virtuoso｜8.2 (2018-10)｜开源版本 GPLv2, 企业版本 proprietary｜C, C++｜安全且高性能的多模型（混合）关系数据库管理系统（RDBMS），支持SQL和SPARQL，用于对建模为SQL表和/或RDF图的数据进行声明（数据定义和数据操作）操作。还支持从多种文档类型（包括CSV，XML和JSON）索引RDF-Turtle，RDF-N-Triples，RDF-XML，JSON-LD以及映射和生成关系（SQL表或RDF图）。可以部署为本地或嵌入式实例（在NEPOMUK语义桌面中使用），单实例网络服务器或无共享弹性集群多实例网络服务器

Oracle Spatial and Graph; Oracle数据库的一部分｜12.1.0.2 (2014)｜专有｜Java, PL/SQL｜1）RDF语义图：Oracle数据库中全面的W3C RDF图管理，具有本机推理和三级标签安全性；2）网络数据模型属性图：用于具有持久存储的物理/逻辑网络和用于内存中图形分析的Java API

OrientDB｜2.2.24 (2017-07)｜社区版 Apache 2, 企业版 商业｜Java｜第二代分布式图形数据库，具有灵活性（即它同时是图数据库和文档数据库）；在开源Apache 2许可下获得许可；拥有完整的ACID支持；它有一个多主复制和分片；支持无结构模式、全模式和混合模式；有一个基于用户和角色的安全性分析系统；支持类似于SQL的查询语言；有HTTP REST + JSON API。

SAP HANA｜SPS12 Revision 120｜专有｜C, C++, Java, JavaScript & SQL｜内存中的ACID事务；支持属性图

Sparksee｜5.2.0 (2015)｜专有, 商业, 免费软件 用于评估、研究和开发｜C++｜来自Sparsity Technologies的高性能可扩展数据库管理系统；主要特征是检索和探索大型网络的查询性能；具有Java，C ++，C＃，Python和Objective-C的绑定; 版本5是第一个图移动数据库

Sqrrl Enterprise｜2.0 (2015-02)｜专有｜Java｜分布式实时图形数据库，具有单元级安全性和大规模可扩展性

Teradata Aster｜7 (2016)｜专有｜Java, SQL, Python, C++, R｜大规模并行数据库，包含支持原生SQL、MapReduce和Graph数据存储和操作的专利引擎; 提供一组分析函数库和数据可视化功能