1、HugeGraph
HugeGraph 是一款易用、高效、通用的 开源!开源!开源! 图数据库,最初由百度安全团队自主研发。
HugeGraph 图数据库支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP)。支持 Property Graph 和 Apache Gremlin 查询语言,具备导入、导出、备份、恢复、可视化界面等工具组件,提供简单易用的RESTful API 及 Client,可以轻松构建各种基于图数据库的应用和产品。
HugeGraph 图数据库的典型应用场景包括: 深度关系探索、 复杂关联分析、 路径搜索、 特征抽取、 数据聚类、 社区检测、 知识图谱等。适用业务领域有如:网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。
HugeGraph 图数据库的特征:
- 易用:HugeGraph 支持 Gremlin图查询语言与 RESTful API,同时提供图检索常用接口,具备功能齐全的周边工具,轻松实现基于图的各种查询分析运算。
- 高效:HugeGraph 在图存储和图计算方面做了深度优化,提供多种批量导入工具,轻松完成百亿数据快速导入,通过优化过的查询达到图检索的毫秒级响应。支持数千用户并发的在线实时操作。
- 通用:HugeGraph 支持 Apache Gremlin 标准图查询语言和 Property Graph 标准图建模方法,支持基于图的 OLTP 和 OLAP 方案。集成 Apache Hadoop 及 Apache Spark 大数据平台。
- 可扩展:支持分布式存储、数据多副本及横向扩容,内置多种后端存储引擎(包括RocksDB、Cassandra、ScyllaDB、HBase、Palo、MySQL以及InMemory等),也可插件式轻松扩展后端存储引擎。
- 开放:HugeGraph代码开源(Apache 2 License [7] ),客户可自主修改定制,选择性回馈开源社区。
1、基础功能
- 顶点、边(元素):支持基本增删改查操作,支持有向图,支持两顶点间同一类型多条边,支持超级点。
- 属性:支持属性图、支持多值属性、支持多样化的属性类型、支持顶点属性追加与合并。
- 元数据:支持丰富的 Schema 校验,如属性是否可空(可选),支持 Schema 动态修改。
- 索引:支持二级索引、范围索引、全文索引,支持联合索引。
- 事务:遵循 Tinkerpop 事务规范,支持 Read Committed 级别事务。
- 多顶点 ID 策略:支持主键 ID、支持自动生成 ID、支持用户自定义字符串 ID、支持用户自定义数字 ID。
- 大规模数据:支持批量插入顶点/边、支持超级顶点、支持流式分页获取、支持Shard并行获取。
- 优化的图接口:最短路径(Shortest Path)、K步连通子图(K-neighbor)、K步到达邻接点(K-out)等。
- 其它:支持图变量(Graph Variables)、兼容性上已通过Apache Tinkerpop官方测试用例90%兼容测试。
2、高级功能
- 多图实例:支持多个图实例,图之间数据相互隔离。
- 用户认证:支持多用户,支持用户权限认证,支持用户角色访问控制。可轻松对接现有用户认证系统。
- 监控接口:支持系统状态监控、API 访问时间监控、性能数据监控等。
- 备份恢复:支持在线备份、支持备份数据的恢复。
- 云环境适应:兼容多个云厂商平台,轻松对接公有云、私有云和混合云等多种云环境。
- 商业版本:商业版本提供技术咨询、解决方案、定制化需求等服务。
3、接口支持
- Gremlin 接口:支持标准、灵活的 Gremlin 查询接口。
- Restful API接口:支持功能丰富、简单易用的 HTTP Restful 接口。提供顶点、边、元数据等的基本操作接口;此外提供各种高级查询接口,包括最短路径、多路径、交叉点、N步可达邻居等。
- Java Client 客户端:支持 Java 语言客户端,用户可根据自身需求实现其它语言客户端。
4、周边工具
- 一键部署(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的大数据环境下的图分析工具。
2、Linux 安装
HugeGraph-Server 是 HugeGraph 项目的核心部分,包含 Core、Backend、API 等子模块。Core 模块是 Tinkerpop 接口的实现,Backend 模块用于管理数据存储。
HugeGraphServer 的目录结构:
- bin
- checksocket.sh : com.baidu.hugegraph.util.CheckSocket
- dump-conf.sh : com.baidu.hugegraph.cmd.ConfDumper
- dump-store.sh : com.baidu.hugegraph.cmd.StoreDumper
- gremlin-console.sh
- hugegraph : 启动或停止服务,会调用其他 start/stop-hugegraph.sh 脚本;
- hugegraph-server.sh
- hugegraph.service
- init-store.sh : com.baidu.hugegraph.cmd.InitStore
- install.sh:将 HugeGraphServer 安装为系统服务
- monitor-hugegraph.sh
- start-hugegraph.sh
- start-monitor.sh
- stop-hugegraph.sh
- stop-monitor.sh
- util.sh
- conf
- gremlin-server.yaml
- hugegraph.properties
- rest-server.properties
- ext
- lib
- scripts
1、 配置
配置文件的目录为 hugegraph-release/conf,所有有关服务和图本身的配置都在此目录下。
- gremlin-server.yaml
- rest-server.properties
- hugegraph.properties
HugeGraphServer 内部集成了 GremlinServer 和 RestServer,gremlin-server.yaml 和 rest-server.properties 就是用来配置这两个 Server 的。GremlinServer 能接收用户的 gremlin 语句,解析后再调用 Core 的代码;RestServer 提供 Restfule API,根据不同的 HTTP 请求,嗲用对应的 Core API。
# graphs:该项为 map 结构,key 是图的名字,value 是该图的配置文件路径;
graphs: {
hugegraph: conf/hugegraph.properties
}
gremlin-server.yaml 和 rest-server.properties 都包含 graphs 配置项,而 init-store 命令是根据 gremlin-server.yaml 的 graphs 下的图进行初始化的。
2、 多图
HugeGraph 支持存在多个图,并且各个图的后端可以不一样,比如 graph1 以 cassandra 为后端,graph2 以 mysql 为后端。
3、 初始化
$ bin/init-store.sh
初始化数据库,仅第一次启动时需要,会根据配置文件对图数据进行初始化。
4、 启动
启动分为“首次启动”和“非首次启动”,首次启动之前需要初始化后端数据库,然后启动服务。
HugeGraphServer 启动时会连接后端存储并尝试检查后端存储版本号,如果未初始化后端或者后端已经初始化当时版本比匹配时,HugeGraphServer 会启动失败,并给出错误信息。
bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK
5、 访问
jps 查看服务进程
jps
6475 HugeGraphServer
curl 请求 RestfulAPI
curl -o /dev/null -s -w %{http_code} “http://localhost:8080/graphs/hugegraph/graph/vertices”
返回结果200,代表server启动正常
3、Window + PostgreSQL
下载源码重新编译:
- 需要的模块:api,core, dist, mysql, postgresql
- 删除 maven-autrun-plugin
- 添加 maven-assembly-plugin,编译可执行 jar
- 配置
- 创建 postgresql 数据库 hugegraph
修改 HugeGraphServer.java
public static void main(String[] args) throws Exception {
HugeRestServer.register();
InitStore.initGraph("conf/hugegraph.properties");
HugeGraphServer server = new HugeGraphServer("conf/gremlin-server.yaml","conf/rest-server.properties");
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
LOG.info("HugeGraphServer stopping");
server.stop();
LOG.info("HugeGraphServer stopped");
}));
}
1、postgresql 配置
配置项 | 值 | 描述 |
---|---|---|
backend | postgresql | |
serializer | postgresql | |
jdbc.driver | org.postgresql.Driver | The JDBC driver class to connect database. |
jdbc.url | jdbc:postgresql://127.0.0.1:5432/ | The url of database in JDBC format. 端口后的 / 不要漏掉 |
jdbc.username | hugegraph | The username to login database. |
jdbc.password | hugegraph | The password corresponding to jdbc.username. |
注意:
- 通过配置文件中的 store 属性来设置对应的数据库名称,默认是 hugegraph;
- username 与 store 相同;因为内部会通过 “jdbc:postgresql://127.0.0.1:5432/” 来获取数据库连接,得到的数据库名与用户名相同;
2、Windows 脚本
start.bat
cd /d %~dp0
start /B java -jar hugegraph.jar 1>nul 2>nul
- conf
- ext
- lib
- scripts
- hugegraph.jar
- start.bat
在启动过程中,出现 MANIFEST.MF 缺少 version 的错误,直接编辑 jar 中的 MANIFEST.MF 文件,添加 version: 3.4.3
。
4、hugegrap-studio
- 启动 hugegraph-server
- 配置 studio properties 文件
- 启动:
java -cp ./lib/* -Dstudio.home=./ com.baidu.hugegraph.studio.HugeGraphStudio