圖數據庫 TigerGraph 使用全攻略

圖數據庫 TigerGraph 使用全攻略

與關係型數據庫或其他類型的 NoSQL 數據庫相比,圖數據庫提供了更有效的關係和網絡建模方法。在 1999 年左右,圖數據庫領域還是 Neo4j 一家獨大,但是發展至今,該領域也出現了很多新玩家和新產品。

TigerGraph 是一款“實時原生並行圖數據庫”,既可以部署在雲端也可以部署在本地,支持垂直擴展和水平擴展,可以對集群中的圖數據自動分區,遵循 ACID 標準,並且提供了內置的數據壓縮功能。它使用了一種消息傳遞架構,這種架構具備了可隨數據增長而伸縮的並行性。

TigerGraph 被設計用來執行深層鏈接分析以及實時在線事務處理(OLTP)和大容量數據加載。深度鏈接分析是指從一個頂點開始遍歷圖,找到三個或更多的跳轉關係,並分析出結果。目前大多數圖數據庫都是為 OLTP 設計的,用於分析少量的關係跳數,其他的分析功能基本是後續添加的。

目前,有一些開源的圖查詢語言已經得到了廣泛的採用,如 Cypher、Gremlin 和 SPARQL,不過,TigerGraph 使用了一種新的查詢語言 GSQL。GSQL 將 SQL 風格的查詢語法與 Cypher 風格的圖導航語法結合在一起,並加入了過程編程和用戶自定義函數。

我對 TigerGraph 的 GSQL 查詢語言一直有一種說不清的感覺,不可否認的是,它是一種很好的設計,支持並行化,且可以將 Cypher 轉換為 GSQL,便於從 Neo4j 數據庫轉到 TigerGraph 的開發者使用。但是,面對一門全新的編程語言,我總會問自己,它是否值得我花時間和精力來學習呢?

TigerGraph 的架構

從下圖中可以看出,TigerGraph 包含了一個 ETL 加載器、圖數據存儲和處理引擎、查詢語言和可視化客戶端以及 REST API,並集成了很多企業數據基礎設施服務。再往下的系統流程圖清楚地表明,TigerGraph 使用 Apache Kafka 與圖形處理和存儲引擎進行通信,使用 Nginx Web 服務器處理 GraphStudio 和來自用戶的 GSQL 請求,並將它們傳給後端服務器。

圖數據庫 TigerGraph 使用全攻略


TigerGraph Analytics Platform 包含了圖數據存儲引擎、圖數據處理引擎和三種類型的 API。它可以在本地、雲端或混合環境中運行。

傳給 TigerGraph 的消息可以在頂點或邊級別進行並行處理。RESTPP 是一種增強的 REST API 服務器,主要用於任務管理。

TigerGraph 每小時可以加載多達 150 GB 的數據,每臺機器每秒可以遍歷數億個頂點或邊,將 20 億個日常事件以流的方式實時地傳輸到包含 1 千億個頂點和 6 千億條邊的圖中(這些圖數據處於包含 20 臺商用機器的集群上),並將實時分析與大規模離線數據處理統一起來。

圖數據庫 TigerGraph 使用全攻略


TigerGraph 使用了幾種流行的開源組件:用於處理 Web 流量的 Nginx、消息隊列 Apache Kafka、用於管理 Kafka 集群的 Apache Zookeeper。平臺的其餘部分則使用了專有代碼。

在 Docker 中安裝 TigerGraph

你可以在各種流行的 Linux(加上 Docker 和 VirtualBox)上安裝 TigerGraph。我選擇在 iMac 上使用 Docker 來安裝。在開始安裝之前,我更新了 Docker,並將 Docker 可用的 RAM 和處理器分別增加到 4 GB 和 4 個內核。最後,我將 TigerGraph 鏡像下載到本地。

複製代碼

Martins-iMac:Downloads mheller$ docker load < ./tigergraph-developer-2.2.3-docker-image.tar.gz
8823818c4748: Loading layer 119MB/119MB
19d043c86cbc: Loading layer 15.87kB/15.87kB
883eafdbe580: Loading layer 14.85kB/14.85kB
4775b2f378bb: Loading layer 5.632kB/5.632kB
75b79e19929c: Loading layer 3.072kB/3.072kB
2106b49716cb: Loading layer 7.168kB/7.168kB
da572f4e0c2f: Loading layer 4.034GB/4.034GB
6cd767fef659: Loading layer 338.4kB/338.4kB
Loaded image: tigergraph:2.2.3
Martins-iMac:Downloads mheller$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
tigergraph 2.2.3 e1911655f9a7 3 weeks ago 4.11GB
hello-world latest 4ab4c602aa5e 2 months ago 1.84kB

安裝過程中沒有出現任何警報,啟動過程也很順利。

複製代碼

Martins-iMac:Downloads mheller$ docker run -i -t --name tigergraph -p 4142:14240 tigergraph:2.2.3
Welcome to TigerGraph Developer Edition, for non-commercial use only.

[RUN ] rm -rf /home/tigergraph/tigergraph/logs/ALL*.pid
[FAB ][2018-11-30 21:56:06] check_port_of_admin_servers
[RUN ] /home/tigergraph/tigergraph/.gium/GSQL_LIB/service/../scripts/admin_service.sh start
/home/tigergraph/tigergraph/bin/admin_server/config.sh
=== zk ===
[SUMMARY][ZK] process is down
[SUMMARY][ZK] /home/tigergraph/tigergraph/zk is ready
=== dict ===
[SUMMARY][DICT] process is down
[SUMMARY][DICT] dict server has NOT been initialized
=== kafka ===
[SUMMARY][KAFKA] process is down
[SUMMARY][KAFKA] queue has NOT been initialized
=== gse ===
[SUMMARY][GSE] process is down
[SUMMARY][GSE] id service has NOT been initialized
=== gpe ===
[SUMMARY][GPE] process is down
[SUMMARY][GPE] graph has NOT been initialized
=== nginx ===
[SUMMARY][NGINX] process is down
[SUMMARY][NGINX] nginx has NOT been initialized
=== restpp ===
[SUMMARY][RESTPP] process is down
[SUMMARY][RESTPP] restpp has NOT been initialized
[FAB ][2018-11-30 21:56:47] launch_zookeepers
[FAB ][2018-11-30 21:57:00] launch_gsql_subsystems:DICT
[FAB ][2018-11-30 21:57:04] launch_kafkas
[FAB ][2018-11-30 21:57:22] launch_ts3s
[FAB ][2018-11-30 21:57:25] launch_gsql_subsystems:GSE
[FAB ][2018-11-30 21:57:28] launch_gsql_subsystems:GPE
[FAB ][2018-11-30 21:57:31] launch_gsql_subsystems:NGINX
[FAB ][2018-11-30 21:57:34] launch_gsql_subsystems:RESTPP
[FAB ][2018-11-30 21:57:38] check_port_of_vis_services
[RUN ] LD_LIBRARY_PATH="/home/tigergraph/tigergraph/bin"
home/tigergraph/tigergraph/visualization/utils/start.sh
[FAB ][2018-11-30 21:57:39] check_port_of_admin_servers
[RUN ]
home/tigergraph/tigergraph/.gium/GSQL_LIB/service/../scripts/admin_service.sh start
home/tigergraph/tigergraph/bin/admin_server/config.sh
[RUN ] /home/tigergraph/tigergraph/dev/gdk/gsql/gsql_server_util START || :
=== zk ===
[SUMMARY][ZK] process is up
[SUMMARY][ZK] /home/tigergraph/tigergraph/zk is ready
=== kafka ===
[SUMMARY][KAFKA] process is up
[SUMMARY][KAFKA] queue is ready
=== gse ===
[SUMMARY][GSE] process is up
[SUMMARY][GSE] id service has NOT been initialized (not_ready)

=== dict ===
[SUMMARY][DICT] process is up
[SUMMARY][DICT] dict server is ready
=== ts3 ===
[SUMMARY][TS3] process is up
[SUMMARY][TS3] ts3 is ready
=== graph ===
[SUMMARY][GRAPH] graph has NOT been initialized
=== nginx ===
[SUMMARY][NGINX] process is up
[SUMMARY][NGINX] nginx is ready
=== restpp ===
[SUMMARY][RESTPP] process is up
[SUMMARY][RESTPP] restpp is ready
=== gpe ===
[SUMMARY][GPE] process is up
[SUMMARY][GPE] graph has NOT been initialized (not_ready)
=== gsql ===
[SUMMARY][GSQL] process is up
[SUMMARY][GSQL] gsql is ready
=== Visualization ===
[SUMMARY][VIS] process is up (VIS server PID: 1242)
[SUMMARY][VIS] gui server is up
[RUN ] rm -rf ~/.gsql/gstore_gs*_autostart_flag
Done.
tigergraph@2089c417aa54:~$

執行到這一步,我已經啟動了 gsql 客戶端,並完成了一些命令行教程和演示。

複製代碼

tigergraph@2089c417aa54:~$ ls /home/tigergraph/
friendship.csv hello2.gsql hello.gsql person.csv tigergraph tigergraph_coredump
tigergraph@2089c417aa54:~$ gsql
Welcome to TigerGraph Developer Edition, for non-commercial use only.
GSQL-Dev >

GSQL 教程和示例

GSQL 101 教程(https://docs.tigergraph.com/intro/gsql-101)教你如何創建圖模式、加載數據和運行查詢。對於完成某些操作(例如安裝自定義查詢)所花費的時間,我感到有些驚訝,但它們確實與文檔所描述的是一致的。

為了讓你對 GSQL 有個直觀的感受,以下的自定義查詢演示瞭如何使用累加器、嵌套查詢和自定義查詢。

複製代碼

USE GRAPH social
CREATE QUERY hello2 (VERTEX<person> p) FOR GRAPH social{
OrAccum @visited = false;
AvgAccum @@avgAge;
Start = {p};
FirstNeighbors = SELECT tgt
FROM Start:s -(friendship:e)-> person:tgt
ACCUM tgt.@visited += true, s.@visited += true;
SecondNeighbors = SELECT tgt
FROM FirstNeighbors -(:e)-> :tgt
WHERE tgt.@visited == false
POST_ACCUM @@avgAge += tgt.age;
PRINT SecondNeighbors;
PRINT @@avgAge;
}
INSTALL QUERY hello2
RUN QUERY hello2("Tom")
/<person>

GSQL 的演示示例(https://docs.tigergraph.com/dev/gsql-examples)涵蓋了其他內容,包括協作過濾、PageRank、產品推薦和最短路徑算法,這些也值得研究一下。由於開發者許可只允許每個數據庫使用一個圖,所以你需要通過 DROP ALL 來刪除在練習中創建的社交圖數據。

GSQL 圖算法庫(https://docs.tigergraph.com/graph-algorithm-library)實現了標準圖算法,並經過測試。你可以從 GitHub 下載這個庫(https://github.com/tigergraph/ecosys/tree/master/graph_algorithms)。除了基本算法,這個庫還提供了安裝腳本,可用於生成自定義算法。這些算法包括緊密度中心性、連通分量檢測、社區檢測、PageRank、最短路徑和三角計數。

GraphStudio 和 TigerGraph 測試驅動

除了 GSQL 的命令行界面外,TigerGraph 還提供了一個叫作 GraphStudio 的 GUI。你可以通過瀏覽 localhost:4142 在本地實例上訪問它,如下所示。

圖數據庫 TigerGraph 使用全攻略


TigerGraph 的 GraphStudio GUI 可以用於設計圖模式、加載數據和探索圖。查詢使用 GSQL 編寫。

出於學習的目的,你可能需要了解下 TigerGraph 測試驅動演示(https://testdrive.tigergraph.com/main/dashboard)。它們是隻讀的圖數據庫,包括一些預定義的參數化查詢。當然,你也可以編寫自己的查詢。

包含了較大數據集(包含了數十億條邊)的三個測試驅動用例使用了 Amazon EC2 r4.4xlarge(16 個 vCPU 和 122 GB RAM)實例,而包含小數據集的兩個測試驅動用例使用了更經濟的 Amazon EC2 t2.xlarge(4 個 vCPU 和 16 GB RAM)實例。根據我的經驗,即使對於具有 44 億邊緣的反欺詐演示(如下所示),它的性能也相當不錯。

圖數據庫 TigerGraph 使用全攻略


使用 GraphStudio 對包含用戶、設備和交易數據的大型(44 億條邊)圖執行欺詐檢測查詢。GraphStudio 和 TigerGraph 都運行在 Amazon EC2 r4.4xlarge 實例上。

TigerGraph 基準測試

TigerGraph 提供了一些基準測試(https://www.tigergraph.com/benchmark/),與其他幾個圖數據庫(Neo4j、Amazon Neptune、JanusGraph 和 ArangoDB)進行了比較,測試了數據加載時間和圖分析查詢時間,所有這些任務在 TigerGraph 中都可以進行並行化操作。毫不奇怪的是,因為基準測試的設置方式偏向於 TigerGraph 的長處,所以 TigerGraph 在所有測試中均勝出,有些還勝出了一大截。其中令我印象深刻的基準測試是 TigerGraph 集群可擴展性測試,當使用 8 臺機器時,它的速度提升了 6.7 倍。

在這種情況下,你需要問自己的問題是:“圖數據庫可以幫我解決哪些問題”?如果你要進行在線事務處理(OLTP),那你可能就不會關心批量加載和多跳分析查詢性能。畢竟,唯一真正重要的衡量標準是數據庫能為應用程序做些什麼,這也是為什麼在採用新技術時需要花些時間進行概念驗證。

圖數據庫 TigerGraph 使用全攻略


TigerGraph 集群可擴展性測試,使用 8 臺機器時速度提升 6.7 倍。如果可擴展性可以達到完美,那麼這條線應該是直的,而且速度提升將達到 8 倍。

雲端的 TigerGraph

在我進行這次調研時,TigerGraph 發佈了一款雲產品,將於 2019 年在 AWS 上開始試用。這是對 TigerGraph 目前授權版 AWS 和 Azure 鏡像的一個補充。

英文原文:https://www.javaworld.com/article/3330736/application-development/tigergraph-review-a-graph-database-designed-for-deep-analytics.html?upd=1547004107229


分享到:


相關文章: