前幾天和社群小夥伴友好交流(閒聊),不少加入 NebulaGraph 的小夥伴雖然對圖感興趣,但是因為業務調整或者是時間緣故,最終沒能用上 NebulaGraph。而他們當中不少的小夥伴說,春節我打算好好學習一番。既然大家有此打算,那 Nebula 一定要來助力一番。
本文是一份極度友好,你即便只會一個開機操作不懂任何資料庫,你也能獲得像是下圖這樣的直觀關係圖譜。
* 注:本文雖然看過篇幅很長,大多數是為了方便新手對照加入了大量的圖片供參考,別擔心用上圖資料庫的過程很複雜:它真的很簡單,幾分鐘就搞定了~
寫在前面
寫給新手
本文作者是一個 SQL 都不會寫的小運營,她根據文件完成了 NebulaGraph 的部署和視覺化工具 NebulaGraph Studio、NebulaGraph Explorer 的部署,以及完成了簡單的圖探索。優秀如你,一定可以完成本次的 NebulaGraph 相簿打卡活動~
本文所用作業系統為 macOS,採用 Docker 和雲服務兩種方式來部署 NebulaGraph。如果你採用 Docker 部署方式,而作業系統為 Windows,記得自行搜尋“Windows 如何安裝使用 Docker Desktop”。
寫給老手
如果你已經完成了部署,會用 NebulaGraph Studio 之類的圖探索工具。那麼,你可以試試由思為提供的進階實踐教程(難度依次增加):
- 從零到一構建一個智慧問答助手
- 從零到一:如何構建一個企業股權圖譜系統?
- 基於圖資料庫 NebulaGraph 的 ID Resolution 方法與程式碼示例
NebulaGraph 和視覺化工具部署
為了降低難度(其實是沒有 Linux 機器),本次部署採用了 Docker 方式,按照文件:https://docs.nebula-graph.com.cn/3.6.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/,一步步執行。
你可以按照文件一步步操作,也可以只看本文完成 Docker 的部署安裝。
Docker Compose 安裝
首先,安裝 Docker Compose。這裡我們直接安裝 Docker Desktop(Docker 桌面版),它提供了 Docker Compose。點選此處:https://www.docker.com/products/docker-desktop/,自行完成安裝。
安裝完成之後,點選你的 Docker 圖示,執行 Docker。
當你看到上圖,狀態列有 Docker 的圖示,說明你的 Docker 環境已 ready。我們可以來驗證下:開啟你的 terminal,輸入命令:docker-compose version
,有像下圖一樣的返回結果,說明你的 Docker 可以開始工作了。
NebulaGraph 部署
現在有 Docker Compose 了,我們來安裝下圖資料庫。
還是那個執行了 Docker 版本查詢的 terminal,輸入命令:
git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git
讓命令執行一段時間,看到下圖:
好的,到此為止。你已經有了優秀的圖資料庫 NebulaGraph,完成了它的部署。
NebulaGraph 服務啟動
下面,我們來啟動 NebulaGraph。非常簡單的兩條命令,還是在 terminal 裡執行:
# 切到 nebula-docker-compose 目錄
cd nebula-docker-compose
# 拉起服務
docker-compose up -d
看到上圖,說明你的 NebulaGraph 的服務已經啟動。
NebulaGraph 服務連線
現在 NebulaGraph 已經啟動了,一般來說現在就是連線它,執行什麼 SQL boy 的日常 CRUD 操作——往資料庫里加點資料、做些查詢。
先前,我們提到了 NebulaGraph Studio 和 NebulaGraph Explorer 你可以理解是一個 Web 客戶端,我們會用瀏覽器來連線 NebulaGraph。作為一個附加學習,下面是透過 nebula-console 來連線 NebulaGraph。
還是在之前那個執行了 docker-compose up -d
的 terminal,用命令 docker-compose ps
看下目前 Docker 中服務名:
nebula-docker-compose git:(release-3.6) docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nebula-docker-compose-console-1 docker.io/vesoft/nebula-console:v3.5 "sh -c 'for i in `se…" console 44 seconds ago Up 40 seconds
nebula-docker-compose-graphd-1 docker.io/vesoft/nebula-graphd:v3.6.0 "/usr/local/nebula/b…" graphd 44 seconds ago Up 41 seconds (healthy) 0.0.0.0:9669->9669/tcp, 0.0.0.0:55153->19669/tcp, 0.0.0.0:55154->19670/tcp
nebula-docker-compose-graphd1-1 docker.io/vesoft/nebula-graphd:v3.6.0 "/usr/local/nebula/b…" graphd1 44 seconds ago Up 41 seconds (healthy) 0.0.0.0:55152->9669/tcp, 0.0.0.0:55150->19669/tcp, 0.0.0.0:55151->19670/tcp
nebula-docker-compose-graphd2-1 docker.io/vesoft/nebula-graphd:v3.6.0 "/usr/local/nebula/b…" graphd2 44 seconds ago Up 41 seconds (healthy) 0.0.0.0:55157->9669/tcp, 0.0.0.0:55155->19669/tcp, 0.0.0.0:55156->19670/tcp
nebula-docker-compose-metad0-1 docker.io/vesoft/nebula-metad:v3.6.0 "/usr/local/nebula/b…" metad0 44 seconds ago Up 43 seconds (healthy) 9560/tcp, 0.0.0.0:55131->9559/tcp, 0.0.0.0:55132->19559/tcp, 0.0.0.0:55133->19560/tcp
nebula-docker-compose-metad1-1 docker.io/vesoft/nebula-metad:v3.6.0 "/usr/local/nebula/b…" metad1 44 seconds ago Up 43 seconds (healthy) 9560/tcp, 0.0.0.0:55130->9559/tcp, 0.0.0.0:55128->19559/tcp, 0.0.0.0:55129->19560/tcp
nebula-docker-compose-metad2-1 docker.io/vesoft/nebula-metad:v3.6.0 "/usr/local/nebula/b…" metad2 44 seconds ago Up 43 seconds (healthy) 9560/tcp, 0.0.0.0:55136->9559/tcp, 0.0.0.0:55134->19559/tcp, 0.0.0.0:55135->19560/tcp
nebula-docker-compose-storaged0-1 docker.io/vesoft/nebula-storaged:v3.6.0 "/usr/local/nebula/b…" storaged0 44 seconds ago Up 42 seconds (health: starting) 9777-9778/tcp, 9780/tcp, 0.0.0.0:55140->9779/tcp, 0.0.0.0:55141->19779/tcp, 0.0.0.0:55142->19780/tcp
nebula-docker-compose-storaged1-1 docker.io/vesoft/nebula-storaged:v3.6.0 "/usr/local/nebula/b…" storaged1 44 seconds ago Up 42 seconds (health: starting) 9777-9778/tcp, 9780/tcp, 0.0.0.0:55144->9779/tcp, 0.0.0.0:55145->19779/tcp, 0.0.0.0:55143->19780/tcp
nebula-docker-compose-storaged2-1 docker.io/vesoft/nebula-storaged:v3.6.0 "/usr/local/nebula/b…" storaged2 44 seconds ago Up 42 seconds (health: starting) 9777-9778/tcp, 9780/tcp, 0.0.0.0:55139->9779/tcp, 0.0.0.0:55137->19779/tcp, 0.0.0.0:55138->19780/tcp
這裡要注意 nebula-console 這個映象對應的服務名 nebula-docker-compose-console-1,用 nebula-console 連線 NebulaGraph 時需要用到它。
在 terminal 繼續執行命令 docker exec -it nebula-docker-compose-console-1 /bin/sh
,此時終端需要你輸入 NebulaGraph 的賬號、密碼資訊:
./usr/local/bin/nebula-console -u root -p nebula1234 --address=graphd --port=9669
在本文示例中設定賬號 -u
為 root,密碼 -p
為 nebula1234。你可以根據自己的喜好,修改為你記得住的密碼。而上面語句的地址 --address
和埠 --port
直接用預設的 graphd 和 9669 即可。
等你透過賬號和密碼連線上 nebula-console 之後,你便可以進行相關的資料庫操作,比如:你可以看下相關的服務狀態。
視覺化工具 NebulaGraph Studio 部署
還是根據文件:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/deploy-connect/st-ug-deploy/#docker_studio 走下。
先下載 nebula-studio 的 tar 包:3.8.0 版本,將下載的包放到你的 nebula-docker-compose 檔案所在的目錄下。
terminal 在 nebula-docker-compose 目錄的情況下,執行下面的命令、開啟對應的 tar 包:
mkdir nebula-graph-studio-3.8.0 && tar -zxvf nebula-graph-studio-3.8.0.tar.gz -C nebula-graph-studio-3.8.0
將 terminla 的目錄切到 nebula-graph-studio-3.8.0 這個目錄下:
cd nebula-graph-studio-3.8.0
如果你檢視過 nebula-graph-studio-3.8.0 裡的內容,裡面就一個 .yaml 檔案和說明文件,那如何搞到 nebula-studio 的映象呢?下面的命令就是拉取相關的 nebula-studio:
docker-compose pull
現在看下上面命令的執行結果:
現在,我們來啟動下 nebula-studio 服務:在剛才的 terminla 執行下面的命令
docker-compose up -d
看到下面的 nebula-graph-studio-380-web-1 已經是狀態為 Started(綠色),
我們可以在瀏覽器終端開啟 127.0.0.1:7001 訪問 nebula-stuido:
在 graphd 部分填入你本機真實 IP,賬號和密碼可輸入:root / nebula。至此,恭喜你已經有了玩轉圖資料庫的環境。
10 秒搞定部署安裝
剛我們搞了 Docker 的 NebulaGraph、NebulaGraph Studio 的部署安裝,這裡有一鍵完成之前的捷徑。
前提,你得裝好 Docker Desktop。開啟 Docker,看到介面左側的選單欄有“Extension”:
新增擴充套件之後,在搜尋框裡輸入:Nebula 便能找到對應的 NebulaGraph 擴充套件:
點選安裝之後,你便能看到 NebulaGraph Extension 已經安裝在你的 Docker Desktop 裡。點選【Studio】:
好的 nebula-studio 服務啟動 🎉,再填入相關的資訊:graphd /9669,以及賬號和密碼:root / nebula,完成登陸。
綠色通道
下面帶大家走一趟阿里雲端計算巢,薅一個付費的企業服務。(注意:填寫完資訊之後,需要稽核,稽核結果將會以簡訊形式傳送給你)
先訪問:https://market.aliyun.com/isv-nebulagraph,開啟 NebulaGraph 企業版使用介面:
登入之後,點選頁面上方的【立即使用】,填寫下相關的資訊:
正常情況下,這是需要稽核的:一般是 3 個工作日。不過,這次我們已經打點妥當直接提交資訊之後自動審批。等你填完資訊之後,前往計算巢服務頁面:https://computenest.console.aliyun.com/service/cn-hangzhou?tabKey=used,在我的服務中找到【我使用的服務】,同下圖:
我們現在開始建立 30 天的免費企業版 NebulaGraph,遇到需要填寫的地方填寫下,已經自動填充預設值的地方直接跳過,畢竟我們是白嫖的企業服務——沒有啥可以選擇的餘地。
下面是需要填寫的資訊:
- 服務例項名稱:隨便取個你喜歡的名字;
- Storage 資料盤空間:隨便填個大於 32 小於 16384 的值,這裡我填了 500;
- ECS伺服器密碼:填個你記得住的密碼;
- 交換機可用區:選擇預設的第一個可用區;
再勾選下 2 個協議,之後提交下資訊:
現在你有了一個 30 天的企業版 NebulaGraph 服務。我們現在去找到它,它還附帶了一個企業版視覺化工具 NebulaGraph Explorer。前往服務例項頁面:https://computenest.console.aliyun.com/service/instance/cn-hangzhou?secondTabKey=poc 在我的【試用服務】服務中找到剛才建立的例項:
往右拉動捲軸,看到該例項的詳情,點選【詳情】。可以看到對應的例項資訊,包括線上視覺化探索工具 nebula-explorer 的線上地址:
點選 nebula-explorer 的線上地址,就能開啟 explorer,填入詳情中 graph 服務私有 IP 對應的 ip,以及詳情提到的圖探索服務登陸資訊中的賬號和密碼。
至此,你已經可以正常使用視覺化圖探索工具來探索 NebulaGraph 了。
下面,開始我們的主菜:探索圖資料庫。因為 nebula-studio 有較多相似,又不少不同的地方。下面內容無特殊說明,說明二者通用。
探索圖資料庫
草圖構建 Schema
草圖功能是 nebula-explorer 先有,後來再新增到 nebula-studio 的功能。由奢入儉難,我們從比較樸素的開源的 nebula-studio 為例。
登陸 nebula-studio 之後,在頁面上左上方導航處選中【Schema 草圖】,nebula-explorer 對應的功能在頁面右側、從左往右數第一個圖示。
下面這個是我們本次實踐的圖模型(社群的 contributor 關係圖):
OK,根據這個圖模型上面的 Schema 資訊,我們在草圖中建立下相關的點(圓圈)和邊(一個圓指向另外個圓的連線線)資訊:
將 repo
、contributor
、org
等 3 個 tag 型別資訊,以及 PR
、屬於
等 2 個 edgetype 型別提交之後,你可以在頁面到對應的 Schema 資訊。下圖以 contributor tag 為例:
點選右上角的儲存圖示儲存之後,應用到圖空間——現在,我們要開始建立圖空間了:
至此,我們的 Schema 資訊建立完成。
nebula-studio 的小夥伴可直接點選左側的選單的 Schema(nebula-explorer 的小夥伴點選右側選單從左往右數第二個圖示)檢視圖空間資訊,等你看到 nebula-contributor 之後,點選圖空間名,可檢視相關的 Schema 資訊:
細心的你此時可以對下相關的屬性個數。
匯入圖資料
點選這裡把本次用的 nebula-contributor-dataset2024 資料集下載到本地,放在一個你能找到的目錄下。
解壓縮之後得到 5 個檔案:
- tag 點型別資料
- contributor20240110.csv
- repo20240110.csv
- org.csv
- edgetype 邊型別資料
- pr20240110.csv
- belong20240110.csv
上面的資料已經經過處理,我們開始導數環節。nebula-studio 和 nebula-explorer 的資料匯入流程相似,下面以 nebula-studio 為例:
點選左側導航的【匯入】選單(nebula-explorer 為右側第三個圖示),進入導數頁面之後我們先上傳本地檔案(支援批次上傳),將所有檔案上傳到 nebula-stuido 中:
點選同頁面右側的【匯入資料】,進行資料和 Schema 關聯。
以 contributor tag 為例,將對應的 Schema 屬性資訊同源資料進行關聯:
- 標籤:選 contributor
- 關聯檔案:選【本地】再選擇 contributor20240110.csv
- VID 列:選 Column 0
- name:選 Column 1
- number:選 Column 2
- merged_time:選 Column 3
- is_vesoft:選 Column 4
- merge_repo:選 Column 5
聰明的你應該發現了,所有的 Schema 和原資料關聯都是順序的——因為為了方便:
而邊的關聯稍顯複雜,這裡做個文字描述:
- 邊型別:選 PR
- 關聯檔案:選【本地】再選擇 pr20240110.csv
- 起點 VID 列:選 Column 0
- 終點 VID 列:選 Column 1
- number:選 Column 2
- created_time:選 Column 3
- closed_time:選 Column 4
- merged_time:選 Column 5
- is_merged:選 Column 6
- add_lines:選 Column 7
- delete_lines:選 Column 8
- rank:選 Column 2
參考下圖
同理,將其他的 2 個 tag 和 1 個 edgetype 關聯之後,點選匯入按鈕:
輸入你的 NebulaGraph 服務密碼(nebula)。等待資料匯入…
等匯入任務完成之後,我們去 Schema 頁面看下資料【統計】點選下【更新】按鈕:
如果你的資料和我的資料相同,說明你已經成功了,我們開始探索圖資料庫。
探索圖資料
現在,我們開始探索下剛匯入進去的資料。探索資料之前,我們先建立幾個索引來檢索資料:
依舊是 Schema 頁面,進入圖空間之後,看到【索引】選項,我們需要建立幾個索引:
- 標籤索引
- contributor 它的屬性 is_vesoft 為索引
- org 索引,可不選屬性
- repo 它的屬性 name 為索引
- 邊型別索引
- belong 索引,因為它本身就沒有屬性,直接建立邊索引即可
- PR 的 closed_time 屬性索引
- PR 的 is_merged 屬性索引
等我們建立完所有索引之後,對所有的索引進行【重建索引】。記得所有都得重建完成哦~~
準備工作做完,我們開始探索資料。
如果你是尊貴的企業版使用者(綠色通道使用者),我們直接用 nebula-explorer 的視覺化探索(Visual Query),和草圖類似:把 3 個 tag 拖出來,透過邊進行連結,在邊上選中邊型別,像下圖這樣:
點選右上角的【查詢】,你就可以看到相關資料了:
上圖點選了紅框中的邊聚合,將同型別的邊進行了聚合,看過去非常清爽。
上面的只是簡單查詢了圖模型的對應資料,你可以加一點點篩選條件,比如:“找出非 NebulaGraph 僱員的人的 PR 合併情況”,你可以在 Visual Query 介面加入過篩條件:
執行下看到:
而 nebula-stuido 的使用者不能透過拖拽看到資料,可以前往左上角導航的【控制檯】功能,選擇圖空間為 nebula-contributor 之後,輸入下面的查詢語句:
MATCH (v0:`contributor`)-[e1:`PR`]->(v2:`repo`)-[e3:`屬於`]->(v1:`org`) RETURN e1,e3 LIMIT 100
得到和 nebula-explorer 類似的結果:
點選【視覺化】,得到下圖類似的視覺化結果(因為查詢時隨機返回 100 條邊,可能你的資料和下圖有出入):
恭喜,你現在已經會圖探索了。
可能你對文中用到的一些術語感到困惑,記得去讀一讀 NebuleGraph 的文件:https://docs.nebula-graph.com.cn/3.6.0/
完成本文實操的小夥伴,可以聯絡星雲小姐姐領取限量的春節學圖禮包喲~
下面,放幾個基於本資料集的一些探索圖:
PR 還沒被合併的小夥伴分佈(下圖為 nebula-explorer 的視覺化展示,用上了點的換圖示功能):
對圖資料庫 NebulaGraph 感興趣?歡迎前往 GitHub ✨ 檢視原始碼:https://github.com/vesoft-inc/nebula;
想要一起提高文件的可讀性麼?一起來給『文件 nGQL 示例新增註釋』吧~請瞄準那條讓人費解的 nGQL 語句,留下你的講解 (///▽///)
點選下圖瞭解活動詳情 🥹