Nebula Graph基础

服务部署

1. Nebula Graph安装与启动

https://docs.nebula-graph.com.cn/3.2.1/4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/

  1. 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  # 查看状态
Snipaste_2022-09-07_16-30-51.png

进入命令行客户端
NebulaGraph Console 是 NebulaGraph 的原生命令行客户端,用于连接 NebulaGraph 集群并执行查询,同时支持管理参数、导出命令的执行结果、导入测试数据集等功能。

./nebula-console -addr 127.0.0.1 -port 9669 -u root -p passwd
  1. 使用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配置

  1. 修改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-studio.png

输入Nebula Graph 的 Graph 服务本机 IP 地址以及服务所用端口,默认端口为 9669。

4. 部署遇到的问题

  1. 使用docker compose安装nebula-graph时可能会出现由于网络问题导致下载文件失败,可以多试几次。
  2. 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/

  1. 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;
    
  2. 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;
    
  3. 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;
    
  4. 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;
    
  5. 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%"
    
  6. GO 语句
    GO从给定起始点开始遍历图。GO语句采用的路径类型是walk,即遍历时点和边都可以重复。

    GO FROM "急性上呼吸道感染" OVER ClinicalManifestation YIELD edge as e;
    GO FROM "急性上呼吸道感染" OVER * YIELD edge as e;  # 用 * 表示所有边类型
    
  7. 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;
    
  8. CREATE INDEX 创建索引
    如果先创建索引再导入数据,会因为写性能的下降导致导入速度极慢。日常增量写入时保持 --disable_auto_compaction = false。索引功能不会自动对其创建之前已存在的存量数据生效————在索引重建完成之前,无法基于该索引使用LOOKUP和MATCH语句查询到存量数据。索引的重建未完成时,依赖索引的查询仅能使用部分索引,因此不能获得准确结果。
    如果必须使用索引,通常按照如下步骤:

    1. 初次导入数据至 NebulaGraph。
    2. 创建索引。
    3. 重建索引。

    使用 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容