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.
Introdução à biblioteca de cliente do Azure Cosmos DB para Apache Cassandra 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.
Documentação | de referência da API 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
Preparaçã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 Cassandra. Depois de criar a conta, crie o keyspace e os recursos de tabela.
- Azure CLI
- portal do Azure
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 Cassandra com configurações padrão.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"Crie um novo espaço de chave usando
az cosmosdb cassandra keyspace createo nomecosmicworks.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Crie um novo objeto JSON para representar seu esquema usando um comando Bash de várias linhas. Em seguida, use o
az cosmosdb cassandra table createcomando para criar uma nova tabela chamadaproducts.schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
Obter credenciais
Agora, obtenha a senha para a biblioteca do cliente usar para criar uma conexão com a conta criada recentemente.
- Azure CLI
- portal do Azure
Use
az cosmosdb showpara obter o ponto de contato e o nome de usuário da conta.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Registe o valor das propriedades
contactPointeusernamea partir da saída dos comandos anteriores. Os valores dessas propriedades são o ponto de contato e o nome de usuário 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 senha 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
cassandra-drivera partir do Gestor de Pacotes Node (npm).npm install --save cassandra-driverCrie o arquivo index.js .
Comece em um diretório vazio.
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
cassandra-driverdo npm.npm install --save cassandra-driverInicialize 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 | |
|---|---|
Client |
Representa uma conexão específica com um cluster |
Mapper |
Cliente Cassandra Query Language (CQL) usado para executar consultas |
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 os seguintes tipos do
cassandra-drivermódulo:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Crie variáveis constantes de cadeia de caracteres para as credenciais coletadas anteriormente neste guia. Nomeie as variáveis
username,passwordecontactPoint.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Crie outra variável de cadeia de caracteres para a região onde você criou sua conta do Azure Cosmos DB para Apache Cassandra. Nomeie esta variável
region.const region = '<azure-region>';Crie um novo
PlainTextAuthProviderobjeto com as credenciais especificadas nas etapas anteriores.let authProvider = new PlainTextAuthProvider( username, password );Crie um
Clientobjeto usando as variáveis de credencial e configuração criadas nas etapas anteriores.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Conecte-se de forma assíncrona ao cluster.
await client.connect();Crie um novo mapeador direcionando o espaço de chave
cosmicworkse a tabelaproduct. Nomeie o mapeadorProduct.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Gere uma instância do mapeador usando a
forModelfunção e o nome doProductmapeador.const productMapper = mapper.forModel('Product');
Abra o arquivo index.ts em seu ambiente de desenvolvimento integrado (IDE).
Importe os seguintes tipos do
cassandra-drivermódulo:cassandra.authcassandra.mappingcassandra.typescassandra.Clientcassandra.ClientOptionscassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import { auth, mapping, types, Client, ClientOptions } from 'cassandra-driver'; const { Mapper } = mapping; const { PlainTextAuthProvider } = auth;Crie variáveis constantes de cadeia de caracteres para as credenciais coletadas anteriormente neste guia. Nomeie as variáveis
username,passwordecontactPoint.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Crie outra variável de cadeia de caracteres para a região onde você criou sua conta do Azure Cosmos DB para Apache Cassandra. Nomeie esta variável
region.const region: string = '<azure-region>';Crie um novo
PlainTextAuthProviderobjeto com as credenciais especificadas nas etapas anteriores.let authProvider = new PlainTextAuthProvider( username, password );Crie um objeto anônimo com opções que garantem que você esteja usando o protocolo TLS (Transport Layer Security) 1.2.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };Crie um
ClientOptionsobjeto usando as variáveis de credencial e configuração criadas nas etapas anteriores.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };Crie um
Clientobjeto usando aclientOptionsvariável no construtor.let client = new Client(clientOptions);Conecte-se de forma assíncrona ao cluster.
await client.connect();Crie um novo mapeador direcionando o espaço de chave
cosmicworkse a tabelaproduct. Nomeie o mapeadorProduct.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Gere uma instância do mapeador usando a
forModelfunção e o nome doProductmapeador.const productMapper = mapper.forModel('Product');
Advertência
A validação completa da segurança da camada de transporte (TLS) está desativada neste guia para simplificar a autenticação. Para implantações de produção, habilite totalmente a validação.
Atualizar ou inserir dados
Em seguida, atualize novos dados para uma tabela. A atualização garante que os dados sejam criados ou substituídos adequadamente, dependendo se os mesmos dados já existem na tabela.
Crie um novo objeto em uma variável chamada
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Invoque de forma assíncrona a função
insert, passando a variávelproductcriada na etapa anterior.await productMapper.insert(product);
Defina uma nova interface nomeada
Productcom campos correspondentes à tabela criada anteriormente neste guia.Tipo IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Sugestão
No Node.js, você pode criar esse tipo em outro arquivo ou criá-lo no final do arquivo existente.
Crie um novo objeto do tipo
Product. Armazene o objeto em uma variável chamadaproduct.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Invoque de forma assíncrona a função
insert, passando a variávelproductcriada na etapa anterior.await productMapper.insert(product);
Ler dados
Em seguida, leia os dados que foram inseridos anteriormente na tabela.
Crie um objeto anônimo chamado
filter. Neste objeto, inclua uma propriedade nomeadaidcom o mesmo valor do produto criado anteriormente neste guia.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Invoque a função do mapeador passando a variável
get. Armazene o resultado em uma variável chamadamatchedProduct.let matchedProduct = await productMapper.get(filter);
Crie um objeto anônimo chamado
filter. Neste objeto, inclua uma propriedade nomeadaidcom o mesmo valor do produto criado anteriormente neste guia.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Invoque a função do mapeador passando a variável
get. Armazene o resultado em uma variável chamadamatchedProductdo tipoProduct.let matchedProduct: Product = await productMapper.get(filter);
Consultar dados
Por fim, use uma consulta para localizar todos os dados que correspondem a um filtro específico na tabela.
Crie uma nova variável de cadeia de caracteres nomeada
querycom uma consulta CQL que corresponda a itens com o mesmocategorycampo.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Crie um objeto anônimo chamado
params. Neste objeto, inclua uma propriedade nomeadacategorycom o mesmo valor do produto criado anteriormente neste guia.const params = { category: 'gear-surf-surfboards' };Invoque assincronamente a função
executepassando as variáveisqueryeparamscomo argumentos. Armazene a propriedade dorowsresultado como uma variável chamadamatchedProducts.let { rows: matchedProducts } = await client.execute(query, params);Itere sobre os resultados da consulta invocando o
foreachmétodo na matriz de produtos.matchedProducts.forEach(product => { // Do something here with each result });
Crie uma nova variável de cadeia de caracteres nomeada
querycom uma consulta CQL que corresponda a itens com o mesmocategorycampo.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Crie um objeto anônimo chamado
params. Neste objeto, inclua uma propriedade nomeadacategorycom o mesmo valor do produto criado anteriormente neste guia.const params = { category: 'gear-surf-surfboards' };Invoque assincronamente a função
executepassando as variáveisqueryeparamscomo argumentos. Armazene o resultado em uma variável chamadaresultdo tipotypes.ResultSet.let result: types.ResultSet = await client.execute(query, params);Armazene a propriedade do
rowsresultado como uma variável denominadamatchedProductsdo tipoProduct[].let matchedProducts: Product[] = result.rows;Itere sobre os resultados da consulta invocando o
foreachmétodo na matriz de produtos.matchedProducts.forEach((product: Product) => { // Do something here with each result });
Execute o código
Execute o aplicativo recém-criado usando um terminal no diretório do aplicativo.
node index.js
npx tsx index.ts
Limpeza de recursos
Quando você não precisar mais da conta, remova a conta da sua assinatura do Azure excluindo o recurso.
- Azure CLI
- portal do Azure
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"