我们可以将图数据库系统的应用领域划分成以下两部分:
1、用于联机事务图的持久化技术(通常直接实时地从应用程序中访问)。这类技术被称为图数据库,它们和“通常的”关系型数据库世界中的联机事务处理(Online Transactional Processing,OLTP)数据库是一样的。
2、用于离线图分析的技术(通常都是按照一系列步骤执行)。这类技术被称为图计算引擎。它们可以和其他大数据分析技术看做一类,如数据挖掘和联机分析处理(Online Analytical Processing,OLAP)
图计算OLAP引擎: 解决图算法/社区发现等大规模迭代计算的问题。
针对其中的图算法/计算模块, 我们调研了各种低成本或者性能比较高的图计算引擎和我们现在用的引擎做了对比。以下是对比数据:
图计算引擎 | 适合处理的数据量级 | 适合处理的计算类型 | 性能数据 | 优势 | 劣势 |
单机全内存图计算引擎(GraphMat, Polymer) | <1000w 点/边 | 1-3度遍历计算以及简单算法(PageRank, 联通) | 1000w点/边 遍历2度: 5min之内 PageRank: 15min之内 | 对于多核CPU优化, 采用稀疏矩阵的表达, 充分节约内存, 能够在单机上面进行快速的计算。 | 开源版本: 扩展性/稳定性需要进一步验证, 源码已经在3年无更新。 |
单机内存+磁盘图计算引擎(GraphChi, TurboGraph) | >=1000w 点/边, < 1亿点/边, 磁盘足够可以承受10亿图, 但是性能会有大幅度下降。 | 1-3度遍历计算以及简单算法(PageRank, 联通) | 1亿点/边 遍历2度: 10min之内 1亿点/边 PageRank: 20min之内 | 采用分页方式分割图, 使用shard的数据额结构来存储点/边, 利用并行滑动窗口(PSW)来对于实现最大的顺序读写能力。可以在单机上面承受更大的图 | 开源版本: 扩展性/稳定性需要进一步验证, 源码已经在3年无更新。 |
分布式内存图计算引擎(Spark GraphX, Flink Gelly) | > 5000w 点/边, < 10亿 点/边, 按道理说可以存放更多的点/边, 只是性能会有下降。 | 图遍历计算, 图基本算法, 图的社区发现算法(Louvain, LPA) | 4亿点/边运行: Louvain, 20min~30min能够完成 | 利用BSP模型来实现图遍历, 上下游链路打通, 架构统一。 | 资源要求比较大。 |
分布式内存图计算引擎 (Jaguar) | >1亿的点/边, 适合处理大数据量的点/边 | 图遍历计算, 图基本算法, 图的社区发现算法(Louvain, LPA等) |
| 做了很多性能优化方案 |
|
|
|
|
|
|
|
根据列表已经可以看到各种优劣势, 我们的首选倾向于:
单机图计算引擎: GraphChi/TurboGraph
分布式图计算引擎: Spark GraphX, Flink Gelly
图语言
1、图数据库有2个最具代表性的查询语言:Cypher 及 Gremlin。Cypher是商业公司Neo4j出品,Neo4j图数据库在2007年发布了第一个版本,是商用图数据库领域的开拓者。Gremlin是Apache TinkerPop框架下规范的语言,TinkerPop属于当前图数据库领域最流行的框架规范,具备开源开放、功能丰富、生态完善等特点,拥有大量厂商支持(超过20家)
图数据库OLTP对比
图数据库选型对比:HugeGraph、JanusGraph、Neo4j:https://blog.csdn.net/hellohiworld/article/details/104824764
数据库名称 | 是否开源 | 支持分布式 | 是否支持事务 | 特点 | 点边量 | 可视化 | 地址 |
Titan | 现已经不维护,后继产品为:JanusGraph:JanusGraph是Titan 1.0.0版本的延续,JanusGraph继承了Titan的全部功能并做了进一步的改进,并支持Hadoop 2和Tinkerpop 3.2.3,采用gremlin图查询语言 | ||||||
Neo4j | 是 | 否 | 是 | 单机性能明显,企业版是集群模式(非分布式) | 千万、亿级单机存储 | 自带可视化 | |
OrientDB | |||||||
JanusGraph | 是 | 是 | 是 | 1、边具备多样性(如多对多(明细边)、多对一(多入边单出边)、一对多、一对一) 2、支持数千用户实时、并发访问 3、支持各种后端存储系统 - Apache Cassandra® 4、通过集成大数据平台,比如Apache Spark、Apache Giraph、Apache Hadoop等,支持全局图数据分析、报表、ETL 5、集成ElasticSearch、Apache Solr、Apache Lucene等系统后,可以支持全文搜索。 6、原生集成Apache TinkerPop图技术栈,包括Gremlin graph query language、Gremlin graph server、Gremin applications | 数千亿顶点和边多机集群存储 | 通过使用以下系统可以可视化存储在JanusGraph中的图数据: - Cytoscape - Gephi plugin for Apache TinkerPop - Graphexp - KeyLines by Cambridge Intelligence - Linkurious |
|
HugeGraph | 百度基于JanusGraph开源了HugeGraph,功能支持健最齐全,导入组件支持各种数据源。可视化操作组件 hubble 支持功能齐全,存储后端引擎支持宽泛,能和相关的数据库搭配使用,更适合刚上手的用户。整体上常用算法都进行封装过,易用性强。有HA组件支持灾备,事务方面的支持较弱,但是专业功能收费 | ||||||
Trinity | |||||||
TigerGraph | TigerGraph将普通数据库归为第一第二代,自己为第三代,“TigerGraph是非常完备和优化的图数据库平台,支持大规模图存储以及大规模图的运行处理,具有非常强大的查询语言和算法库”。TigerGraph没有开源,开发者版支持单机单用户单图非商业免费,不支持DynamicSchemaChange等,图创建好之后也能通过界面手工去修改或添加,除非DropAll。TG的GSQL是类sql的语言,表达能力挺强,其将编写的query直接安装发布为restapi的形式让我感到很惊艳。目前TigerGraph的生态不是很全,编程api等能力也有一定限制,但值得尝试 | tigergraph自己的测试报告性能是很强劲的针对twitter的大图数据库,只有tigergraph完成了6度关系查询 | |||||
ArangoDB |