2018-11-23 graph图数据库概览,经过一个星期的Demo终于看懂了这篇文章20180818图数据库概览

20180818图数据库概览

20180818图数据库概览

朱金华

朱金华

1.总体趋势

Knowledge Base of Relational and NoSQL Database Management Systems​db-engines.com

根据DB-Engines的数据库DB-Engines排名,图数据库一骑绝尘,

图数据库2018-8的最新排名如下

Neo4j仍是最流行的图数据库,图中JanusGraph的排名并不靠前,但要考虑到他是之前很火已经被收购停止发展的titan的fork分支,所以这点加成还是可以算上的。图中与OrientDB趋势基本一致的哪个黑线就是titabDB生前的排名。

CosmosDB/DatastaxStardog/Sqrrl等商业数据库就不做分析了, 本文只对Neo4j、OrientDB、JanusGraph、Giraph、HugeGraph做下分析,其中HugeGraph并不在上面,这是百度开源的图数据库,简单看了下也不错,列在这。

2.图数据库组件

一个完善的图数据系统应该至少包括图存储及图处理引擎,数据导入导出,管理运维,查询和计算,商业化产品需要有高可用及容灾备份。

图存储和图处理:这个是图数据库的核心,图存储负责将关系型数据集非结构化数据转成图结构进行存储,这里的存储可以为原生存储或序列化之后的非原生存储;图处理则负责数据的更新及运算。

数据导入导出:数据从外界到图存储的导入导出能力,如从外界的json、csv,rdf等数据形式导入到图数据库中,或将图数据库中的数据导出来。

管理运维:管理运维则包含系统的监控,配置及可视化能力

查询和计算:主要指提供查询语言供用户进行图的查询遍历等操作。

3.图数据库

【1】Neo4j

是老牌的图数据代表。其功能强大,性能也不错,单节点的服务器可承载上亿级的节点和关系,单节点性能不够时也可进行分布式集群部署。

Neo4j有自己的后端存储,不必如同JanusGraph等一样还要依赖另外的数据库存储。 Neo4j在每个节点中存储了每个边的指针,因而遍历时效率相当高。

Neo4j分为社区版和企业版,社区版功能受限,另外其提供可视化的客户端感觉很不错。

据neo4j的中国合作方的社区中描述,主要区别如下:

1、容量:社区版最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,而企业版没有这个限制;

2、并发:社区版只能部署成单实例,不能做集群。而企业版可以部署成高可用集群或因果集群,从而可以解决高并发量的问题;

3、容灾:由于企业版支持集群,部分实例出故障不会影响整个系统正常运行;

4、热备:社区版只支持冷备份,即需要停止服务后才能进行备份,而企业版支持热备,第一次是全量备份,后续是增量备份;

5、性能:社区版最多用到 4 个内核,而企业能用到全部内核,且对性能做了精心的优化;

6、支持:企业版客户能得到 5X10 电话支持(Neo4j 美国电话、邮件,微云数聚电话、微信、邮件);

考虑到这些限制,要选开源免费大容量分布式的图数据库的可以跳过了,研究图论及小型应用或不差钱的项目则选其的支持服务则另当别论。另外neo4j的协议为GPLv3,这个也不适合选用。

【2】OrientDB

OrientDB据描述性能可以达到Neo4j的数倍,但也有测试表明在遍历时磁盘空间增加,以空间换时间,遍历性能不高,但计算最短路径等性能高。 Neo4J和OrientDB在插入数据时候都会默认建立索引,索引的不同也造成了其不同操作的性能差异; Neo4J:擅长遍历图及不存在大量关系的节点的图计算 OrientDB:侧重文档数据库,主要还是SB树索引导致,空间浪费比较大;插入节点与neo4j差不多,但是在插入节点关系即边时无优化;在图论算法上性能高,但遍历性能低。 OrientDB也有社区版及企业版,但是其基于Apache2.0协议,这个更友好

【3】JanusGraph

Distributed graph database​janusgraph.org

图标

JanusGraph基于Titan发展而来,包含其所有功能,采用Tikerpop的Gremlin图查询语言,

有单独的后端存储,支持Cassandra/HBase/BerkeleyDB等做存储,支持Solr/ES/Lucence等做图索引 支持Spark GraphX/Giraph等图分析计算引擎及Hadoop分布式计算框架 原生支持集成了Tinkerpop系列组件:Gremlin查询语言,Gremlin-Server及Gremlin applications。 采用很友好的Apache2.0协议,支持对接可视化组件如Cytoscape, plugin for Apache TinkerPop,GraphexpKeyLines by Cambridge IntelligenceLinkurious

【4】HugeGraph

王二铁:百度安全开源大规模图数据库HugeGraph​zhuanlan.zhihu.com

图标

HugeGraph是支持Apache TinkerPop 3框架和Gremlin图查询语言的大型分布式图数据库,据其描述其性能是相当强劲,刚开源不久。不过貌似每个都说自己是最好最强的...

HugeGraph是一款面向分析型,支持批量操作的图数据库系统,它能够与大数据平台无缝集成,有效解决海量图数据的存储、查询和关联分析需求。HugeGraph支持HBase和Cassandra等常见的分布式系统作为其存储引擎来实现水平扩展。HugeGraph可以与Spark GraphX进行链接,借助Spark GraphX图分析算法(如PageRank、Connected Components、Triangle Count等)对HugeGraph的数据进行分析挖掘。 HugeGraph的主要特点包括: 基于TinkerPop 3 API实现,支持Gremlin图查询语言; 拥有完善的周边工具链和相关功能组件,可以满足图数据库开发的基本需求,提供易用高效的使用体验; 具备独立的Schema管理模块,丰富完善的Schema校验机制,确保图数据库中的数据完整性和一致性; 支持数据的备份和还原,可以在不同的后端存储之间转换; 多种ID生成策略应对不同业务场景,拥有完善的索引管理机制,支持多种索引查询操作; 可以实现与Hadoop、Spark、HBase、ES等大数据系统集成,支持多种Bulk Load操作,实现海量数据快速插入; 除上述特定之外,HugeGraph还针对图数据库的高频应用(例如:ShortestPath、k-out、k-neighbor等)做了特定性能优化,并且为用户提供更为高效的使用体验

我的感觉是跟titan/JanusGraph蛮像的

看其致谢果不其然,不过里面还是蛮多创新及扩展的,如果他能持续的接纳Janus和DataStax的新特性并长久发展的话用这个倒是不错。

HugeGraph relies on theTinkerPopframework, we refer to the storage structure ofJanusGraphand the schema definition ofDataStax. Thanks to Tinkerpop, thanks to JanusGraph and Titan, thanks to DataStax. Thanks to all other organizations or authors who contributed to the project.

3.图分析系统

上面简单介绍了几个图数据库,也提到其后端存储,neo4j等使用自己的原生图存储,而JanusGraph/HugeGraph等则用非原生图存储。

原生图存储一般都是经过专门为了存储和管理图结构而优化的,遍历查询性能很高,但掐非遍历类的查询则不占优势,且为了全局搜索还会占用大量内存。

非原生图存储通常将图结构序列化存储到RDBMS或其他通用存储中,如JanusGraph的HBase/Cassandra,HugeGraph甚至增加了对MySQL等的支持。

一个图分析系统除了图数据库外还要有图计算引擎,主要目的是为了进行除遍历外的图算法分析。前述的图数据库相当于OLTP,而图计算则相当于OLAP。有的图数据库也继承了少量的图计算能力,但真正的大型系统还是需要单独的计算框架。

基于图的并行计算框架,有google的Pregel,基于Spark的GraphX,Apache下的Giraph/HAMA以及GraphLab,其中Giraph是Pregel的开源实现。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师历程

7、重构单体为微服务

本书主要介绍如何使用微服务构建应用程序,这是本书的第七章,也是最后一章。第一章介绍了微服务架构模式,讨论了使用微服务的优点与缺点。随后的章节讨论了微服务架构的方...

1563
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–项目装配(240)-24期末结算

为进行获利分析结算生产订单及项目 在此活动中,为物料S240-1和项目执行工厂的期末财务会计核算。 成本和收入只是暂时地收集在订单和项目中,在期末处理的时候这些...

4158
来自专栏古时的风筝

为什么你在群里提的技术问题没人回答?

作为一个程序员,把代码写好是本分,但仅仅是写好代码是不够的,工作的过程中总免不了要与别人打交道。几乎隔一段时间,我就会发现有些人身上出现下面的这两个问题。第一个...

1232
来自专栏码匠的流水账

2017年终总结

又到了写年终总结的时候了。每当这个时候思绪总是翻江倒海,因为太久没有反思和总结的缘故,一年才总结一次,确实是有点久,欠的账的太多,梳理起来有点费劲。这里依旧还是...

2821
来自专栏Laoqi's Linux运维专列

缓存技术PK:选择Memcached还是Redis?

6206
来自专栏Java架构师进阶

成为一名Java高级架构师到底需要学习哪些技术?

工作1-5年,当我们向老板提出加薪的时候,或者跳槽去“捡”offer的时候,我们底气够吗?

832
来自专栏熊二哥

NOSQL快速入门

NoSql是一个很老的概念了,但对自己来说,仍然是一个短板,果断补上。 ? 首先通过几个简单的例子来了解NOSQL在国内的情况(2013年左右的数据,有些过时...

2525
来自专栏成猿之路

Java的常用开发工具

java常用的开发工具。都说工欲善其事必先利其器,要想学好java这门语言,选择一款好用顺手的开发工具是必不可少的。另外面试java工作时开发工具的使用也是一个...

6362
来自专栏架构师小秘圈

有经验的程序员应该如何提升自己

工作1-5年,当我们向老板提出加薪的时候,或者跳槽去“捡”offer的时候,我们底气够吗? 敢不敢不给涨薪,就“挥一挥衣袖,不带走一个bug”?是不是提出要求后...

3635
来自专栏zhisheng

具有一到五年开发经验的程序员该如何提升自己?

敢不敢不给涨薪就“挥一挥衣袖,不带走一个bug”?是不是提出要求后你的主管、经理立刻

1302

扫码关注云+社区

领取腾讯云代金券