多读书多实践,勤思考善领悟

图数据库neo4j、JanusGraph、hugugraph比较

本文于1628天之前发表,文中内容可能已经过时。

什么是图?

图由两个元素组成:节点、关系

每一个节点代表一个实体,每一个关系代表两个节点的关联方式

什么是图数据库?

图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

何时需要使用图数据库

图数据库常用领域

  • 社交网络
    Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐
  • 推荐和个性化
    eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验
  • 欺诈识别
    例如银行欺诈,信用卡欺诈,电子商务欺诈,保险欺诈等
  • 金融领域
    摩根大通,花旗和瑞银等银行在用图数据库做风控处理
  • 汽车制造领域
    沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案
  • 电信领域
    Verizon, Orange和AT&T 等电信公司依靠图数据库来管理网络

    怎么确定需要使用图数据库

    可以从一下几点进行考虑
  1. 多对多关系

  2. 高价值关系:

    元素之间的关系和元素本身一样重要,甚至比元素本身还要重要

  3. 大规模低延迟:

    图数据库可以比其他类型的数据库更快地处理大型数据集所表示的关系,尤其是存在在复杂的关系连接

图数据库的种类

数据库评分排行网站DB-Engines的评分:https://db-engines.com/en/ranking/graph+dbms
可以看到多模型的数据库有很多种,单一图模型的数据库第一位Neo4j,第六位JanusGraph

Neo4J和JanusGraph比较

特性\数据库名称 Neo4j JanusGraph
是否开源 社区版开源,企业版收费 完全开源
第一版发行时间 2007年 2016年12月【基于TitanDB[2012]】
技术特点 一站式服务、工具齐全 需要开发者自行组合,因此技术门坎高
查询语言 Cypher Gremlin
开发语言 Java Java
集群 企业版支持,社区版不支持 支持
量级 轻量级 重量级
额外组件依赖 官方提供组件,可以与ES、MongoDB、Cassandra等NoSqlDb进行交互 数据存储服务可以选用Cassandra、HBase或Berkeley DB服务。数据索引可以选用Es、Solr或Lucene服务。

neo4j 还是 janusgraph or hugugraph

在知识图谱相关的应用中,首选要选择的是图数据存储相关的技术。

工业界目前多使用属性图作为存储模型,也就是点-边+属性的模式。

在属性图数据库中,目前neo4j目前的市占率是遥遥领先的,可以参考专业数据库排行网站

https://db-engines.com/en/ranking 的排名,neo4j在图数据库中排名第一。

最初我们构建知识图谱的过程中,我们选择了neo4j。

我们最开始的业务要求比较低,通过 etl以batch的方式 凌晨写数据到图中,线上的数据服务

多是查询,并没有涉及到 读写并发,我们的数据量目前大概只有3000万节点,所有的金融时序数据都存在

elasticsearch里面,访问的并发量100以内,当前业务体量下,使用社区版neo4j基本都能满足,

唯有 HA 存在问题, neo4j 的社区版本,不支持 集群, 要做 HA的话,我们只有自己实现手动的双读双写。

可扩展性比较差。

由于不愿意购买商业版本,并且考虑到马上上线在线编辑 和实时监控功能,需要底层支持大量的读写,并且对集群的build-in

支持也变得迫切起来,所以不得不转向其他开源数据库进行实现。

调研了 janusgraph,tigergraph,hugugraph等。由于tiger graph属于商业版本,不再考虑之内。

所以做的最多的比较还是 janusgraph, hugugraph, neo4j社区版。

最后选择了hugugraph,主要从以下几个方面考虑。

  1. 集群可拓展性上

janusgraph 和hugugraph 都是一个基因出来的, hugugraph实现参考了很大部分的janusgraph。

两者都能支持 Cassandra,Hbase 作为底层的存储,都实现 tinkerpop标准图框架。

由于 Cassandra和hbase都有大量的商用级应用案例,所以在存储的成熟度上都是ok的。

  1. 管理工具成熟

从可视化工具来看, neo4j是做的最好的,非常漂亮的UI工具。

jansugraph 官方给出了5个UI工具,试用了其中三个开源版本后,就果断放弃,

没有方便的基于 gremlin 交互式的ui工具,而 hugugraph自己实现了一个 ui工具,完成度没有neo4j高,

但是风格相似,并且是基于图语言查询的,还是有可用性的。

从数据导入等其他运维工具来看, neo4j 社区版一般,还只能冷备份;

janusgraph 和hugugraph 都依赖底层存储,相对成熟,并且hugugraph 提供了

额外的工具包进行数据的导入和其他运维工具,成熟度高一些。

  1. 性能方面

hugugraph给出了详细的和neo4j的性能对比报告,

总的来说,由于neo4j使用自己开发的存储引擎,为图数据而生,性能从理论上是要高于使用 Cassandra,hbase等外接入存储的图数据库的。

hugugraph在一些多深度的查询上性能还是劣于neo4j,janusgraph同样存在这个问题。

市场上目前看到的报告, 使用原生存储的如neo4j 和 tigergraph都有比较优秀的性能。

如果对性能有追求,在选择方向上可能要考虑原生图数据库。

  1. 社区活跃度

neo4j目前是遥遥领先,janusgraph文档一般,而hugegraph由于是百度开源的,只有部分国内文档,是一个隐患。

但是看hugugraph在github上的活跃度还是很高,稍微安心

综合看起来,由于只能在开源阵营选择,最后还是选择了师出同门,完成度相对较高的hugugraph。