這是一份簡單到沒朋友的上手圖資料庫的圖文教程

NebulaGraph發表於2024-03-13

前幾天和社群小夥伴友好交流(閒聊),不少加入 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 關係圖):

image|555x500

OK,根據這個圖模型上面的 Schema 資訊,我們在草圖中建立下相關的點(圓圈)和邊(一個圓指向另外個圓的連線線)資訊:

repocontributororg 等 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 語句,留下你的講解 (///▽///)

點選下圖瞭解活動詳情 🥹

相關文章