快速入门:使用 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 帐户。
- 无 Azure 订阅? 注册 Azure 帐户。
- Docker 主机
- 尚未安装 Docker? 在 GitHub Codespaces 中试用本快速入门。
- Azure 命令行接口 (CLI)
创建 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
使用
az cosmosdb show
获取帐户的 API for Gremlin 终结点 NAME。az cosmosdb show \ --resource-group $resourceGroupName \ --name $accountName \ --query "name"
使用
az-cosmosdb-keys-list
从帐户的密钥列表中查找 KEY。az cosmosdb keys list \ --resource-group $resourceGroupName \ --name $accountName \ --type "keys" \ --query "primaryMasterKey"
记录 NAME 和 KEY 的值。 稍后会使用这些凭据。
使用
az cosmosdb gremlin database create
创建名为“cosmicworks
”的数据库。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 帐户。
拉取
tinkerpop/gremlin-console
容器映像的版本3.4
。docker pull tinkerpop/gremlin-console:3.4
创建一个空的工作文件夹。 在空文件夹中,创建 remote-secure.yaml 文件。 将此 YAML 配置添加到文件。
hosts: [<account-name>.gremlin.cosmos.azure.cn] 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 命令。