Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
Você está procurando uma solução de banco de dados para cenários de alta escala com um contrato de nível de serviço (SLA) de disponibilidade de 99.999%, dimensionamento automático instantâneo e failover automático em várias regiões? Considere Azure Cosmos DB para NoSQL.
Você está procurando implementar um gráfico de processamento analítico on-line (OLAP) ou migrar um aplicativo Apache Gremlin existente? Considere o gráfico no Microsoft Fabric.
Introdução à biblioteca de cliente do Azure Cosmos DB para Apache Gremlin para Node.js armazenar, gerenciar e consultar dados não estruturados. Siga as etapas neste guia para criar uma nova conta, instalar uma biblioteca de cliente Node.js, conectar-se à conta, executar operações comuns e consultar seus dados de exemplo finais.
Pacote de código-fonte | da biblioteca (npm)
Pré-requisitos
Uma assinatura do Azure
- Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
A versão mais recente da CLI do Azure no Azure Cloud Shell.
- Se preferir executar comandos de referência da CLI localmente, entre na CLI do Azure usando o
az logincomando.
- Se preferir executar comandos de referência da CLI localmente, entre na CLI do Azure usando o
- Node.js 22 ou superior
Configuração
Primeiro, configure a conta e o ambiente de desenvolvimento para este guia. Esta seção orienta você pelo processo de criação de uma conta, obtenção de suas credenciais e, em seguida, preparação do ambiente de desenvolvimento.
Criar uma conta
Comece criando uma API para a conta Apache Gremlin. Depois que a conta for criada, crie o banco de dados e os recursos gráficos.
Se você ainda não tiver um grupo de recursos de destino, use o
az group createcomando para criar um novo grupo de recursos em sua assinatura.az group create \ --name "<resource-group-name>" \ --location "<location>"Use o
az cosmosdb createcomando para criar uma nova conta do Azure Cosmos DB para Apache Gremlin com configurações padrão.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableGremlin"Crie uma nova base de dados utilizando
az cosmosdb gremlin database createdenominadocosmicworks.az cosmosdb gremlin database create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Use o
az cosmosdb gremlin graph createcomando para criar um novo gráfico chamadoproducts.az cosmosdb gremlin graph create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category"
Obter credenciais
Agora, obtenha a senha para a biblioteca do cliente usar para criar uma conexão com a conta criada recentemente.
Use
az cosmosdb showpara obter o host para a conta.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{host:name}"Registe o valor da propriedade
hostproveniente da saída dos comandos anteriores. O valor desta propriedade é o host que você usa posteriormente neste guia para se conectar à conta com a biblioteca.Use
az cosmosdb keys listpara obter as chaves da conta.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Registe o valor da propriedade
primaryMasterKeyproveniente da saída dos comandos anteriores. O valor dessa propriedade é a chave que você usa posteriormente neste guia para se conectar à conta com a biblioteca.
Preparar o ambiente de desenvolvimento
Em seguida, configure seu ambiente de desenvolvimento com um novo projeto e a biblioteca do cliente. Esta etapa é o último pré-requisito necessário antes de passar para o resto deste guia.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yesInstale o pacote
gremlina partir do Gestor de Pacotes Node (npm).npm install --save gremlinCrie o arquivo index.js .
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yesInstale o pacote
typescripta partir do Gestor de Pacotes Node (npm).npm install --save-dev typescriptInstale o pacote
tsxdo npm.npm install --save-dev tsxInstale o pacote
gremlindo npm.npm install --save gremlinInstale o pacote
@types/nodedo npm.npm install --save-dev @types/nodeInstale o pacote
@types/gremlindo npm.npm install --save-dev @types/gremlinInicialize o projeto TypeScript usando o compilador (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextCrie o arquivo index.ts .
Modelo de objeto
| Descrição | |
|---|---|
DriverRemoteConnection |
Representa a conexão com o servidor Gremlin |
GraphTraversalSource |
Usado para construir e executar percursos de Gremlin |
Exemplos de código
Autenticar cliente
Comece autenticando o cliente usando as credenciais reunidas anteriormente neste guia.
Abra o ficheiro index.js no seu ambiente de desenvolvimento integrado (IDE).
Importe o
gremlinpacote e os tipos necessários.import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Crie variáveis de cadeia de caracteres para as credenciais coletadas anteriormente neste guia. Nomeie as variáveis
hostnameeprimaryKey.const hostname = '<host>'; const primaryKey = '<key>';Crie um objeto do tipo
PlainTextSaslAuthenticatorusando as credenciais e variáveis de configuração criadas nas etapas anteriores. Armazene o objeto em uma variável chamadaauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Crie um
Clientobjeto usando a variável autenticadora. Nomeie a variávelclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Abra o arquivo index.ts em seu ambiente de desenvolvimento integrado (IDE).
Importe o
gremlinpacote e os tipos necessários.import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Crie variáveis de cadeia de caracteres para as credenciais coletadas anteriormente neste guia. Nomeie as variáveis
hostnameeprimaryKey.const hostname: string = '<host>'; const primaryKey: string = '<key>';Crie um objeto do tipo
PlainTextSaslAuthenticatorusando as credenciais e variáveis de configuração criadas nas etapas anteriores. Armazene o objeto em uma variável chamadaauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Crie um
Clientobjeto usando a variável autenticadora. Nomeie a variávelclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Inserir dados
Em seguida, insira novos dados de vértice e borda no gráfico. Antes de criar os novos dados, limpe o gráfico de todos os dados existentes.
Execute a
g.V().drop()consulta para limpar todos os vértices e arestas do gráfico.await client.submit('g.V().drop()');Crie uma consulta Gremlin que adicione um vértice.
const insert_vertex_query = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Adicione um vértice para um único produto.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Adicione mais dois vértices para dois produtos extras.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Crie outra consulta Gremlin que adicione uma aresta.
const insert_edge_query = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Adicione duas arestas.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Execute a
g.V().drop()consulta para limpar todos os vértices e arestas do gráfico.await client.submit('g.V().drop()');Crie uma consulta Gremlin que adicione um vértice.
const insert_vertex_query: string = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Adicione um vértice para um único produto.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Adicione mais dois vértices para dois produtos extras.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Crie outra consulta Gremlin que adicione uma aresta.
const insert_edge_query: string = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Adicione duas arestas.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Ler dados
Em seguida, leia os dados que foram inseridos anteriormente no gráfico.
Crie uma consulta que leia um vértice usando o identificador exclusivo e o valor da chave de partição.
const read_vertex_query = 'g.V([prop_partition_key, prop_id])';Em seguida, leia um vértice fornecendo os parâmetros necessários.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Crie uma consulta que leia um vértice usando o identificador exclusivo e o valor da chave de partição.
const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';Em seguida, leia um vértice fornecendo os parâmetros necessários.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Consultar dados
Finalmente, use uma consulta para localizar todos os dados que correspondem a uma travessia ou filtro específico no gráfico.
Crie uma consulta que encontre todos os vértices que saem de um vértice específico.
const find_vertices_query = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Execute a consulta especificando o
Montau Turtle Surfboardproduto.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Itere sobre os resultados da consulta.
for (const item of find_results._items) { // Do something here with each result }
Crie uma consulta que encontre todos os vértices que saem de um vértice específico.
const find_vertices_query: string = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Execute a consulta especificando o
Montau Turtle Surfboardproduto.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Itere sobre os resultados da consulta.
for (const item of find_results._items) { // Do something here with each result }
Executar o código
Execute o aplicativo recém-criado usando um terminal no diretório do aplicativo.
node index.js
npx tsx index.ts
Clean up resources (Limpar recursos)
Quando você não precisar mais da conta, remova a conta da sua assinatura do Azure excluindo o recurso.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"