在 GKE 上使用 Bigtable 執行 JanusGraph

圖形資料庫透過針對資料實體及其之間的關係建立模型,來協助您發掘深入分析資料。JanusGraph 是一個支援處理大量資料的圖形資料庫。本頁面介紹的概念有助於您在 Google Kubernetes Engine 上執行 JanusGraph,並將 Bigtable 做為儲存後端。 Google Cloud

本文適用於系統架構師、資料庫管理員和 DevOps 專業人員,他們有意在Google Cloud 使用 Bigtable 做為儲存空間後端,執行 JanusGraph 圖形資料庫。本文假設您熟悉 Google Kubernetes Engine (GKE)、Kubernetes Pod、BigtableElasticsearch

總覽

在圖形術語中,實體稱為「節點」或「端點」,關係則稱為「邊線」。在 JanusGraph 中,端點和邊線都可以有額外的關聯資料,這些資料會透過屬性提供。

屬性圖的範例。

上圖是屬性圖的範例。

圖形資料庫可協助您針對各種網域和活動建立模型:

  • 社交網路
  • 金融交易 (用於詐欺分析)
  • 實體或虛擬系統網路

建立圖形資料庫時,您有時會建立數百萬個甚至是數十億個頂點和邊線。當您將 JanusGraph 和 Bigtable 搭配使用來做為基礎儲存層時,您既可以執行快速查詢 (稱為圖形周遊),也可以根據所需的大小和總處理量來獨立擴充儲存層。JanusGraph 也使用可外掛的索引後端,為頂點和邊緣屬性提供全文索引。

您可以在 GKE 上部署可擴充的 JanusGraph 基礎架構,使用 Elasticsearch 做為索引後端 (在 StatefulSet 的 Pod 中執行),並使用 Bigtable 做為儲存空間後端。完成後,您就可以遍歷圖形資料中存在的關係。

下圖顯示這些元素如何整合。

在 GKE 上使用 Bigtable 部署 JanusGraph。

上圖顯示在 GKE 上部署 JanusGraph,並搭配使用 Elasticsearch 和 Bigtable。

Bigtable 中的 JanusGraph 資料

JanusGraph 會將圖形資料儲存為鄰接清單。每一列代表一個頂點、任何相鄰頂點 (邊),以及頂點和邊的屬性中繼資料。資料列鍵是頂點的專屬 ID。頂點與另一個頂點之間的每個關係,以及進一步定義關係的任何屬性,都會儲存為邊緣或邊緣屬性資料欄。欄位限定符和欄位值都會儲存定義邊緣的資料,且符合 Bigtable 最佳做法。每個頂點屬性都會儲存為個別資料欄,同樣使用資料欄限定符和資料欄值來定義屬性。

下圖顯示這個儲存空間結構。

JanusGraph 鄰接清單儲存空間結構。

這張圖表顯示小型圖形片段的邏輯儲存結構,以及兩個頂點列的邏輯詳細資料。在圖表中,這兩列範例代表兩個頂點。第一個頂點標示單一頂點屬性,並透過兩個不同的邊緣與其他兩個頂點相關。第二個頂點包含兩個屬性和一條邊緣的資料欄。

下圖的頂點邊緣邏輯資料模型提供邊緣或邊緣屬性資料欄的資料欄限定符和值詳細資料。

JanusGraph 邊緣和邊緣屬性資料欄。

每個相鄰頂點的資料欄都會儲存該邊緣的中繼資料。資料欄限定符包含邊緣關係和邊緣方向的中繼資料,以及相鄰頂點的指標。資料欄值包含邊緣標籤和任何其他邊緣屬性。由於可沿任一方向追蹤遍歷,因此邊緣會儲存兩次,邊緣關係的每一端各儲存一次。雙向邊緣儲存空間可大幅提升遍歷效能,但由於額外儲存空間的備援和非原子邊緣突變,因此會有一些取捨。

下圖是頂點屬性資料欄的邏輯資料模型。

屬性資料欄的 JanusGraph 資料欄值。

上圖詳細說明邊緣資料欄的資料欄限定符和值。

每個頂點屬性都會儲存為獨立的資料欄。資料欄限定詞是屬性鍵的專屬 ID。資料欄值包含屬性的 ID 和屬性值。

此外,JanusGraph 也會依賴 Bigtable 的資料列和資料欄限定符字典順序,提升查詢效能。

後續步驟