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

Important

你是否正在寻找一种数据库解决方案,以应对需要高扩展性、99.999% 可用性服务级别协议(SLA)、即时自动扩展和跨多个区域的自动故障转移的场景? 请考虑使用 Azure Cosmos DB for NoSQL

您是要构建联机分析处理(OLAP)图表,还是迁移现有的 Apache Gremlin 应用程序? 请考虑Microsoft Fabric中的Graph

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

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

Prerequisites

Azure Cloud Shell

Azure 托管 Azure Cloud Shell,这是一个可以通过浏览器使用的交互式 shell 环境。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用,以使用 Azure 服务。 可以使用 Cloud Shell 预安装命令运行本文中的代码,而无需在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的 试用 按钮。 选择 Try It不会自动将代码或命令复制到Cloud Shell。 显示适用于 Azure Cloud Shell 的 Try It 示例的屏幕截图。
转到 https://shell.azure.com或选择 “启动 Cloud Shell ”按钮,在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 屏幕截图,显示 Azure 门户中的“Cloud Shell”按钮

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上按下Ctrl+Shift+V,或在 macOS 上按下Cmd+Shift+V,将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择 Enter 以运行代码或命令。

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

在使用 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 为 Gremlin 帐户创建具有默认设置的新 API。

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

    注释

    每个 Azure 订阅可以拥有最多一个免费的 Azure Cosmos DB 帐户,并且你必须在创建帐户时选择加入。 如果此命令无法应用免费层折扣,这意味着订阅中的另一个帐户已经启用了免费层服务。

  5. 获取帐户的 Gremlin 终结点 API NAME 使用 az cosmosdb show

    az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName \
        --query "name"
    
  6. 在帐户的密钥列表中查找密钥,使用az-cosmosdb-keys-list

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type "keys" \
        --query "primaryMasterKey"
    
  7. 记录 NAMEKEY 的值。 稍后您将使用这些凭据。

  8. 使用 创建一个名为“cosmicworks”的az cosmosdb gremlin database create

    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 主机连接到远程 API for Gremlin 帐户。

  1. 拉取版本 3.4tinkerpop/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><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. 为具有以下属性的产品添加顶点:

    Value
    标签 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')
    

    Important

    不要忘记前缀 :> 。 这个前缀是远程运行命令所需的。

  2. 使用以下属性添加另一个产品顶点:

    Value
    标签 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 命令。