服务部署
1. Nebula Graph安装与启动
- RPM/DEB包安装和启动
wget https://oss-cdn.nebula-graph.com.cn/package/3.2.0/nebula-graph-3.2.0.ubuntu1804.amd64.deb # 下载安装包
dpkg -i nebula-graph-3.2.0.ubuntu1804.amd64.deb # 安装
sudo /usr/local/nebula/scripts/nebula.service start all # 启动服务
sudo /usr/local/nebula/scripts/nebula.service status all # 查看状态
进入命令行客户端
NebulaGraph Console 是 NebulaGraph 的原生命令行客户端,用于连接 NebulaGraph 集群并执行查询,同时支持管理参数、导出命令的执行结果、导入测试数据集等功能。
./nebula-console -addr 127.0.0.1 -port 9669 -u root -p passwd
- 使用docker compose安装和启动
git clone -b release-3.2 https://github.com/vesoft-inc/nebula-docker-compose.git
cd nebula-docker-compose/
docker compose up -d # 启动 Nebula Graph 服务
docker compose ps # 查看 Nebula Console 容器名称
NAME COMMAND SERVICE STATUS PORTS
nebula-docker-compose-console-1 "sh -c 'sleep 3 &&\nn…" console running
nebula-docker-compose-graphd-1 "/usr/local/nebula/b…" graphd running (healthy) 0.0.0.0:9669->9669/tcp, 0.0.0.0:32793->19669-19670/tcp
nebula-docker-compose-graphd1-1 "/usr/local/nebula/b…" graphd1 running (healthy) 0.0.0.0:32792->9669/tcp, 0.0.0.0:32790->19669-19670/tcp
nebula-docker-compose-graphd2-1 "/usr/local/nebula/b…" graphd2 running (healthy) 0.0.0.0:32789->9669/tcp, 0.0.0.0:32787->19669-19670/tcp
nebula-docker-compose-metad0-1 "/usr/local/nebula/b…" metad0 running (healthy) 0.0.0.0:32776->9559/tcp, 0.0.0.0:32774->19559-19560/tcp
nebula-docker-compose-metad1-1 "/usr/local/nebula/b…" metad1 running (healthy) 0.0.0.0:32775->9559/tcp, 0.0.0.0:32773->19559-19560/tcp
nebula-docker-compose-metad2-1 "/usr/local/nebula/b…" metad2 running (healthy) 0.0.0.0:32772->9559/tcp, 0.0.0.0:32769->19559-19560/tcp
nebula-docker-compose-storaged0-1 "/usr/local/nebula/b…" storaged0 running (healthy) 0.0.0.0:32781->9779/tcp, 0.0.0.0:32778->19779-19780/tcp
nebula-docker-compose-storaged1-1 "/usr/local/nebula/b…" storaged1 running (healthy) 0.0.0.0:32785->9779/tcp, 0.0.0.0:32783->19779-19780/tcp
nebula-docker-compose-storaged2-1 "/usr/local/nebula/b…" storaged2 running (healthy) 0.0.0.0:32784->9779/tcp, 0.0.0.0:32782->19779-19780/tcp
docker exec -it nebuladockercompose_console_1 /bin/sh # 进入Nebula Console 容器
/usr/local/bin/nebula-console -u <user_name> -p <password> --address=graphd --port=9669 # 通过 Nebula Console 连接 Nebula Graph
nebula> SHOW HOSTS; # 查看集群状态
+-------------+------+-----------+----------+--------------+----------------------+------------------------+---------+
| Host | Port | HTTP port | Status | Leader count | Leader distribution | Partition distribution | Version |
+-------------+------+-----------+----------+--------------+----------------------+------------------------+---------+
| "storaged0" | 9779 | 19669 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.2.0" |
| "storaged1" | 9779 | 19669 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.2.0" |
| "storaged2" | 9779 | 19669 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.2.0" |
+-------------+------+-----------+----------+--------------+----------------------+------------------------+---------+
2. Nebula Graph配置
- 修改storge的data路径
编辑/usr/local/nebula/etc/nebula-graphd.conf
,修改data_path
为所需要的路径即可
参考:https://docs.nebula-graph.com.cn/3.3.0/5.configurations-and-logs/1.configurations/4.storage-config/
3. Nebula Studio安装与启动
https://docs.nebula-graph.com.cn/3.2.0/nebula-studio/deploy-connect/st-ug-deploy/
wget https://oss-cdn.nebula-graph.com.cn/nebula-graph-studio/3.4.1/nebula-graph-studio-3.4.1.x86_64.rpm # 下载安装包
sudo rpm -i nebula-graph-studio-3.4.1.x86_64.rpm
顺利安装后会自动启动,在浏览器地址栏输入 http://127.0.0.1:7001
输入Nebula Graph 的 Graph 服务本机 IP 地址以及服务所用端口,默认端口为 9669。
4. 部署遇到的问题
- 使用docker compose安装nebula-graph时可能会出现由于网络问题导致下载文件失败,可以多试几次。
- Nebula Studio的deb包无法在WSL环境安装,会提示
System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
。
用法
支持nGQL和openCypher 9
https://docs.nebula-graph.com.cn/3.1.0/3.ngql-guide/14.native-index-statements/1.create-native-index/
-
MATCH语句
MATCH语句提供基于模式(pattern)匹配的搜索功能。一个MATCH语句定义了一个搜索模式,用该模式匹配存储在 Nebula Graph 中的数据,然后用RETURN子句检索数据。参考:https://docs.nebula-graph.com.cn/3.1.0/3.ngql-guide/7.general-query-statements/2.match/使用MATCH语句时注意需要创建索引,参考:https://docs.nebula-graph.com.cn/3.2.1/3.ngql-guide/14.native-index-statements/1.create-native-index/# 匹配节点 MATCH (v) RETURN v LIMIT 100000000; # 所有节点 MATCH (v:Disease) RETURN v LIMIT 10; # 当遍历指定 Tag 的点或指定 Edge Type 的边时,不需要创建索引,但必须使用LIMIT限制输出结果数量。 MATCH (v:Disease{name: "上感"}) RETURN v; MATCH (v:Disease) where v.Disease.name=="上感" RETURN v; # 匹配连接的点 # v1--v2表示v1和v2之间的连接 # v1-->v2表示v1到v2之间的连接,对于v1是出边,对于v2是入边 # v1<--v2表示v2到v1之间的连接 # -->表示边从 v 开始,指向 v2。对于点 v 来说是出边,对于点 v2 来说是入边。 MATCH (v:Disease{name:"急性上呼吸道感染"})-->(v2:Disease) RETURN v2.Disease.name AS Name; # 匹配路径 # 连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。 MATCH p=(v:Disease{name:"上感"})-->(v2) RETURN p; MATCH p=(v:Disease)--(v2) RETURN p limit 1000000; # Disease节点连接的所有路径 # 匹配边 # 和点一样,用户可以用:<edge_type>表示模式中的 Edge type,例如-[e:follow]- MATCH (v:Disease{name:"流行性脑脊髓膜炎"})-[e:ClinicalManifestation]->(v2) RETURN e; MATCH (v:Disease{name:"流行性脑脊髓膜炎"})-[e:ClinicalManifestation{inStage:"初期"}]->(v2) RETURN e;
-
FIND PATH语句
FIND PATH语句查找指定起始点和目的点之间的路径。参考:https://docs.nebula-graph.com.cn/3.1.0/3.ngql-guide/16.subgraph-and-path/2.find-path/# "急性上呼吸道感染" 到 "咽干" 的最短路径 FIND SHORTEST PATH FROM "急性上呼吸道感染" TO "咽干" OVER * YIELD path AS p;
-
GET SUBGRAPH语句
GET SUBGRAPH语句检索指定 Edge type 的起始点可以到达的点和边的信息,返回子图信息。参考:https://docs.nebula-graph.com.cn/3.1.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph/# 查询从点急性上呼吸道感染开始、0~1 跳、所有Edge type的子图。 GET SUBGRAPH 1 STEPS FROM "急性上呼吸道感染" YIELD VERTICES AS nodes, EDGES AS relationships GET SUBGRAPH WITH PROP 1 STEPS FROM "急性上呼吸道感染" YIELD VERTICES AS nodes, EDGES AS relationships # WITH PROP 表示返回属性 # 查询从点急性上呼吸道感染开始、0~1 跳、DiseaseClassification类型的出边的子图。 GET SUBGRAPH 1 STEPS FROM "急性上呼吸道感染" OUT DiseaseClassification YIELD VERTICES AS nodes, EDGES AS relationships;
-
LOOKUP语句
LOOKUP根据索引遍历数据。用户可以使用LOOKUP实现如下功能:- 根据WHERE子句搜索特定数据。
- 通过 Tag 列出点:检索指定 Tag 的所有点 ID。
- 通过 Edge type 列出边:检索指定 Edge type 的所有边的起始点、目的点和 rank。
- 统计包含指定 Tag 的点或属于指定 Edge type 的边的数量。
使用LOOKUP语句时注意需要创建索引
# 查询 Tag 为player类型的所有节点的name属性值 LOOKUP on player YIELD properties(vertex).name AS name; # 查询 Tag 为player且name为Tony Parker的点 LOOKUP ON player \ WHERE player.name == "Tony Parker" \ YIELD id(vertex); # 查询 TAG 为Disease且name以"糖尿病"开头的节点 LOOKUP ON Disease WHERE Disease.name STARTS WITH "糖尿病" YIELD properties(vertex).name; # 统计 Tag 为Disease的点和 Edge type 为ClinicalManifestation的边。 LOOKUP ON Disease YIELD id(vertex)| YIELD COUNT(*) AS Disease_Number; LOOKUP ON ClinicalManifestation YIELD edge AS e| YIELD COUNT(*) AS n;
-
UPDATE EDGE语句
修改边的的属性首先查看边的属性 GO FROM "player100" \ OVER serve \ YIELD properties(edge).start_year, properties(edge).end_year; FETCH PROP ON ClinicalManifestation "急性上呼吸道感染" -> "发热" YIELD properties(edge).inGroup; UPDATE EDGE ON ClinicalManifestation "急性上呼吸道感染" -> "发热"@0 SET inProportion = "1%"
-
GO 语句
GO从给定起始点开始遍历图。GO语句采用的路径类型是walk,即遍历时点和边都可以重复。GO FROM "急性上呼吸道感染" OVER ClinicalManifestation YIELD edge as e; GO FROM "急性上呼吸道感染" OVER * YIELD edge as e; # 用 * 表示所有边类型
-
SHOW 语句
# SHOW SPACES可以显示现存的图空间 SHOW SPACES; # SHOW HOSTS语句可以显示集群信息,包括端口、状态、leader、分片、版本等信息,或者指定显示 Graph、Storage、Meta 服务主机信息。 # 如果服务异常,可以执行该命令查看集群状态 SHOW HOSTS; # SHOW STATS语句显示最近STATS作业收集的图空间统计信息。图空间统计信息包含:点的总数、边的总数、每个 Tag 关联的点的总数、每个 Edge type 关联的边的总数 # 执行SHOW STATS前需要在查看统计信息的图空间中执行SUBMIT JOB STATS,SHOW STATS的结果取决于最后一次执行的SUBMIT JOB STATS SUBMIT JOB STATS; SHOW STATS;
-
CREATE INDEX 创建索引
如果先创建索引再导入数据,会因为写性能的下降导致导入速度极慢。日常增量写入时保持 --disable_auto_compaction = false。索引功能不会自动对其创建之前已存在的存量数据生效————在索引重建完成之前,无法基于该索引使用LOOKUP和MATCH语句查询到存量数据。索引的重建未完成时,依赖索引的查询仅能使用部分索引,因此不能获得准确结果。
如果必须使用索引,通常按照如下步骤:- 初次导入数据至 NebulaGraph。
- 创建索引。
- 重建索引。
使用 LOOKUP 或 MATCH 语句查询数据。不需要(也无法)指定使用哪个索引,NebulaGraph 会自动计算。
nebula> CREATE TAG INDEX player_index on player(); nebula> CREATE EDGE INDEX follow_index on follow(); # 创建单属性索引 nebula> CREATE TAG INDEX IF NOT EXISTS player_index_0 on player(name(10)); # 索引长度为 10,即只使用属性name的前 10 个字符来创建索引 # 创建复合属性索引 # 复合属性索引用于查找一个 Tag(或者 Edge type) 中的多个属性(的组合)。 nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 on player(name(10), age); # 重建索引,返回任务 ID。 nebula> REBUILD TAG INDEX single_person_index; # 查看索引状态。 nebula> SHOW TAG INDEX STATUS;
Python接口
参考:nebula_grapy.py
参考:https://github.com/vesoft-inc/nebula/tree/master/tests/tck/features/fetch