背景
关系型数据库自上世纪80年代以来一直都是数据库领域发展的主力,随着社交、物联网、金融、电商等领域的快速发展,由此产生的数据规模和数据间的关系复杂度呈现指数级的增长,而传统的关系型数据库在处理复杂关系的数据上表现很差,这是因为关系型数据库是通过外键索引来实现多表之间的关系引用的,查询实体之间的关系需要JOIN操作,而JOIN操作通常非常耗时,因此我们需要一种新的数据组织和查询方式,帮助我们高效精准的处理复杂关系数据。
什么是图数据库
图数据库(graph database,GDB)是一个使用图结构进行语义查询的数据库,原始设计动机就是更好地描述实体之间的关系,它使用节点、边和属性来表示和存储数据,它与关系型数据库最大的不同就是免索引邻接。
基本概念:
- 节点(顶点) - 图的节点,对应现实世界中的某一类实体,比如人、学校、毕业证书等
- 关系(边) - 实体之间的关联关系,带有方向性。比如小明住在北京,是一条人员小明指向城市「北京」的关联关系
- 属性 - 用来存储节点或者关系的key/value对(在图中,关系和节点一样,都是一等公民,拥有属性和标签)
- 标签 - 能将类似的节点归类的特征,可以理解为面向对象变成中的类名(也算是一种特殊的属性)
图中的每个节点都会维护与它相邻节点的关系,关系和节点一样,是图的一等公民。图数据库执行查询的耗时与整体数据规模无关,与节点中的邻点数相关,这使得图数据库在处理大量复杂关系时也能保持良好的性能。
另外,图的结构决定了其易于扩展的特性,不必在模型设计之初就把所有的细节都考虑到,可以在后续增加新的节点、关系、属性、标签等,且不会破坏已有的查询和功能。
应用场景
从技术角度出发,图数据库的运用是针对解决数据的高度关联带来的随机访问问题;从业务角度出发,图的价值在融合数据、技术、通过数据的关联产生高维认知。
目前图数据在行业内的主要应用场景包括:社交网络、物流管理、商品推荐、诈骗检测、金融风控、知识图谱、IT基础设施运维监控、人工智能、数据隐私及安全、生物科学等
行业发展现状
通过https://db-engines.com/ 上的数据库热度数据观察,目前热度最高的图数据库是neo4j,并且在所有数据库中排名第 19 位,它可以说是目前使用最广、用户最多、商业化最好的图数据库。
另外其他图数据库中热度较高的包括阿里云GDB、JanusGraph、TigerGraph、Dgraph、Giraph、Nebula Graph等
Neo4j
官方网址:https://neo4j.com/
Neo4j提供一整套的图数据解决方案,包括图数据库、依托云的数据库管理、可视化方案、OpenApi.
优势
- 在创建节点的时候就已经把关系给建立起来,避免了在复杂查询场景下的处理
- 由于底层直接以图的形式存储节点和关系,在查询的时候可以使时间复杂度保持在常数级别。
- 基于JVM实现
- 提供一套易于理解的查询语言Cypher以及内置的可视化UI
- 很好的支持ACID,有事务机制
阿里云GDB
官方网址:https://cn.aliyun.com/product/gdb
图数据库(Graph Database, 简称GDB)是阿里云自主研发、自主可控的图数据库产品,经历阿里巴巴集团内丰富的应用场景打磨,具备行业最佳实践经验。是基于图技术的行业多元异构数据的融合、分析、决策引擎,是知识图谱的最佳底座。
优势
- 支持标准图查询语言(Gremlin和Cypher),能够兼容市面主流图查询产品,降低开发门槛
- 实时在线,即时处理海量数据,分析洞察数据价值,可通过只读节点水平扩展并发查询性能
- 灵活架构,支持Schema free,满足更灵活多变的数据架构调整需求
- 自动建立索引,优化查询效率的同时更易维护
- GDB通过自动建立索引优化超级顶点的查询性能
- 原生支持对接自动机器学习平台,通过AI算法洞察关系数据规律,产生智能决策
图数据库查询语言
目前图数据库领域的主流查询语言主要有两种:Neo4j支持的Cypher Query Language,以及Apache顶级项目TinkerPop支持的Gremlin。
Cypher Query Language
Gremlin
Apache TinkerPop作为Apache的顶级项目之一,是面向在线事务处理(OLTP)图数据库和在线分析处理(OLAP)图系统的一款图计算框架。TinkerPop可以应用于不同图数据库的抽象层,通过提供通用的API和工具,使开发人员可以基于不同图数据库轻松创建图形应用程序,避免应用程序与特定数据库高度依赖。
Gremlin是一由Apache TinkerPop提供支持的图查询语言,License为开源的Apache License Version 2.0。Gremlin和传统SQL有明显区别,是一种函数式、面向数据流的查询语言,使用户可以更为直接地控制和表达图查询的复杂逻辑。Gremlin包含一个宽松的DSL规范描述,以及基于Java/Groovy的开源实现。
每个Gremlin遍历由一系列步骤(可能存在嵌套)组成,每一步都在数据流(data stream)上执行一个原子操作。
具体用法可查询:http://tinkerpop-gremlin.cn/
参考文章
https://github.com/alibaba/graphscope
https://db-engines.com/en/ranking_trend/graph+dbms
手把手教你快速入门知识图谱 - Neo4J教程
TinkerPop简述