HugeGraph调研
郝伟 2021/04/25
图数据库在安全反欺诈、知识图谱、机器学习等诸多领域有着重要的应用,但TitanDB团队被DataStax收购之后,开源图数据库出现了断层。近年来百度安全凭着雄厚的技术实力自主研发了全面支持Apache TinkerPop 3框架和Gremlin图查询语言的大型分布式图数据库HugeGraph,与Neo4j、TitanDB等传统图数据库相比有很多独特的优势。今天我们很高兴的宣布HugeGraph开源,更好的为网络安全、机器学习等社区服务。
HugeGraph主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和图建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。目前HugeGraph在百度安全的应用场景非常多,例如网址安全检测、威胁情报分析、设备关系图谱和数据安全治理等。
HugeGraph拥有良好的读写性能,并且我们根据安全业务场景对图数据库的核心功能(例如批量写入、最短路径、N度关系等)做了重点优化,与常见图数据库Neo4j和TitanDB等相比较,HugeGraph拥有明显的性能优势。

图 1 db-engines.com数据库发展趋势
图数据库是基于图论的数据库,其基本含义是以“图”这种数据结构存储和查询数据。需要注意的是图数据库并不是存储图片的数据库。图数据库的数据模型由顶点(Vertex)、边(Edge)和属性来体现。其基本数据类型可表示为G=(V, E)。其中V={v1, v2, …, vn}表示一系列顶点 , E={ e1, e2, …, en }={{v1, v2 }, {v3, v4 }, {vn-1, vn}}表示一系列边。
随着社交网络、移动互联网和IOT等新的互联网应用不断涌现,用户、系统和传感器产生的数据呈指数级增长,数据内部依赖和复杂度增加。在应对这些新的趋势时,关系型数据库产生了较多的不适用性,NoSQL(Not Only SQL,不限于SQL)数据库应运而生。
GraphDB图数据库作为一种新型的NoSQL数据库,最近几年广受关注。如图1所示,数据库咨询公司 (http://db-engines.com) 对数据库发展趋势的分析结果表明,图数据库是最近几年发展趋势最明显的数据库类型。
图数据库所提供的关联分析能力是金融反欺诈、威胁情报、黑产打击和案件溯源等业务所需要的核心能力。百度安全对图数据库的需求非常多,例如金融安全业务希望使用图数据库进行金融反欺诈关联分析、威胁情报业务希望通过图数据库进行黑产研究和情报分析、还有社交关系分析、知识图谱等需求场景。我们也试用过包括TitanDB、Neo4j在内的多款图数据库产品,但由于各种原因无法满足实际业务需求。在此背景下我们基于对安全业务的理解和自身业务需求,设计了HugeGraph图数据库系统。
参考:图数据库系统 HugeGraph,https://mulanos.oschina.net/p/hugegraph。
图数据库(Graph Database)是一种以图结构进行语义查询,并使用节点、边和属性来表示和存储数据的数据库。图数据库的关键概念是边,通过边将顶点连接在一起,从而进行快速的图检索操作。
HugeGraph是一款面向分析型,支持批量操作的图数据库系统,它能够与大数据平台无缝集成,有效解决海量图数据的存储、查询和关联分析需求。HugeGraph支持HBase和Cassandra等常见的分布式系统作为其存储引擎来实现水平扩展。HugeGraph可以与Spark GraphX进行链接,借助Spark GraphX图分析算法(如PageRank、Connected Components、Triangle Count等)对HugeGraph的数据进行分析挖掘。
HugeGraph图数据库由何而来
HugeGraph架构图
HugeGraph架构图
HugeGraph团队初期尝试了几个图数据库均无法满足百亿级以上关联数据分析的需求,开始时基于Titan改造来实现,但发现Titan代码难以修改及维护,因此决定参考Titan重新开发HugeGraph图数据库,并于2018年8月开放源代码回馈给社区 。
HugeGraph的主要特点包括:
除上述特定之外,HugeGraph还针对图数据库的高频应用(例如:ShortestPath、k-out、k-neighbor等)做了特定性能优化,并且为用户提供更为高效的使用体验。
与传统关系型数据库相比,图数据库的优势有:
一键部署(hugegraph-tools/deploy):通过部署工具简单轻松的一键部署所有组件。
可视化界面(hugegraph-studio):基于Web的可视化环境,提供图操作界面、图数据展示与分析。
导入工具(hugegraph-loader):数据导入工具,支持从txt、csv、json等格式文件导入到HugeGraph。
导出工具(hugegraph-tools/dump):数据导出工具,可将顶点及关联边导出到文件,支持用户实现formatter自定义格式。
备份恢复工具(hugegraph-tools/backup&restore):数据备份与恢复工具,支持定时备份、手动备份、手动恢复等功能。
Gremlin任务工具(hugegraph-tools/gremlin):Gremlin任务执行工具,支持同步执行Gremlin查询与分析(OLTP),支持异步执行Gremlin任务(OLAP)。
集成Spark GraphX工具(hugegraph-spark):基于Spark GraphX的大数据环境下的图分析工具。
作为一款通用的图数据库产品,HugeGraph需具备图数据的基本功能。HugeGraph的系统架构主要包括存储层、计算层和用户接口层三个功能层次。
HugeGraph的存储层包括图数据(顶点、边和属性等)存储、索引数据存储和Schema元数据存储。HugeGraph后端存储会采用插件化方案,目前已经支持RocksDB、Cassandra、ScyllaDB、HBase、Doris(原Baidu Palo)和MySQL等,后续会适配更多的后端存储系统。
HugeGraph的计算层包括OLTP和OLAP两种类型。其中HugeGraph重点实现了OLTP核心功能,而OLAP部分功能需要和Spark GraphX相结合完成。
HugeGraph提供了多种接口方式,用户可以根据自己的业务需求和喜好,选择相应的接口来操作HugeGraph,具体包括:
HugeGraph具有良好的读写性能,可以胜任多种图应用场景。我们使用图数据库Benchmark测试工具对HugeGraph进行性能测试,并对比了HugeGraph、TitanDB和Neo4j等常见的图数据库,以下是HugeGraph的基本性能数据。
以下在4组开源数据集分别对HugeGraph、TitanDB和Neo4j进行批量写入性能测试,测试结果如表1所示。HugeGraph采用RocksDB存储引擎时插入amazon0601数据集的300万条边耗时为5.711秒,平均每秒可完成50万条边插入。性能数据分析来看HugeGraph的批量插入性能明显优于Neo4j和TitanDB。
表1 HugeGraph批量插入的性能

我们使用同样的4组数据集分别测试HugeGraph、TitanDB和Neo4j三款图数据库在最短路径查找的性能。测试方式是从第一个顶点出发到达随机选择的100个顶点的最短路径,测试数据如表2所示。HugeGraph对最短路径求解采用双向广度优先算法进行优化,其最短路径查询性能明显高于TitanDB,与Neo4j处于同一水平,小数据量情况下HugeGraph略胜于Neo4j。
表2 HugeGraph最短路径查询性能
| 数据库 | email-entron 30w edges |
amazon 0601 300w edges |
com-youtube.ungraph 300W edges |
com-lj.ungraph 3000w edges |
|---|---|---|---|---|
| Hugegraph | 0.494 | 0.103 | 3.364 | 8.155 |
| TitanDB | 11.818 | 0.239 | 377.709 | 575.678 |
| Neo4j | 1.719 | 1.800 | 1.956 | 8.530 |
Ref: https://pic3.zhimg.com/80/v2-e2523aa25c4e99594e5de975ca90d8e6_720w.jpg
HugeGraph针对“好友的好友”这类常见“N度关系”查询也进行了特定优化。我们将N度关系查询分为K-neighbor和K-out两种模式。例如要查询3度关系(即好友的好友的好友),K-neighbor则返回3度之内的所有节点,K-out仅返回3度关系节点。关于K-out的测试数据如表3所示,HugeGraph可以3秒内完成amazon0601的开源数据集(40万节点和338万的边)的5度关系查询。
表3 HugeGraph K-out性能

关于HugeGraph的更多性能测试数据,请查询见官方文档:
(https://hugegraph.github.io/hugegraph-doc/performance/hugegraph-benchmark-0.5.6.html)
具体的测试方法和逻辑请参考:
HugeGraph-Benchmark(https://github.com/hugegraph/graphdb-benchmarks)
HugeGraph已经在GitHub上开源,项目地址是https://github.com/hugegraph。HugeGraph包含了10多个关联子项目,其中包括:
HugeGraph各组件之间的关系如图3所示:

图3 HugeGraph各组关系图
百度安全每天需要处理大量的日志数据,并对数据进行挖掘分析以识别各种安全问题,HugeGraph为安全业务提供关联分析能力。HugeGraph在百度安全内部的应用场景非常广泛,包括网址安全检测、设备关系图谱和数据安全治理等。
搜索是百度的核心业务之一,为保证用户访问的网站是安全的,我们需要对搜索引擎的每一个网页进行安全检测,以防止用户通过搜索引擎入口访问恶意网站。在网址安全检测项目中,我们使用HugeGraph存储网站的基本信息包括域名Whois、IP和外链等,安全分析人员可以方便分析站点之间的关系。另外从链接关系入手,结合PageRank等图挖掘算法可以发现网站链接异常行为,识别网络黑产业。据此我们发现了黑产利用运营商漏洞进行用户隐私窃取的行为,也发现了虚拟点击和非法推广等非法行为,切实维护了网民的权益。
关联分析是威胁情报、黑产打击和案件溯源等业务所需要的核心能力,构建设备关系图谱,提供设备关联分析能力是黑产对抗所需要的核心能力。我们使用HugeGraph存储手机号码、帐号ID、设备指纹等设备信息,通过ID-Mapping和关联分析,精确识别黑产作弊设备,并为业务风控提供细粒度的反作弊策略。
在威胁情报处理方面,利用HugeGraph将恶意攻击记录、恶意IP、恶意域名、Whois信息、漏洞库、文件、邮件地址、杀软检测、开源情报等信息结合构建威胁情报关系网,为风控业务和安全应急响应中心提供服务。另外在伪造设备识别、群控挖掘、自然人识别等方面,HugeGraph也发挥了很大的作用。
在安全领域之外之外,图数据库也可以应用在知识图谱、企业图谱、推荐系统、社交网络、IT运维等多种场景中应用。目前我们也将HugeGraph应用到安全数据治理中项目中。我们将数据资产作为图数据库的顶点,将对数据资产的ETL处理作为图数据库的边,通过顶点和边的关联关系分析数据血缘,并在此基础上实施安全数据治理策略。
图4 HugeGraph在数据治理中的应用

HugeGraph项目及其子项目选择使用ApacheLicense V2开源协议下开源。Apache License V2开源协议是一款给予使用者很大自由的协议,使用者可以在需要的时候修改HugeGraph的代码来满足其业务需要并作为开源发布,也可以集成到其商业产品发布或销售。我们通过开源的方式发布HugeGraph希望有更多的人使用HugeGraph来解决实际业务问题,共同推动图数据库的进一步发展。同时也非常欢迎开源社区、工业界、学术界的用户支持和贡献。
支持HugeGraph的途径有很多,例如:
HugeGraph仍然在鼓励用户到HugeGraph在GitHub的社区(https://github.com/hugegraph)参与社区讨论或贡献代码。
[1] 百度百科 HugeGraph, https://baike.baidu.com/item/HugeGraph/23625088
[2] 百度安全开源大规模图数据库HugeGraph, https://zhuanlan.zhihu.com/p/41240429