NoSQL数据库分为四种类型,分别是:
键值(key/value)数据库
列存储数据库
文档型数据库
图数据库
上图就是db-engines.com对从2013年来所有数据库种类发展趋势的分析结果如图展示。图(Graph)是非常强大的工具,因为它们通过以简洁的形式表示数据关系,帮助商业世界和其他机构中的人们理解数据集。有了合适的图数据库,企业可以以关系图的形式可视化数据,并对其进行管理,以提高整体效能。比起传统数据库的数据存储,图数据库能够清晰的展现点与点之间的关系。许多组织之所以接受图数据库,是因为越来越多的行业认识到这种数据库技术的重要性,尤其在复杂的场景下,如物流,金融风控,社交网络管理,媒体传播分析等行业正在发挥不可或缺的作用。
图数据库是分析数据间关联的最佳技术
图数据库对于可以在不同场景下发挥作用,从企业应用角度,业务用户使用角度,数据开发者应用角度都发挥着作用。
图数据库对于可以在不同场景下发挥作用,从企业应用角度,业务用户使用角度,数据开发者应用角度都发挥着作用。
图数据库产品
依据db-engines.com网站对Graph DBMS的排名来看,目前主流的图数据库有:Neo4j,Janusgraph,Dgraph,ArangoDB,OrientDB,TigerGraph等。下面我们来介绍一下目前图数据库的分类都有哪些。
图数据库分类
原生数据库:
代表数据库为neo4j、orientdb。其原生体现在查点到边或者边到点的时候,不需要走原来关系型数据库的B+索引,节点本身就有指向索引,类似于链表的指针概念
直接在关系型数据库之上构建的图数据库:
代表为AgensGraph,以及微软的GraphView。SparkGraphX也可以基于关系型存储结构进行转化成图结构,然后完成图运算
使用外置nosql存储的数据库:
以Titan/JanusGraph为代表,以及使用外置的索引生成工具如Elasticsearch,OLAP支持外接Spark等工具,以及Cassandra/Hbase等nosql数据库。
在图计算上基于batch进行优化的新一代图数据库:
如DGraph。DGraph的存储结构与cayley同样借鉴了google的论文,将每个节点的属性也作为一个节点与主节点产生联系,这样更有益于基于batch来设计运算方法。
Neo4j
Neo4j图数据库,它是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
优势:
可集群,使用读/写负载平衡器将请求直接到一个集群
支持事物、锁、页面缓存
遍历下:建立索引通常成本O(log(n)),但Neo4J的遍历一个关系的复杂度趋向于O(1)
支持ACID事务,它确保实时显示数据的合法性和准确性。
Cypher语法友好
劣势:
Neo4j没法存储巨大的一张关系图 ,因为他不支持分片
因为index-free adjacency,遍历快但是计算随机两个节点最短路径性能不佳
索引:
index-free adjacency,擅长遍历图,以及计算不存在大量关系的节点的图
ArangoDB
ArangoDB图数据库,它是一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。基于其本地集成多模型特性,您可以搭建高性能程序,并且这三种数据模型均支持水平扩展。
优势:
存储空间占用下:采用了元数据模式存储数据;可通过内存提速,CPU占用率低
支持主从集群
Multi-collection transactions
扩展性好:JavaScript
用JavaScript和ArangoDB构建应用,Foxx微服务运行在DB内部,可快速访问数据。
AQL功能很强大,配置编程远方便于、灵活于Neo4J、OrientDB
Neo4J的Cypher也比较强大,清晰,但是不利于调整,灵活性不够
OrientDB,类SQL,查询繁琐,调整不便利,内置SQL函数接口也不方便
劣势:
插入性能稍低
索引:
自动索引_key属性,_from和_to属性;保证V和E的查找速度
OrientDB
OrientDB是指兼具文档数据库的灵活性和图形数据库管理链接能力的可深层次扩展的文档-图形数据库管理系统。
优势:
安装简单,功能丰富
OrientDB是兼具文档数据库的灵活性和图形数据库管理链接能力的可深层次扩展的文档-图形数据库管理系统(NoSQL数据库)
可选无模式、全模式或混合模式下。支持许多高级特性,诸如ACID事务、快速索引,原生和SQL查询功能
可以JSON格式导入、导出文档
若不执行昂贵的JOIN操作的话,如同关系数据库可在几毫秒内可检索数以百计的链接文档图
劣势:
坑很多
性能和可扩展性不好
索引:
侧重文档数据库,主要还是SB树索引导致,空间浪费比较大;插入节点与另外两个数据库(neo4j和ArangoDB)相差无几,但是在插入关系中另外两个数据库都做了优化,OrientDB无优化,就挂了;在图论计算力上性能优异,但是在遍历中还是优化不够,被甩开。
JanusGraph
开源 JanusGraph是一个可扩展的图数据库,可以把包含数千亿个顶点和边的图存储在多机集群上。它支持事务,支持数千用户实时、并发访问存储在其中的图。
优势:
分布式部署,因此,支持集群
可以存储大图,比如包含数千亿Vertices和edges的图
支持数千用户实时、并发访问。
集群节点可以线性扩展,以支持更大的图和更多的并发访问用户。
数据分布式存储,并且每一份数据都有多个副本,因此,有更好的计算性能和容错性。
支持在多个数据中心做高可用,支持热备份。
通过集成大数据平台,比如Apache Spark、Apache Giraph、Apache Hadoop等,支持全局图数据分析、报表、ETL
集成ElasticSearch、Apache Solr、Apache Lucene等系统后,可以支持全文搜索
在计算层上可使用Spark做计算,这点优于Neo4j和OrientDB
即可OLAP也可OLTP,可以执行批处理和实时处理
开源,基于Apache 2 Licence
支持各种后端存储系统,目前标准支持以下四种,当然也可以增加第三方的存储系统:
Apache Cassandra
Apache HBase
Google Cloud Bigtable
Oracle BerkeleyDB