快速入門:使用Gremlin 主控台建立、查詢及流覽 Azure Cosmos資料庫資料庫

適用于 :Gremlin API

Azure Cosmos DB 是 Microsoft 的全域分散式多模型資料庫服務。 您可以快速建立及查詢檔、鍵/值和圖形資料庫,這都受益于 Azure Cosmos DB 核心的全域分配和水準縮放功能。

此快速入門示範如何使用 Azure 入口網站建立 Azure Cosmos DB Gremlin API帳戶、資料庫和圖形 (容器) ,然後使用Apache TinkerPopGremlin主控台處理 Gremlin API 資料。 在此教學課程中,您可以建立及查詢頂點和邊緣、更新頂點屬性、查詢頂點、移動圖形,以及放置頂點。

Azure Cosmos從 Apache Gremlin 主控台使用 DB

Gremlin 主機是以Groovy/JAVA 為基礎,在 Linux、Mac 和 Windows。 您可以從Apache TinkerPop 網站下載。

先決條件

您需要有 Azure 訂閱,以建立 Azure Cosmos DB 帳戶,以便快速入門。

如果您沒有 Azure 訂閱,請先建立免費帳戶再開始。

您也需要安裝 Gremlin 主控台。 建議 的版本為 v3.4.3 或更新版本。 (若要在 Windows 使用 Gremlin Console,您需要安裝 JAVA Runtime ,至少需要 JAVA 8,但最好使用 JAVA 11) 。

建立資料庫帳戶

  1. 在新的瀏覽器視窗中,請登錄 Azure 入口網站

  2. 在左側功能表中,選取建立 資源

    在 Azure 入口網站中建立資源

  3. 在新增頁面上,選取資料庫 Azure Cosmos DB

    Azure 入口網站資料庫窗格

  4. 在建立Azure Cosmos DB 帳戶頁面上,輸入新 Azure Cosmos DB 帳戶的設定。

    設置 價值 描述
    訂閱 訂閱名稱 選取要用於此 Azure 帳戶的 Azure 訂閱Cosmos帳戶。
    資源群組 資源組名 選取資源群組,或選取建立 資源群組,然後輸入新資源群組的唯一名稱。
    帳戶名稱 輸入唯一名稱 輸入唯一名稱,以識別 Azure Cosmos DB 帳戶。 您的帳戶 URI 將會 gremlin.azure.com 附加到您唯一的帳戶名稱。

    帳戶名稱只能使用小寫字母、數位和連字號 (-) ,且必須介於 3 到 44 個字元之間。
    API Gremlin (圖形) API 會決定要建立的帳戶類型。 Azure Cosmos DB 提供五個 API:檔資料庫的核心 (SQL) 、圖形資料庫的Gremlin、檔資料庫的MongoDB、Azure Table 和 Cassandra。 您必須為每個 API 建立個別的帳戶。

    選取 (圖形 ) ,因為在這個快速入門中,您建立的資料表可與 Gremlin API 一起運作。

    深入瞭解Gremlin API
    位置 最接近使用者的區域 選取要託管 Azure 帳戶的地理位置Cosmos DB 帳戶。 使用最接近使用者的位置,讓他們以最快的速度存取資料。
    容量模式 已置備輸送量或 Serverless 選取 已置備輸送量 以在已配置 輸送量模式中建立 帳戶。 選取 無伺服器 以在無伺服器 模式中建立 帳戶。
    使用 Azure Cosmos DB 免費層級折扣 申請不適用 使用 Azure Cosmos DB 免費層級,您將在帳戶中免費取得第一個 1000 RU/s 和 25 GB 的儲存空間。 深入瞭解免費 等級

    注意

    每個 Azure 訂閱的 DB 帳戶Cosmos一個免費層級 Azure,而且建立帳戶時必須加入宣告。 如果您沒看到適用免費等級折扣的選項,這表示訂閱中的另一個帳戶已使用免費層級啟用。

    Azure 和 DB 的新帳戶Cosmos頁面

  5. 在全域 發佈選項卡 中,設定下列詳細資料。 您可以為此快速入門保留預設值:

    設置 價值 描述
    Geo-Redundancy 禁用 將地區與配對區域配對,以啟用或停用您的帳戶上的全域發佈。 您稍後可以新增更多區域至您的帳戶。
    多區域寫入 禁用 多區域寫入功能可讓您利用全球資料庫和容器的部署輸送量。

    注意

    如果您選取 Serverless 做為容量模式,則無法 使用下列選項

    • 適用免費等級折扣
    • 異地重複
    • 多區域寫入
  6. 您也可以在下列選項卡中設定其他詳細資料:

  7. 選取 Review + create

  8. 建立帳戶需要幾分鐘的時間。 等待入口網站顯示恭喜!您的 Azure Cosmos DB 帳戶已建立頁面

    Azure Cosmos資料庫帳戶建立頁面

新增圖形

現在,您可以使用 Azure 入口網站中的資料管理器工具來建立圖形資料庫。

  1. 選取資料管理器新增Graph。

    新增Graph區域會顯示在最右邊,您可能需要向右卷軸才能看到。

    Azure 入口網站資料管理器,新增Graph頁面

  2. 在新增 圖形頁面中 ,輸入新圖形的設定。

    設置 建議的值 描述
    資料庫識別碼 範例資料庫 輸入 範例資料庫 做為新資料庫的名稱。 資料庫名稱必須介於 1 到 255 個字元之間,且不能包含 / \ # ? 或結尾空格。
    輸送量 400 個 RUs 將輸送量變更為每秒 400 個要求單位 (RU/s) 。 如果您想要減少延遲,您可以稍後放大輸送量。
    Graph識別碼 範例圖形 輸入 範例圖形 做為新收藏的名稱。 Graph名稱具有與資料庫 ID 相同的字元需求。
    分區鍵 /pk 所有Cosmos DB 帳戶都需要一個分區鍵,以水準縮放。 瞭解如何選取適當的分區鍵,Graph資料分割一文
  3. 填寫表單後, 請選取確定 。

連線應用程式服務/Graph

  1. 啟動 Gremlin 主控台之前,請建立或修改目錄中的遠端 secure.yaml apache-tinkerpop-gremlin-console-3.2.5/conf 設定檔。

  2. 填寫主機、使用者名稱、密碼、connectionPool序列化程式組組,如下表所定義:

    設置 建議的值 描述
    主機 [帳戶名稱gremlin.cosmos.azure.com] 請參閱下列螢幕擷取畫面。 這是 Azure 入口網站 [概觀> 頁面上的 Gremlin URI 值,以方括弧表示,結尾為 :443/ 已移除。 注意:請務必使用 Gremlin 值,而不是結尾為 [account-name.documents.azure.com] 的 URI,這可能會導致稍後嘗試執行 Gremlin 查詢時發生「主機未及時回應」例外。
    港口 443 設為 443。
    使用者 您的使用者名稱 表單的資源, /dbs/<db>/colls/<coll> 其為 <db> 資料庫名稱, <coll> 也是您的集合名稱。
    密碼 您的主鍵 請參閱下方的第二個螢幕擷取畫面。 這是主鍵,您可以在主鍵方塊中,從 Azure 入口網站之 Key 頁面進行取用。 使用方塊左側的複製按鈕來複製值。
    connectionPool {enableSsl:true} TLS 的連接集區設定。
    序列化器 { className:org.apache.tinkerpop.gremlin。
    driver.ser.GraphSONMesageSerializerV2d0,
    config: { SerializeResultToString: true }}
    設定為此值,並刪除在值上線 \n 時的任何分行符號。

    針對主機值,請從概觀頁面複製Gremlin URI值:

    在 Azure 入口網站中的概觀頁面上,查看並複製Gremlin URI 值

    針對密碼值,請從 Key 頁面複製 主鍵

    在 Azure 入口網站 、金鑰頁面查看及複製主鍵

    您的遠端安全.yaml 檔案看起來應該像這樣:

    hosts: [your_database_server.gremlin.cosmos.azure.com] 
    port: 443
    username: /dbs/your_database/colls/your_collection
    password: your_primary_key
    connectionPool: {
      enableSsl: true
    }
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { serializeResultToString: true }}
    

    請務必將 hosts 參數的值括在括弧中 []。

  3. 在終端機中, bin/gremlin.bat 執行或 bin/gremlin.sh 啟動 bin/gremlin.bat

  4. 在終端機中,執行 :remote connect tinkerpop.server conf/remote-secure.yaml 以連接到您的應用程式服務。

    提示

    如果您收到錯誤,請確保您更新了遠端 secure.yaml 檔案中的序列值,如步驟 No appenders could be found for logger 2 所述。 如果您的組組正確,可以放心地忽略此警告,因為它應該不會影響主機的使用。

  5. 下一 :remote console 步執行會將所有主機命令重新導向至遠端伺服器。

    注意

    如果您不執行命令,但想將所有主控台命令重新導向至遠端伺服器,您應該在命令前面輸入首碼,例如,您應該將命令執行 :remote console:>:> g.V().count() 。 此首碼是命令的一部分,在將 Gremlin 主控台與 Azure 或 DB 一起使用時Cosmos很重要。 省略此首碼會指示主控台在內部執行命令,通常是針對記憶體中的圖形。 使用此首碼會指示主機執行遠端命令,在這種情況下,請針對 Azure Cosmos DB (localhost 模擬器或 Azure 實例執行 :>) 。

偉大! 現在,我們已完成設定,讓我們開始執行一些主控台命令。

讓我們試試簡單的計數 () 命令。 在主控台中輸入下列提示:

g.V().count()

建立頂點和邊緣

讓我們從新增五個人頂點開始,為Thomas、MaryKay、Robin、Ben 和Jack新增五個頂點

Thomas (輸入) :

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

輸出:

==>[id:796cdccc-2acd-4e58-a324-91d6f6f5ed6d,label:person,type:vertex,properties:[firstName:[[id:f02a749f-b67c-4016-850e-910242d68953,value:Thomas]],lastName:[[id:f5fa3126-8818-4fda-88b0-9bb55145ce5c,value:Andersen]],age:[[id:f6390f9c-e563-433e-acbf-25627628016e,value:44]],userid:[[id:796cdccc-2acd-4e58-a324-91d6f6f5ed6d|userid,value:1]]]]

輸入 (Mary Kay) :

g.addV('person').property('firstName', 'Mary Kay').property('lastName', 'Andersen').property('age', 39).property('userid', 2).property('pk', 'pk')

輸出:

==>[id:0ac9be25-a476-4a30-8da8-e79f0119ea5e,label:person,type:vertex,properties:[firstName:[[id:ea0604f8-14ee-4513-a48a-1734a1f28dc0,value:Mary Kay]],lastName:[[id:86d3bba5-fd60-4856-9396-c195ef7d7f4b,value:Andersen]],age:[[id:bc81b78d-30c4-4e03-8f40-50f72eb5f6da,value:39]],userid:[[id:0ac9be25-a476-4a30-8da8-e79f0119ea5e|userid,value:2]]]]

在 Robin (輸入) :

g.addV('person').property('firstName', 'Robin').property('lastName', 'Wakefield').property('userid', 3).property('pk', 'pk')

輸出:

==>[id:8dc14d6a-8683-4a54-8d74-7eef1fb43a3e,label:person,type:vertex,properties:[firstName:[[id:ec65f078-7a43-4cbe-bc06-e50f2640dc4e,value:Robin]],lastName:[[id:a3937d07-0e88-45d3-a442-26fcdfb042ce,value:Wakefield]],userid:[[id:8dc14d6a-8683-4a54-8d74-7eef1fb43a3e|userid,value:3]]]]

輸入 (Ben) :

g.addV('person').property('firstName', 'Ben').property('lastName', 'Miller').property('userid', 4).property('pk', 'pk')

輸出:

==>[id:ee86b670-4d24-4966-9a39-30529284b66f,label:person,type:vertex,properties:[firstName:[[id:a632469b-30fc-4157-840c-b80260871e9a,value:Ben]],lastName:[[id:4a08d307-0719-47c6-84ae-1b0b06630928,value:Miller]],userid:[[id:ee86b670-4d24-4966-9a39-30529284b66f|userid,value:4]]]]

輸入 (插孔) :

g.addV('person').property('firstName', 'Jack').property('lastName', 'Connor').property('userid', 5).property('pk', 'pk')

輸出:

==>[id:4c835f2a-ea5b-43bb-9b6b-215488ad8469,label:person,type:vertex,properties:[firstName:[[id:4250824e-4b72-417f-af98-8034aa15559f,value:Jack]],lastName:[[id:44c1d5e1-a831-480a-bf94-5167d133549e,value:Connor]],userid:[[id:4c835f2a-ea5b-43bb-9b6b-215488ad8469|userid,value:5]]]]

接下來,讓我們為人員之間的關係新增邊緣。

在 Thomas (- > Mary Kay) :

g.V().hasLabel('person').has('firstName', 'Thomas').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Mary Kay'))

輸出:

==>[id:c12bf9fb-96a1-4cb7-a3f8-431e196e702f,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:0d1fa428-780c-49a5-bd3a-a68d96391d5c,outV:1ce821c6-aa3d-4170-a0b7-d14d2a4d18c3]

Thomas (- > Robin) :

g.V().hasLabel('person').has('firstName', 'Thomas').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Robin'))

輸出:

==>[id:58319bdd-1d3e-4f17-a106-0ddf18719d15,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:3e324073-ccfc-4ae1-8675-d450858ca116,outV:1ce821c6-aa3d-4170-a0b7-d14d2a4d18c3]

輸入 (- > Ben) :

g.V().hasLabel('person').has('firstName', 'Robin').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Ben'))

輸出:

==>[id:889c4d3c-549e-4d35-bc21-a3d1bfa11e00,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:40fd641d-546e-412a-abcc-58fe53891aab,outV:3e324073-ccfc-4ae1-8675-d450858ca116]

更新頂點

讓我們以45的新年齡更新Thomas頂點。

輸入:

g.V().hasLabel('person').has('firstName', 'Thomas').property('age', 45)

輸出:

==>[id:ae36f938-210e-445a-92df-519f2b64c8ec,label:person,type:vertex,properties:[firstName:[[id:872090b6-6a77-456a-9a55-a59141d4ebc2,value:Thomas]],lastName:[[id:7ee7a39a-a414-4127-89b4-870bc4ef99f3,value:Andersen]],age:[[id:a2a75d5a-ae70-4095-806d-a35abcbfe71d,value:45]]]]

查詢您的圖形

現在,讓我們針對您的圖形執行各種查詢。

首先,讓我們嘗試使用具有篩選的查詢,只返回年齡超過 40 歲的人。

輸入 (篩選查詢) :

g.V().hasLabel('person').has('age', gt(40))

輸出:

==>[id:ae36f938-210e-445a-92df-519f2b64c8ec,label:person,type:vertex,properties:[firstName:[[id:872090b6-6a77-456a-9a55-a59141d4ebc2,value:Thomas]],lastName:[[id:7ee7a39a-a414-4127-89b4-870bc4ef99f3,value:Andersen]],age:[[id:a2a75d5a-ae70-4095-806d-a35abcbfe71d,value:45]]]]

接下來,讓我們為 40 歲以上人員預測名字。

輸入 (+ 投影查詢) :

g.V().hasLabel('person').has('age', gt(40)).values('firstName')

輸出:

==>Thomas

在圖形中移動

讓我們在圖形中移動,以回報所有 Thomas 的朋友。

在 (的好友) :

g.V().hasLabel('person').has('firstName', 'Thomas').outE('knows').inV().hasLabel('person')

輸出:

==>[id:f04bc00b-cb56-46c4-a3bb-a5870c42f7ff,label:person,type:vertex,properties:[firstName:[[id:14feedec-b070-444e-b544-62be15c7167c,value:Mary Kay]],lastName:[[id:107ab421-7208-45d4-b969-bbc54481992a,value:Andersen]],age:[[id:4b08d6e4-58f5-45df-8e69-6b790b692e0a,value:39]]]]
==>[id:91605c63-4988-4b60-9a30-5144719ae326,label:person,type:vertex,properties:[firstName:[[id:f760e0e6-652a-481a-92b0-1767d9bf372e,value:Robin]],lastName:[[id:352a4caa-bad6-47e3-a7dc-90ff342cf870,value:Wakefield]]]]

接下來,讓我們取得下一層頂點。 在圖形中移動以返回 Thomas 朋友的所有朋友。

在 (朋友的朋友中輸入) :

g.V().hasLabel('person').has('firstName', 'Thomas').outE('knows').inV().hasLabel('person').outE('knows').inV().hasLabel('person')

輸出:

==>[id:a801a0cb-ee85-44ee-a502-271685ef212e,label:person,type:vertex,properties:[firstName:[[id:b9489902-d29a-4673-8c09-c2b3fe7f8b94,value:Ben]],lastName:[[id:e084f933-9a4b-4dbc-8273-f0171265cf1d,value:Miller]]]]

放置頂點

現在,讓我們從圖形資料庫刪除頂點。

輸入 (插孔頂點) :

g.V().hasLabel('person').has('firstName', 'Jack').drop()

清除圖形

最後,讓我們清除所有頂點和邊緣的資料庫。

輸入:

g.E().drop()
g.V().drop()

祝賀! 您已完成此 Azure Cosmos DB:Gremlin API 教學課程!

在 Azure 入口網站中查看 SLA

Azure 入口網站會Cosmos資料庫帳戶輸送量、儲存空間、可用性、延遲和一致性。 與 Azure 與 DB 服務等級Cosmos協定與 SLA (關聯的) 圖表會顯示與實際績效比較的SLA值。 此公制套件可透明地監控您的 SLA。

若要檢查度量和 SLA:

  1. 選取您資料庫帳戶Cosmos功能表中的度量。

  2. 選取一個 Tab ,例如 延遲,然後選取右邊的時間範圍。 比較 圖表上的 實際和 SLA 線條。

    Azure Cosmos DB 度量套件

  3. 查看其他資料標籤上的度量。

清理資源

當您使用您的應用程式和 Azure Cosmos DB 帳戶時,您可以刪除您建立 Azure 資源,這樣您就不用支付更多費用。 若要刪除資源:

  1. 在 Azure 入口網站搜尋欄中,搜尋並選取 資源群組

  2. 從清單中,選取您為此快速入門建立的資源群組。

    選取要刪除的資源群組

  3. 在資源群組 概觀頁面上 ,選取 刪除資源群組

    刪除資源群組

  4. 在下一個視窗中,輸入要刪除的資源組名,然後選取 刪除

下一個步驟

在這個快速入門中,您將瞭解如何建立 Azure Cosmos DB 帳戶、使用資料管理器建立圖形、建立頂點和邊緣,以及使用 Gremlin 主控台流覽圖形。 現在,您可以使用Gremlin建立更複雜的查詢,以及實現功能強大的圖形橫穿邏輯。