快速入門:使用 Gremlin 控制台和 Azure Cosmos DB for Apache Gremlin 周遊頂點和邊緣

適用於: Gremlin

適用於 Apache Gremlin 的 Azure Cosmos DB 是完全受控的圖形資料庫服務,使用 Gremlin 查詢語言實作熱門 Apache Tinkerpop的圖表運算架構。 Gremlin 的 API 可讓您以低摩擦的方式開始使用 Gremlin 與服務,以盡可能減少管理的需求來擴增和相應放大。

在本快速入門中,您會使用 Gremlin 控制台連線到新建立的 Azure Cosmos DB for Gremlin 帳戶。

必要條件

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Screenshot that shows an example of Try It for Azure Cloud Shell.
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 Button to launch Azure Cloud Shell.
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

建立 Gremlin 帳戶和相關資源的 API

使用 Gremlin 控制台之前,應該先建立 Gremlin 帳戶的 API。 此外,它也有助於建立資料庫和圖形。

  1. 建立 accountNameresourceGroupNamelocation殼層變數。

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    location="westus"
    
    # Variable for account name with a randomly generated suffix
    
    let suffix=$RANDOM*$RANDOM
    accountName="msdocs-gremlin-$suffix"
    
  2. 如果您尚未登入,請使用 az login登入 Azure CLI。

  3. 使用 az group create 在您的訂用帳戶中建立新的資源群組。

    az group create \
        --name $resourceGroupName \
        --location $location
    
  4. 使用 az cosmosdb create 建立具有預設設定之 Gremlin 帳戶的新 API。

    az cosmosdb create \
        --resource-group $resourceGroupName \
        --name $accountName \
        --capabilities "EnableGremlin" \
        --locations regionName=$location \
        --enable-free-tier true
    

    注意

    每個 Azure 訂用帳戶最多可以有一個免費層 Azure Cosmos DB 帳戶,而且在建立帳戶時必須選擇加入。 如果此命令無法套用免費層折扣,這表示訂用帳戶中的另一個帳戶已啟用免費層。

  5. 使用 az cosmosdb show取得帳戶的 Gremlin 端點名稱 API。

    az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName \
        --query "name"
    
  6. 從具有az-cosmosdb-keys-list的帳戶金鑰清單中尋找 KEY

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type "keys" \
        --query "primaryMasterKey"
    
  7. 記錄 NAMEKEY 值。 您稍後會使用這些認證。

  8. 使用 az cosmosdb gremlin database create建立名為 cosmicworks 的資料庫

    az cosmosdb gremlin database create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --name "cosmicworks"
    
  9. 使用 az cosmosdb gremlin graph create建立圖形。 將圖形 products命名為 ,然後將輸送量設定為 400,最後將分割區索引鍵路徑設定為 /category

    az cosmosdb gremlin graph create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category" \
        --throughput 400
    

使用 Docker 啟動及設定 Gremlin 控制台

針對 gremlin 控制台,本快速入門會使用來自 Docker Hub 的 tinkerpop/gremlin-console 容器映像。 此映像可確保您使用適當的控制台版本 (3.4) 來連線至適用於 Gremlin 的 API。 控制台執行之後,請從本機 Docker 主機連線到 Gremlin 帳戶的遠端 API。

  1. 3.4提取容器映像的版本tinkerpop/gremlin-console

    docker pull tinkerpop/gremlin-console:3.4
    
  2. 建立空的工作資料夾。 在空白資料夾中,建立 remote-secure.yaml 檔案。 將此 YAML 組態新增至 檔案。

    hosts: [<account-name>.gremlin.cosmos.azure.com]
    port: 443
    username: /dbs/cosmicworks/colls/products
    password: <account-key>
    connectionPool: {
      enableSsl: true,
      sslEnabledProtocols: [TLSv1.2]
    }
    serializer: {
      className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0,
      config: {
        serializeResultToString: true
      }
    }
    

    注意

    <account-name>本快速入門稍早取得的 NAME 和 KEY 值取代 和 <account-key>佔位元。

  3. 在包含 remote-secure.yaml 檔案的工作資料夾內容中開啟新的終端機。

  4. 以互動式 (--interactive --tty) 模式執行 Docker 容器映像。 請確定您將目前的工作資料夾掛接至 /opt/gremlin-console/conf/ 容器內的路徑。

    docker run -it --mount type=bind,source=.,target=/opt/gremlin-console/conf/ tinkerpop/gremlin-console:3.4
    
  5. 在 Gremlin 控制台容器內,使用 remote-secure.yaml 組態檔連線到 remote (API for Gremlin) 帳戶。

    :remote connect tinkerpop.server conf/remote-secure.yaml
    

建立和周遊頂點和邊緣

現在主控台已連線到帳戶,請使用標準 Gremlin 語法來建立和周遊頂點和邊緣。

  1. 為具有下列屬性的產品新增頂點

    label product
    id 68719518371
    name Kiama classic surfboard
    price 285.55
    category surfboards
    :> g.addV('product').property('id', '68719518371').property('name', 'Kiama classic surfboard').property('price', 285.55).property('category', 'surfboards')
    

    重要

    不要模糊前置 :> 詞。 需要 THis 前置詞,才能從遠端執行命令。

  2. 使用下列屬性新增另一個 產品 頂點:

    label product
    id 68719518403
    name Montau Turtle Surfboard
    price 600
    category surfboards
    :> g.addV('product').property('id', '68719518403').property('name', 'Montau Turtle Surfboard').property('price', 600).property('category', 'surfboards')
    
  3. 建立名為 replaces邊緣,以定義兩個產品之間的關聯性。

    :> g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518371']))
    
  4. 計算圖形內的所有頂點。

    :> g.V().count()
    
  5. 周遊圖表以尋找取代 Kiama classic surfboard的所有頂點。

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Kiama classic surfboard').inE('replaces').outV()
    
  6. 周遊圖表以尋找取代的所有頂點 Montau Turtle Surfboard

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Montau Turtle Surfboard').outE('replaces').inV()
    

清除資源

當您不再需要 Gremlin 帳戶的 API 時,請刪除對應的資源群組。

  1. 如果 resourceGroupName 不存在,請建立殼層變數

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    
  2. 使用 az group delete 來刪除資源群組。

    az group delete \
        --name $resourceGroupName
    

我們是如何解決此問題的?

Azure Cosmos DB for Apache Gremlin 藉由提供 Gremlin 即服務來解決我們的問題。 透過此供應專案,您不需要站立自己的 Gremlin 伺服器實例或管理您自己的基礎結構。 更進一步,您可以隨著需求隨著時間成長而調整解決方案。

若要連線到 Gremlin 帳戶的 API,您可以使用 tinkerpop/gremlin-console 容器映射,以不需要本機安裝的方式來執行 gremlin 控制台。 然後,您使用儲存在 remote-secure.yaml 檔案中的組態,從執行中的容器連線到 Gremlin 帳戶的 API。 從該處,您執行了多個常見的 Gremlin 命令。

後續步驟