你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
你是否正在寻找一种数据库解决方案,以应对需要高扩展性、99.999% 可用性服务级别协议(SLA)、即时自动扩展和跨多个区域的自动故障转移的场景? 请考虑 Azure Cosmos DB for NoSQL。
您是要构建联机分析处理(OLAP)图表,还是迁移现有的 Apache Gremlin 应用程序? 考虑 Microsoft Fabric 中的 Graph。
Azure Cosmos DB for Apache Gremlin 是一种完全托管的图形数据库服务,用于实现常用的 Apache Tinkerpop(使用 Gremlin 查询语言的图形计算框架)。 API for Gremlin 为你提供了一种低摩擦方式来将 Gremlin 与服务结合使用,可通过最少的管理根据需要进行增长和横向扩展。
在本快速入门中,你会使用 Gremlin 控制台库连接到新建的 Azure Cosmos DB for Gremlin 帐户。
先决条件
- 具有活动订阅的 Azure 帐户。
- 无 Azure 订阅? 注册免费 Azure 帐户。
 
- 
              Docker 主机
- 尚未安装 Docker? 在 GitHub Codespaces 中试用本快速入门。
 
- Azure 命令行接口 (CLI)
Azure Cloud Shell
Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。
若要启动 Azure Cloud Shell,请执行以下操作:
| 选项 | 示例/链接 | 
|---|---|
| 选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 |   | 
| 转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 |   | 
| 选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 |   | 
若要使用 Azure Cloud Shell,请执行以下操作:
- 启动 Cloud Shell。 
- 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。 
- 在 Windows 和 Linux 上选择 CtrlShift+V,或在 macOS 上选择 CmdShift+V 将代码或命令粘贴到 Cloud Shell 会话中。 
- 选择“Enter”运行代码或命令。 
创建 API for Gremlin 帐户和相关资源
在使用 Gremlin 控制台之前,应先创建 API for Gremlin 帐户。 此外,建立数据库和图表也很有帮助。
- 为 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"
- 如果尚未登录到 Azure CLI,请使用 - az login登录。
- 使用 - az group create在订阅中创建新的资源组。- az group create \ --name $resourceGroupName \ --location $location
- 使用 - 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 帐户,并且你必须在创建帐户时选择加入使用。 如果此命令无法用于应用免费层折扣的选项,这意味着订阅中的另一个帐户已启用免费层。 
- 使用 获取帐户的 API for Gremlin 终结点 - az cosmosdb show。- az cosmosdb show \ --resource-group $resourceGroupName \ --name $accountName \ --query "name"
- 使用 从帐户的密钥列表中查找 - az-cosmosdb-keys-list。- az cosmosdb keys list \ --resource-group $resourceGroupName \ --name $accountName \ --type "keys" \ --query "primaryMasterKey"
- 记录 NAME 和 KEY 的值。 稍后会使用这些凭据。 
- 使用 创建名为“ - cosmicworks”的- az cosmosdb gremlin database create。- az cosmosdb gremlin database create \ --resource-group $resourceGroupName \ --account-name $accountName \ --name "cosmicworks"
- 使用 创建 - 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 帐户。
- 拉取 - 3.4容器映像的版本- tinkerpop/gremlin-console。- docker pull tinkerpop/gremlin-console:3.4
- 创建一个空的工作文件夹。 在空文件夹中,创建 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>占位符替换为本快速入门前面获取的 NAME 和 KEY 值。
- 在包含 remote-secure.yaml 文件的工作文件夹的上下文中打开新终端。 
- 在交互式 ( - --interactive --tty) 模式下运行 Docker 容器映像。 确保将当前工作文件夹装载到- /opt/gremlin-console/conf/容器中的路径。- docker run -it --mount type=bind,source=.,target=/opt/gremlin-console/conf/ tinkerpop/gremlin-console:3.4
- 在 Gremlin 控制台容器中,使用 remote-secure.yaml 配置文件连接到远程 (API for Gremlin) 帐户。 - :remote connect tinkerpop.server conf/remote-secure.yaml
创建并遍历顶点和边缘
现在控制台已连接到帐户,请使用标准 Gremlin 语法创建和遍历顶点和边缘。
- 为具有以下属性的产品添加顶点: - 值 - 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')- 重要 - 不要忘记前缀 - :>。 远程运行命令需要此前缀。
- 使用以下属性添加另一个产品顶点: - 值 - 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')
- 创建名为 的 - replaces以定义两种产品之间的关系。- :> g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518371']))
- 对图形中的所有顶点进行计数。 - :> g.V().count()
- 遍历图形并查找替换 - Kiama classic surfboard的所有顶点。- :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Kiama classic surfboard').inE('replaces').outV()
- 遍历图形并查找 - Montau Turtle Surfboard替换的所有顶点。- :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Montau Turtle Surfboard').outE('replaces').inV()
清理资源
当不再需要 API for Gremlin 帐户时,删除相应的资源组。
- 为 resourceGroupName 创建 shell 变量(如果尚不存在)。 - # Variable for resource group name resourceGroupName="msdocs-cosmos-gremlin-quickstart"
- 使用 - 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 命令。