HugeGraph 入门
一、HugeGraph 简介
最近在搞好友推荐方便的工作,选择了图数据的方法,使用并学习了 HugeGraph,再次记录一下。
HugeGraph 是百度在 2018 年中旬开源的一款图数据库(Graph Database)系统,可以存储海量的顶点(Vertex)和边(Edge)。实现了 Apache ThinkerPop 31 框架,支持 Gremlin 图查询语言 2。HugeGraph 支持多用户并行操作,用户可输入 Gremlin 查询语句,并及时得到图查询结果。也可以再用户程序中调用 hugeGraph API 进行图分析或查询。
二、HugeGraph 特性
HugeGraph 支持在线及离线环境下的图操作,支持批量导入数据,支持高效的负责关联关系分析,并且能够与大数据平台无缝集成。
HugeGraph 具备如下特点:
基于 ThinkerPop 3 框架实现,支持 Gremlin 查询语言;
支持从 TXT、CSV、JSON 等格式的文件中批量导入数据;
具备独立的 Schema 元数据信息,方便第三方系统集成;
具备可视化操作界面,降低用户使用门槛;
存储系统采用插件方式,支持 RocksDB、Cassandra、ScyllaDB、HBase 及 Mysql 等多种后端;
优化的图接口,最短路径、K 步连通子图、K 步到达邻接点等;
支持属性图,顶点和边均可添加属性,支持丰富的属性类型;
可以对边和顶点的属性建立索引,支持精确查询、范围查询、全文检索;
支持 4 种顶点 ID 策略,之间 ID、自动生成 ID、用户自定义字符串 ID 和用户自定义数据 ID;
支持与 Hadoop、Spark GraphX 等大数据系统集成,支持 Bulk Load 操作。
三、HugeGraph 框架模块
HugeGraph-Server: HugeGraph-Server 是 HugeGraph 项目的核心部分,包含 Core、Backend、API 等子模块;
Core:图引擎实现,向下连接 Backend 模块,向上支持 API 模块;
Backend:实现将图数据存储到后端,支持的后端包括:Memory、Cassandra、ScyllaDB、RocksDB、HBase 以及 Mysql,用户根据实际情况选择一种即可;
API:内置 REST Server,向用户提供 RESTful API,同时兼容 Gremlin 查询。
HugeGraph-Client:HugeGraph-Client 提供了 RESTful API 的客户端,用于连接 HugeGraph-Server,目前仅实现 Java 版,其他语言用户可自行实现;
HugeGraph-Studio:HugeGraph-Studio 是 HugeGraph 的 Web 可视化工具,可用于执行 Gremlin 语句及展示图;
HugeGraph-Loader:HugeGraph-Loader 是基于 HugeGraph-Client 的数据导入工具,将普通文本数据转化为图形的顶点和边并插入图形数据库中;
HugeGraph-Spark:基于 Spark GraphX 的图分析工具,HugeGraph-Spark 能在图上做并行计算,例如 PageRank 算法等;
HugeGraph-Tools:HugeGraph-Tools 是 HugeGraph 的部署和管理工具,包括管理图、备份 / 恢复、Gremlin 执行等功能。
总结:部署 HugeGraph 需要 HugeGraph-Server,在网页上操作图需要 HugeGraph-Studio,在 java 项目中操作图需要 HugeGraph-Client,其他三个视情况需要的时候再部署使用。
四、HugeGraph 安装部署
4.1 安装 HugeGraph-Server(必须)
依赖:
JDK1.8
使用使用的是 RocksDB 存储则需要 GCC >= 4.3.0,下面的步骤假设使用 RocksDB 作为存储
步骤 1:
# 下载 tar 包
wget https://github.com/hugegraph/hugegraph/releases/download/v${version}/hugegraph-${version}.tar.gz
tar -zxvf hugegraph-${version}.tar.gz
步骤 2:
修改 hugegraph.properties
backend=rocksdb
serializer=binary
rocksdb.data_path=.
rocksdb.wal_path=.
步骤 3:
初始化数据库(仅第一次启动时需要)
cd hugegraph-${version}
bin/init-store.sh
步骤 4:
启动 server
bin/start-hugegraph.sh
Starting HugeGraphServer…
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)….OK
步骤 5:
查看服务状态:
jps
6475 HugeGraphServer
# curl 请求 restuflAPI, 结果返回 200,代表 server 启动正常
echo `curl -o /dev/null -s -w %{http_code} “http://localhost:8080/graphs/hugegraph/graph/vertices”`
步骤 6:
# 停止 server
$cd hugegraph-${version}
$bin/stop-hugegraph.sh
4.2 安装 HugeGraph-Studio
步骤 1:
# 下载 tar 包并解压
wget https://github.com/hugegraph/hugegraph-studio/releases/download/v${version}/hugegraph-studio-${version}.tar.gz
tar zxvf hugegraph-studio-${version}.tar.gz
步骤 2:
修改配置文件 hugegraph-studio.properties
将配置项 studio.server.host 的值 localhost 修改成机器名或 IP,这是 HugeGraphStudio 对外提供服务的 host,如果只需要本地访问则保持不变即可;
将配置项 studio.server.port 的值 8088 修改成想要的端口,这是 HugeGraphStudio 对外提供服务的 port;
将配置项 graph.server.host 的值 localhost 修改成 HugeGraphServer 的 host,HugeGraphStudio 通过此项和 graph.server.port 与 HugeGraphServer 建立连接;
将配置项 graph.server.port 的值 8080 修改成 HugeGraphServer 的 port,HugeGraphStudio 通过 graph.server.host 和此项与 HugeGraphServer 建立连接;
将配置项 graph.name 的值 hugegraph 修改成要连接的 HugeGraphServer 的图名,目前只允许连接一个图。
# 启动 HugeGraph-Studio
$ cd hugegraph-studio-${version}
$ bin/hugegraph-studio.sh
步骤 3:
浏览器打开:http://localhost:8088 即可访问。
五、HugeGraph,Neo4j,Titan 三种图数据库性能对比
官网给了一个性能测试的报告:https://hugegraph.github.io/h…
总结起来就是:
批量插入性能:HugeGraph(RocksDB) > Neo4j > Titan(thrift+Cassandra)
遍历性能:Neo4j > HugeGraph(RocksDB) > Titan(thrift+Cassandra)
图常用分析方法性能:FS 场景,HugeGraph 性能优于 Neo4j 和 Titan,K-neighbor 和 K -out 场景,HugeGraph 能够实现在 5 度范围内秒级返回结果
社区聚类算法性能 Neo4j > HugeGraph > Titan
当时选择 HugeGraph 的原因一是需求需要导大量的数据,涉及大约十几亿的插入,所以需要找一个插入性能高的,并且好友关系变动的时候也需要异步更新图关系。而是 HugeGraph 虽然是新秀,但是中文官方文档很简介清楚,利于学习使用。
参考:https://hugegraph.github.io/h…
Apache ThinkerPop 3 是图形数据库(OLTP)和图形分析系统(OLAP)的图形计算框架。↩
Gremlin 是 Apache ThinkerPop 框架下的图遍历语言,Gremlin 是一种函数式数据流语言,可以使用户使用简洁的方式表述复杂的属性图的遍历或查询。↩