Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Prise en main de la bibliothèque cliente Azure Cosmos DB pour Apache Cassandra pour Node.js stocker, gérer et interroger des données non structurées. Suivez les étapes décrites dans ce guide pour créer un compte, installer une bibliothèque cliente Node.js, vous connecter au compte, effectuer des opérations courantes et interroger vos exemples de données finaux.
Documentation de référence sur les API | Code source de la bibliothèque | Package (npm)
Conditions préalables
Un abonnement Azure
- Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Dernière version d’Azure CLI dans Azure Cloud Shell.
- Si vous préférez exécuter des commandes de référence CLI localement, connectez-vous à Azure CLI à l’aide de la
az logincommande.
- Si vous préférez exécuter des commandes de référence CLI localement, connectez-vous à Azure CLI à l’aide de la
- Node.js 22 ou version ultérieure
Configuration
Tout d’abord, configurez l’environnement de compte et de développement pour ce guide. Cette section vous guide tout au long du processus de création d’un compte, de l’obtention de ses informations d’identification, puis de la préparation de votre environnement de développement.
Créer un compte
Commencez par créer une API pour un compte Apache Cassandra. Après la création du compte, créez l’espace de clés et les ressources de table.
Si vous n’avez pas encore de groupe de ressources cible, utilisez la
az group createcommande pour créer un groupe de ressources dans votre abonnement.az group create \ --name "<resource-group-name>" \ --location "<location>"Utilisez la
az cosmosdb createcommande pour créer un compte Azure Cosmos DB pour Apache Cassandra avec les paramètres par défaut.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"Créez un nouveau keyspace en utilisant
az cosmosdb cassandra keyspace createnommécosmicworks.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Créez un objet JSON pour représenter votre schéma à l’aide d’une commande Bash multiligne. Ensuite, utilisez la
az cosmosdb cassandra table createcommande pour créer une table nomméeproducts.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"
Obtenir les informations d’identification
À présent, obtenez le mot de passe de la bibliothèque cliente à utiliser pour créer une connexion au compte récemment créé.
Utilisez
az cosmosdb showpour obtenir le point de contact et le nom d'utilisateur du compte.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Enregistrez la valeur des propriétés
contactPointetusernamede la sortie des commandes précédentes. Ces valeurs de propriétés sont le point de contact et le nom d’utilisateur que vous utilisez plus loin dans ce guide pour vous connecter au compte avec la bibliothèque.Utilisez
az cosmosdb keys listpour obtenir les clés du compte.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Enregistrez la valeur de la
primaryMasterKeypropriété à partir de la sortie des commandes précédentes. La valeur de cette propriété est le mot de passe que vous utilisez plus loin dans ce guide pour vous connecter au compte avec la bibliothèque.
Préparer l’environnement de développement
Ensuite, configurez votre environnement de développement avec un nouveau projet et la bibliothèque cliente. Cette étape est la dernière condition requise avant de passer au reste de ce guide.
Commencez par un dossier vide.
Initialisez un nouveau module.
npm init es6 --yesInstallez le
cassandra-driverpackage à partir du Gestionnaire de package node (npm).npm install --save cassandra-driverCréez le fichier index.js .
Démarrez dans un répertoire vide.
Initialisez un nouveau module.
npm init es6 --yesInstallez le
typescriptpackage à partir du Gestionnaire de package node (npm).npm install --save-dev typescriptInstallez le
tsxpackage à partir de npm.npm install --save-dev tsxInstallez le
cassandra-driverpackage à partir de npm.npm install --save cassandra-driverInitialisez le projet TypeScript à l’aide du compilateur (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextCréez le fichier index.ts .
Modèle d'objet
| Descriptif | |
|---|---|
Client |
Représente une connexion spécifique à un cluster |
Mapper |
Client CQL (Cassandra Query Language) utilisé pour exécuter des requêtes |
Exemples de code
Authentifier le client
Commencez par authentifier le client à l’aide des informations d’identification collectées précédemment dans ce guide.
Ouvrez le fichier index.js dans votre environnement de développement intégré (IDE).
Importez les types suivants à partir du
cassandra-drivermodule :cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Créez des variables de constante de chaîne pour les informations d’identification collectées précédemment dans ce guide. Nommez les variables
username,passwordetcontactPoint.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Créez une autre variable de chaîne pour la région où vous avez créé votre compte Azure Cosmos DB pour Apache Cassandra. Nommez cette variable
region.const region = '<azure-region>';Créez un
PlainTextAuthProviderobjet avec les informations d’identification spécifiées dans les étapes précédentes.let authProvider = new PlainTextAuthProvider( username, password );Créez un
Clientobjet à l’aide des informations d’identification et des variables de configuration créées dans les étapes précédentes.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Connectez-vous de façon asynchrone au cluster.
await client.connect();Créez un nouveau mappeur ciblant l’espace de clés
cosmicworkset la tableproduct. Nommez le mappeurProduct.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Générez une instance de mappeur à l’aide de la
forModelfonction et du nom duProductmappeur.const productMapper = mapper.forModel('Product');
Ouvrez le fichier index.ts dans votre environnement de développement intégré (IDE).
Importez les types suivants à partir du
cassandra-drivermodule :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;Créez des variables de constante de chaîne pour les informations d’identification collectées précédemment dans ce guide. Nommez les variables
username,passwordetcontactPoint.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Créez une autre variable de chaîne pour la région où vous avez créé votre compte Azure Cosmos DB pour Apache Cassandra. Nommez cette variable
region.const region: string = '<azure-region>';Créez un
PlainTextAuthProviderobjet avec les informations d’identification spécifiées dans les étapes précédentes.let authProvider = new PlainTextAuthProvider( username, password );Créez un objet anonyme avec des options qui garantissent que vous utilisez le protocole TLS (Transport Layer Security) 1.2.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };Créez un
ClientOptionsobjet à l’aide des informations d’identification et des variables de configuration créées dans les étapes précédentes.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };Créez un
Clientobjet à l’aide de laclientOptionsvariable dans le constructeur.let client = new Client(clientOptions);Connectez-vous de façon asynchrone au cluster.
await client.connect();Créez un nouveau mappeur ciblant l’espace de clés
cosmicworkset la tableproduct. Nommez le mappeurProduct.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Générez une instance de mappeur à l’aide de la
forModelfonction et du nom duProductmappeur.const productMapper = mapper.forModel('Product');
Avertissement
La validation TLS (Transport Layer Security) complète est désactivée dans ce guide pour simplifier l’authentification. Pour les déploiements de production, activez entièrement la validation.
Effectuer un upsert de données
Ensuite, insérer ou mettre à jour de nouvelles données dans une table. Upserting garantit que les données sont créées ou remplacées de manière appropriée selon que les mêmes données existent déjà dans la table.
Créez un objet dans une variable nommée
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Appelez de façon asynchrone la
insertfonction en passant laproductvariable créée à l’étape précédente.await productMapper.insert(product);
Définissez une nouvelle interface nommée
Productavec des champs correspondant à la table créée précédemment dans ce guide.Type IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Conseil / Astuce
Dans Node.js, vous pouvez créer ce type dans un autre fichier ou le créer à la fin du fichier existant.
Créez un objet de type
Product. Stockez l’objet dans une variable nomméeproduct.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Appelez de façon asynchrone la
insertfonction en passant laproductvariable créée à l’étape précédente.await productMapper.insert(product);
Lire les données
Lisez ensuite les données qui ayant précédemment fait l’objet d’un upsert dans la table.
Créez un objet anonyme nommé
filter. Dans cet objet, incluez une propriété nomméeidavec la même valeur que le produit créé précédemment dans ce guide.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Appelez la
getfonction du mappeur en passant lafiltervariable. Stockez le résultat dans une variable nomméematchedProduct.let matchedProduct = await productMapper.get(filter);
Créez un objet anonyme nommé
filter. Dans cet objet, incluez une propriété nomméeidavec la même valeur que le produit créé précédemment dans ce guide.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Appelez la
getfonction du mappeur en passant lafiltervariable. Stockez le résultat dans une variable nomméematchedProductde typeProduct.let matchedProduct: Product = await productMapper.get(filter);
Rechercher des données
Enfin, utilisez une requête pour rechercher toutes les données qui correspondent à un filtre spécifique dans la table.
Créez une variable de chaîne nommée
queryavec une requête CQL qui correspond aux éléments avec le mêmecategorychamp.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Créez un objet anonyme nommé
params. Dans cet objet, incluez une propriété nomméecategoryavec la même valeur que le produit créé précédemment dans ce guide.const params = { category: 'gear-surf-surfboards' };Appelez la fonction
executede façon asynchrone en passant les variablesqueryetparamsen tant qu’arguments. Stockez la propriété durowsrésultat sous la forme d’une variable nomméematchedProducts.let { rows: matchedProducts } = await client.execute(query, params);Itérer sur les résultats de la requête en appelant la
foreachméthode sur le tableau de produits.matchedProducts.forEach(product => { // Do something here with each result });
Créez une variable de chaîne nommée
queryavec une requête CQL qui correspond aux éléments avec le mêmecategorychamp.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Créez un objet anonyme nommé
params. Dans cet objet, incluez une propriété nomméecategoryavec la même valeur que le produit créé précédemment dans ce guide.const params = { category: 'gear-surf-surfboards' };Appelez la fonction
executede façon asynchrone en passant les variablesqueryetparamsen tant qu’arguments. Stockez le résultat dans une variable nomméeresultde typetypes.ResultSet.let result: types.ResultSet = await client.execute(query, params);Stockez la propriété du
rowsrésultat sous la forme d’une variable nomméematchedProductsde typeProduct[].let matchedProducts: Product[] = result.rows;Itérer sur les résultats de la requête en appelant la
foreachméthode sur le tableau de produits.matchedProducts.forEach((product: Product) => { // Do something here with each result });
Exécuter le code
Exécutez l’application nouvellement créée à l’aide d’un terminal dans votre répertoire d’application.
node index.js
npx tsx index.ts
Nettoyer les ressources
Lorsque vous n’avez plus besoin du compte, supprimez le compte de votre abonnement Azure en supprimant la ressource.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"