Gremlin简介
Gremlin 是 Apache TinkerPop 框架下的图遍历语言,是目前图数据库领域主流的查询语言,Gremlin支持实时性高的OLTP以及多方面观察信息的OLAP。对于图数据库的Gremlin类似于针对关系型数据库的SQL
HugeGraph数据库
HugeGraph 是国内的一款开源图数据库,完全支持 Gremlin 语言。接下来将给大家讲讲如何在本地搭建一个可以执行 Gremlin 语言的HugeGraph 数据库
HugeGraphServer搭建
Step1 下载安装包并解压
在Github的Releases中找到最新版本的hugegraph进行下载并解压
tar -zxvf hugegraph-x.x.x.tar.gz |
Step2 配置参数
HugeGraphServer的默认配置已经能在大部分环境下直接使用了,并不需要修改,不过对于hugegraph-x.x.x
的目录中的conf/rest-server.properties
配置文件
# bind url |
需要要介绍以下几个重要的配置项
restserver.url
:HugeGraphServer对外提供RESTful API服务的地址,大家按需要可以修改其中的host和port部分。当host为127.0.0.1时只能在本机访问,因为后续介绍的HugeGraphStudio也是准备在本地启动的,所以这里不修改默认的host和portgraphs
是图名与配置项的键值对列表,其中hugegraph:conf/hugegraph.properties
表示通过HugeGraphServer可以访问到一个名为hugegraph
的图实例,该图的配置文件路径为conf/hugegraph.properties
。如果我们想访问别的图实例,那么不需要去修改图的配置文件,只需修改图的名字,这里仍然使用默认的配置即可
Step3 初始化后端
HugeGraphServer启动之前需要初始化后端,我们需要在hugegraph-x.x.x
的目录下执行
bin/init-store.sh |
从执行结果中可以看到hugegraph初始化了rocksdb后端,那为什么是rocksdb而不是别的呢?我们回到上一步说的conf/hugegraph.properties
中的配置信息
# gremlin entrence to create graph |
其中backend=rocksdb
就是设置后端为rocksdb的配置项,其他可用的后端的还包括memory、cassandra、scylladb、hbase、mysql和palo
注意:
- 初始化完成后,会在当前目录下出现一个
rocksdb-data
的目录,该目录就是用于存放后端数据的地方,没事千万不要随意删它或移动它 - 初始化后端这个操作只需要在第一次启动服务前执行一次,不要每次起服务都执行。不过即使执行了也没关系,hugegraph检测到已经初始化了会自动跳过
Step4 启动服务
在hugegraph-x.x.x
的目录下执行
bin/start-hugegraph.sh |
执行结果如上图表示执行成功,我们也可以通过查看jps查看HugeGraphServer是否启动成功
如果还不放心是否启动成功,我们还可以发个HTTP请求
curl http://127.0.0.1:8080/graphs |
但如果执行时提示
那么需要先找到8080端口的进程,并将其kill掉
lsof -i :8080 |
然后再次启动HugeGraphServer即可
HugeGraphStudio搭建
搭建步骤和前一部分HugeGraphServer搭建过程类似
Step1 下载安装包
在Github的Releases中找到和hugegraph版本相近的压缩包进行下载并解压
tar -zxvf hugegraph-studio-x.x.x.tar.gz |
Step2 配置参数
和之前一样不需要修改默认的配置参数,只需要注意在hugegraph-studio-x.x.x
的目录中conf/rest-server.properties
的配置信息中
studio.server.port=8088 |
studio.server.port=8088
和studio.server.host=localhost
分别表示访问HugeGraphStudio的port和host
Step3 启动服务
bin/hugegraph-studio.sh |
HugeGraphStudio
的启动默认是不会放到后台的,所以我们会在控制台上看到一大串日志,在最底下看到如下日志则表示启动成功
接下里我们按照日志中提示的信息,在浏览器中输入http://localhost:8088
,就可以进入studio
的界面
Gremlin常用语法
Gremlin 是一种函数式数据流语言,用Gremlin进行的操作是由一系列步骤组成,每一步都是作用在数据流上执行的一个原子操作
核心概念
名称 | 介绍 |
---|---|
Schema | 是一种描述语言,指所有属性和标签的集合 |
PropertyKey | 属性,只有边和点可以使用属性; |
VertexLabel | 顶点标签,比如User,Car等; |
EdgeLabel | 边标签,比如know,use等; |
Vertex | 图中具体的顶点 |
Edge | 图中具体的边,连接两个节点,分为有向边和无向边 |
图的创建
在 HugeGraphStudio 的输入框中输入以下Gremlin语句来创建一个TinkerPop关系图
Step1 创建属性
graph.schema().propertyKey("name").asText().ifNotExist().create() |
Step2 创建顶点标签
graph.schema().vertexLabel("person").properties("name", "age", "addr", "weight").useCustomizeStringId().ifNotExist().create() |
Step3 创建边标签
graph.schema().edgeLabel("knows").sourceLabel("person").targetLabel("person").properties("weight").ifNotExist().create() |
Step4 新增顶点
// 创建顶点 |
Step5 新增边
okram.addEdge("created", tinkerpop, "weight", 1) |
点击界面右上角的三角按钮,就可以创建出一个完整的图
图的查询
图的创建主要用graph
语句,图的查询主要用g
语句,g
就相当于graph.traversal()
Step1 展示整个图
// 查出图的所有顶点和边。 |
Step2 查询点
g.V().limit(5) // 查询所有点,但限制点的返回数量为5 |
Step3 查询边
g.E() // 查询所有边,当边数过大时不推荐使用 |
Step4 查询属性
g.V().limit(3).values() // 查询3个点的所有属性, 没有key, 只有value |
Step5 查询label
g.V().limit(3).label() // 查询3个顶点的label |
Step6 查询路径
举例:查询 Titan 顶点到与其有两层关系的顶点的不含环路的路径
// path 表示遍历过的所有路径 |
Step7 查询迭代
例1: 遍历所有点的出边直到抵达无出边的顶点,输出其路径顶点名
// repeat().until() 等同 do while 循环 |
例2: 遍历所有点的3度可达点的路径
// loops 表示当前循环的次数 |
Step8 查询进阶
// 转换操作 |