分享方式:


Azure Cosmos DB for Apache Gremlin 是什麼?

適用於: Gremlin

Azure Cosmos DB 是一個完全受控的 NoSQL 和關聯式資料庫,適用於新式應用程式開發。

Azure Cosmos DB for Apache Gremlin 是一項圖形資料庫服務,可用來儲存具有數十億個頂點和邊緣的大量圖形。 您可以在幾毫秒延遲的情況下查詢圖形,並輕鬆地發展圖形結構。 API for Gremlin 是基於 Apache TinkerPop (這是一種使用 Gremlin 查詢語言的圖形運算架構) 所建置的。

重要

Azure Cosmos DB 圖形引擎會嚴格遵循 Apache TinkerPop 規格。 不過,針對 Azure Cosmos DB 特定的實作詳細資料有一些差異。 某些 Apache TinkerPop 支援的功能無法在 Azure Cosmos DB 中使用,若要深入了解不支援的功能,請參閱 Apache TinkerPop 相容性 一文。

API for Gremlin 結合了圖形資料庫演算法的強大功能與可高度調整的受控基礎結構。 這個方法為與不靈活或關聯限制式相關的常見資料問題提供了獨特且更有彈性的解決方案。

提示

想要在無承諾用量的情況下試用 API for Gremlin 嗎? 請使用免費試用 Azure Cosmos DB 建立一個 Azure Cosmos DB 帳戶。

API for Gremlin 優點

API for Gremlin 新增了在 Azure Cosmos DB 上建置的優點:

  • 可彈性調整的輸送量和儲存體︰實務上的圖表需要調整超過單一伺服器的產能。 Azure Cosmos DB 支援可水平調整的圖形資料庫,該資料庫在儲存體和已佈建輸送量方面沒有大小限制。 隨著圖形資料庫規模的擴增,資料會使用圖表資料分割自動散發。

  • 多重區域複寫:Azure Cosmos DB 可以自動將圖形資料複寫至全球各地的任何 Azure 區域。 全域複寫可簡化需要全域資料存取權的應用程式開發。 除了將世界各地的讀寫延遲降至最低之外,Azure Cosmos DB 還提供服務管理的區域容錯移轉機制。 此機制可在區域服務中斷的罕見情況下,確保應用程式的持續性。

  • 使用最廣泛採用的圖形查詢標準進行快速查詢和遍訪:儲存異質頂點和邊緣,並透過熟悉的 Gremlin 語法進行查詢。 Gremlin 是命令式的功能性查詢語言,其提供豐富的介面來實作常用圖形演算法。 API for Gremlin 支援豐富的即時查詢和周遊,而無需指定結構描述提示、次要索引或檢視。 如需詳細資訊,請參閱使用 Gremlin 查詢圖形

  • 完全受控的圖形資料庫:Azure Cosmos DB 不需要管理資料庫和機器資源。 大部分的現有圖形資料庫平台都受制於其基礎結構限制,而且往往需要較高程度的維護,以確保其作業正常運作。 作為完全受控的服務,Cosmos DB 可讓您不需要管理虛擬機器、更新執行階段軟體、管理分區化或複寫,或處理複雜的資料層升級。 每個圖表都會自動備份,以防區域性失敗。 此管理可讓開發人員專注在開發應用程式值,而不是在執行操作和管理圖形資料庫。

  • 自動編製索引:API for Gremlin 預設會自動為圖形中的節點 (也稱為頂點) 和邊緣的所有屬性編製索引,並且不需要任何結構描述或建立次要索引。 如需詳細資訊,請參閱在 Azure Cosmos DB 中編製索引

  • Apache TinkerPop 相容性:API for Gremlin 支援開放原始碼 Apache TinkerPop 標準。 Apache TinkerPop 標準擁有豐富的應用程式和程式庫生態系統,可與 API 輕鬆整合。

  • 可調式一致性層級:Azure Cosmos DB 提供五個明確定義的一致性層級,讓您可在應用程式的一致性和效能之間做出適當的權衡。 針對查詢和讀取作業,Azure Cosmos DB 提供五個不同的一致性等級:強式、限定過期、工作階段、一致的前置和最終。 這些細微且定義完善的一致性等級,可讓您在一致性、可用性與延遲三者間做出合理取捨。 如需詳細資訊,請參閱 Azure Cosmos DB 中的可調式資料一致性層級

API for Gremlin 的常見案例

以下是某些可以使用 Azure Cosmos DB 圖形支援的案例︰

  • 社交網絡/Customer 365:透過結合客戶及其與其他人互動的相關資料,就能開發個人化體驗、預測客戶行為,或將興趣雷同的人們聯繫在一起。 Azure Cosmos DB 可用來管理社交網路並追蹤客戶的喜好設定和資料。

  • 建議引擎:這是零售業常用案例。 藉由結合產品、使用者和使用者互動的相關資訊,例如購物、瀏覽或商品評價,您可以建立自訂的推薦。 Azure Cosmos DB 憑藉其低延遲、彈性調整及原生的圖形支援,很適合用於這些案例。

  • 地理空間:許多關於電信、物流和旅遊規劃方面的應用程式,需要尋找區域內感興趣的地點,或找出兩個地點之間的最短/最佳路線。 Azure Cosmos DB 很自然地可以解決這些問題。

  • 物聯網:以圖形模擬 IoT 裝置之間的網路和連線,讓您更了解裝置和資產的狀態。 您也可以了解網路的某個部分變動時可能對其他部分造成什麼影響。

圖形資料庫的簡介

實務上的資料會自然連線。 傳統的資料模型化著重於個別定義實體,以及計算這些實體在執行階段上的關聯性。 雖然此模型有其優點,但要在其限制下管理高度連結的資料並不容易。

圖形資料庫方法則是依賴儲存層中持續的關聯性,以達到高效率的圖形擷取作業。 API for Gremlin 支援屬性圖型模型

屬性圖形物件

圖形屬性是由頂點邊緣組成的結構。 這兩個物件能夠以任意數目的索引鍵值組作為屬性。

  • 頂點/節點:頂點代表特定的實體,例如人員、地點或事件。

  • 邊緣/關聯性:邊緣代表頂點之間的關聯性。 例如,某個人可能認識另一個人、參與某個事件,或者最近去過某個地點。

  • 屬性:屬性表達頂點和邊緣的相關資訊 (或中繼資料)。 頂點或邊緣中可以有任意數目的屬性,並且可用來說明及篩選查詢中的物件。 屬性範例包括具有名稱和年齡的頂點,或是具有時間戳記和/或加權的邊緣。

  • 標籤 - 標籤是頂點或邊緣的名稱或識別碼。 標籤可以將多個頂點或邊緣分組,讓群組中的所有頂點/邊緣都具有特定標籤。 例如,圖形可以有多個標籤為「人員」的頂點。

圖形資料庫通常包含在 NoSQL 或非關聯式資料庫類別中,因為沒有結構描述或受限資料模型的相依性。 這種缺乏結構描述的特性,可讓連接的結構自然又有效率地模型化和儲存。

圖形資料庫的範例

讓我們利用一個範例圖表了解如何以 Gremlin 表達查詢。 下圖顯示的商務應用程式以圖表形式管理使用者、興趣和裝置的相關資料。

顯示人員、裝置和興趣的範例屬性圖表。

該圖具有以下 [頂點] 類型。 這些類型在 Gremlin 中也稱為 [標籤]

  • 人員:該圖中包含三個人:Robin、Thomas 和 Ben。

  • 興趣:在此範例中,他們的興趣包括足球比賽。

  • 裝置:人員使用的裝置。

  • 作業系統︰執行裝置的作業系統。

  • 地點:存取裝置的位置。

我們透過下列邊緣類型,表示這些實體之間的關聯性︰

  • 認識:表示熟悉。 例如,「Thomas 認識 Robin」。

  • 感興趣:表示圖形中人員的興趣。 例如,「Ben 對足球感興趣」。

  • 執行 OS:表示裝置執行的 OS。 例如,「膝上型電腦執行 Windows OS」。

  • 使用:表示某個人所使用的裝置。 例如,「Robin 使用序號 77 的 Motorola 手機」。

  • 位於:表示存取裝置的位置。

Gremlin 主控台是 Apache TinkerPop 所提供的互動式終端機,此終端機會用來與圖表資料互動。 如需詳細資訊,請參閱 Gremlin 主控台快速入門。 也可以在您選擇的平台 (Java、Node.js、Python 或 .NET) 使用 Gremlin 驅動程式執行這些作業。 下列範例會示範如何使用 Gremlin 主控台對此圖表資料執行查詢。

首先,來看看建立、讀取、更新和刪除 (CRUD)。 下列 Gremlin 語句會使用一些屬性將 Thomas 頂點 插入圖形中:

g.addV('person').
  property('id', 'thomas.1').
  property('firstName', 'Thomas').
  property('lastName', 'Andersen').
  property('age', 44)

提示

如果您依照這些範例操作,則在建立圖形時可以使用這些屬性 (agefirstNamelastName) 中的任一個作為分割區索引鍵。 不支援將 id 屬性作為圖形中的分割區索引鍵。

接著,下列 Gremlin 陳述式會在 ThomasRobin 之間插入 [認識] 邊緣。

g.V('thomas.1').
  addE('knows').
  to(g.V('robin.1'))

下列查詢會依名字的遞減順序傳回 [人員] 頂點:

g.V().
  hasLabel('person').
  order().
  by('firstName', decr)

圖表的威力在於當您需要回答「Thomas 的朋友使用什麼作業系統?」這種問題時。 您可以執行這個 Gremlin 周遊,從圖表中取得這項資訊︰

g.V('thomas.1').
  out('knows').
  out('uses').
  out('runsos').
  group().
  by('name').
  by(count())

下一步