你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Gremlin 控制台和 Azure Cosmos DB for Apache Gremlin 遍历顶点和边缘

适用对象: Gremlin

Azure Cosmos DB for Apache Gremlin 是一种完全托管的图形数据库服务,用于实现常用的 Apache Tinkerpop(使用 Gremlin 查询语言的图形计算框架)。 API for Gremlin 为你提供了一种低摩擦方式来将 Gremlin 与服务结合使用,可通过最少的管理根据需要进行增长和横向扩展。

在本快速入门中,你会使用 Gremlin 控制台库连接到新建的 Azure Cosmos DB for Gremlin 帐户。

先决条件

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 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”运行代码或命令。

创建 API for Gremlin 帐户和相关资源

在使用 Gremlin 控制台之前,应先创建 API for Gremlin 帐户。 此外,建立数据库和图表也很有帮助。

  1. 为 accountName、resourceGroupName 和 location 创建 shell 变量。

    # 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. 如果尚未登录到 Azure CLI,请使用 az login 登录。

  3. 使用 az group create 在订阅中创建新的资源组。

    az group create \
        --name $resourceGroupName \
        --location $location
    
  4. 使用 az cosmosdb create 创建具有默认设置的新 API for Gremlin 帐户。

    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 获取帐户的 API for Gremlin 终结点 NAME

    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 控制台,本快速入门使用 tinkerpop/gremlin-console Docker Hub 中的容器映像。 此映像可确保使用适当版本的控制台 (3.4) 来与 API for Gremlin 建立连接。 控制台运行后,从本地 Docker 主机连接到远程 API for Gremlin 帐户。

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

    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><account-key> 占位符替换为本快速入门前面获取的 NAMEKEY 值。

  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 配置文件连接到远程 (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')
    

    重要

    不要忘了 :> 前缀。 远程运行命令需要此前缀。

  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()
    

清理资源

当不再需要 API for Gremlin 帐户时,删除相应的资源组。

  1. 为 resourceGroupName 创建 shell 变量(如果尚不存在)。

    # 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 服务器实例或管理自己的基础结构。 甚至还可以随着时间推移需求的增长来扩展解决方案。

若要连接到 API for Gremlin 帐户,请使用 tinkerpop/gremlin-console 容器映像以不需要本地安装的方式运行 gremlin 控制台。 然后,使用存储在 remote-secure.yaml 文件中的配置从正在运行的容器连接到 API for Gremlin 帐户。 在此处运行了多个常见的 Gremlin 命令。

下一步