Docker Compose搭建Nebula
部署和链接Nebula
git clone https://github.com/vesoft-inc/nebula-docker-compose.git
# 启动nebula console
docker run --rm -ti --network nebula-docker-compose_nebula-net --entrypoint=/bin/sh vesoft/nebula-console:v2-nightly
# 链接nebula graph
nebula-console -u user -p password --address=graphd --port=9669
管理Nebula Graph服务
Nebula Graph使用脚本nebula.service
管理服务,包括启动、停止、重启、中止和查看。
nebula.service
的默认路径是/usr/local/nebula/scripts
,如果修改过安装路径,请使用实际路径。
sudo /usr/local/nebula/scripts/nebula.service
[-v] [-c <config_file_path>]
<start|stop|restart|kill|status>
<metad|graphd|storaged|all>
-c:指定配置文件路径,默认路径为/user/lical/nebula/etc/
启动Nebula garph服务
# 非容器部署
sudo /usr/local/nebula/scripts/nebula.service start all
# 容器部署
docker-compose up -d
停止Nebula Graph服务
禁止使用kill -9方式停止服务,存在数据丢失概率。
# 非容器
sudo /usr/local/nebula/scripts/nebula.service stop all
# 容器
docker-compose down
查看Nebula Graph服务
# 非容器
sudo /usr/local/nebula/scripts/nebula.service status all
连接Nebula Graph
Nebula Console
nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>
[-t 120] [-e "nGQL_statement" | -f filename.nGQL]
![](./img/nebula console.jpg)
Nebula Console导出模式
导出模式开启时,Nebula Console会导出所有请求的结果到CSV格式文件中。关闭导出模式会停止导出。使用语法如下:
基本操作语法
图空间和Schema
一个Nebula Graph实例由一个或多个图空间组成。每个图空间都是物理隔离的,用户可以在同一个实例中使用不同的图空间存储不同的数据集。
Nebula Graph在图空间中定义了Schema
点(vertex):表示现实世界中的实体。一个点可以有一个或多个标签。
标签(tag):点的类型,定义了一组描述点类型的属性。
边类型(edge type):边的类型,定义了一组描述边类型的属性。
异步实现创建和修改
Nebula Graph中执行如下创建和修改操作,是异步实现的,需要在下一个心跳周期才同步数据。
默认心跳周期是10秒。修改心跳周期参数heartbeat_interval_secs
确保数据同步后续操作能顺利进行,需要以下方法之一:
执行SHOW
或DESCRIBE
命令检查相应对象的状态,确保创建或修改已完成。如果没有完成,请等待几秒重试。
创建和选择图空间
CREATE SPACE [IF NOT EXISTS] <graph_space_name>
[(partition_num = <partition_number>,
replica_factor = <replica_number>,
vid_type = {FIXED_STRING(<N>) | INT64})];
# 创建test
CREATE SPACE IF NOT EXISTS test_graph_space(PARTITION_NUM=5,REPLICA_FACTOR=1,VID_TYPE=INT64);
创建标签和边类型
CREATE {TAG | EDGE} {<tag_name> | <edge_type>}(<property_name> <data_type>
[, <property_name> <data_type> ...]);
# 创建tag player
nebula> CREATE TAG player(name string, age int);
# 创建tag team
nebula> CREATE TAG team(name string);
# 创建边follow
nebula> CREATE EDGE follow(degree int);
# 创建边serve
nebula> CREATE EDGE serve(start_year int, end_year int);
插入点和边
使用INSERT基于存在的tag插入点或者edgeType插入边
插入点
INSERT VERTEX <tag_name> (<property_name>[, <property_name>...])
[, <tag_name> (<property_name>[, <property_name>...]), ...]
{VALUES | VALUE} <vid>: (<property_value>[, <property_value>...])
[, <vid>: (<property_value>[, <property_value>...];
# 插入球员和球队的点
# player
INSERT VERTEX player(name,age) VALUES 100:("kobe",24);
INSERT VERTEX player(name,age) VALUES 101:("james",38);
INSERT VERTEX player(name,age) VALUES 102:("ow",27)
# team
INSERT VERTEX team(name) VALUES 24:("laker");
VID
是Vertex ID的缩写,VID
在一个图空间中是唯一的。
插入边
INSERT EDGE <edge_type> (<property_name>[, <property_name>...])
{VALUES | VALUE} <src_vid> -> <dst_vid>[@<rank>] : (<property_value>[, <property_value>...])
[, <src_vid> -> <dst_vid>[@<rank>] : (<property_name>[, <property_name>...]), ...];
# 插入代表球员和球队关系的边
# 插入球员关系边
INSERT EDGE follow(degree) VALUES 100->101:(95);
INSERT EDGE follow(degree) VALUES 100->101@1:(95);
# 插入球员球队关系边
INSERT EDGE serve(start_year,end_year) VALUES 100 ->24:(1996,2010),101->23:(2003,2008);
查询数据
GO语句可以根据指定的条件遍历数据库。GO
语句从一个或多个点开始,沿着一条或多条边遍历,返回YIELD
子句中指定的信息。
GO [[<M> TO] <N> STEPS ] FROM <vertex_list>
OVER <edge_type_list> [REVERSELY] [BIDIRECT]
[WHERE <expression> [AND | OR expression ...])]
YIELD [DISTINCT] <return_list>;
FETCH语句可以获得点或边的属性。
FETCH PROP ON {<tag_name> | <tag_name_list> | *} <vid_list>
[YIELD [DISTINCT] <return_list>];
FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>]
[, <src_vid> -> <dst_vid> ...]
[YIELD [DISTINCT] <return_list>];
LOOKUP语句是基于索引的,和WHERE
子句一起使用,查找符合特定条件的数据。
LOOKUP ON {<tag_name> | <edge_type>}
WHERE <expression> [AND expression ...])]
[YIELD <return_list>];
MATCH语句是查询图数据最常用的,但是它依赖索引去匹配Nebula Graph中的数据模型。
MATCH <pattern> [<WHERE clause>] RETURN <output>;
Go查询
|:组合多个查询的管道符,将前一个查询的结果集用于后一个查询。
修改点和边