Node.js et DAX - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Node.js et DAX

Le kit SDK DAX pour Node.js v3.x est compatible avec l’AWS SDK pour Node.js v3.x. Le kit SDK DAX pour Node.js v3.x prend en charge l’utilisation de clients regroupés. Notez que DAX ne prend pas en charge la création de clients bone. Pour plus de détails sur les fonctionnalités non prises en charge, consultez Fonctionnalités non équivalentes à celles du AWS SDK V3.

Suivez ces étapes pour exécuter l'exemple d'application Node.js sur votre EC2 instance Amazon.

Pour exécuter l’exemple Node.js pour DAX
  1. Configurez Node.js sur votre EC2 instance Amazon, comme suit :

    1. Installez le gestionnaire de version de nœud (nvm).

      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    2. Utilisez nvm pour installer Node.js.

      nvm install 18
    3. Utilisez nvm pour l’utilisation de Node 18

      nvm use 18
    4. Testez que Node.js est installé et fonctionne correctement.

      node -e "console.log('Running Node.js ' + process.version)"

      Le message suivant doit s’afficher.

      Running Node.js v18.x.x

  2. Installez le client DaxDocument Node.js à l'aide du gestionnaire de packages de nœuds (npm).

    npm install @amazon-dax-sdk/lib-dax

TryDaxexemple de code

Pour évaluer les avantages en matière de performances de DynamoDB Accelerator (DAX), procédez comme suit pour exécuter un exemple de test qui compare les temps de lecture entre DynamoDB standard et un cluster DAX.

  1. Après avoir configuré votre espace de travail et installé lib-dax en tant que dépendance, copiez TryDax.js dans votre projet.

  2. Exécutez le programme sur votre cluster DAX. Pour déterminer le point de terminaison de votre cluster DAX, choisissez l’une des options suivantes :

    • Utilisation de la console DynamoDB – Choisissez votre cluster DAX. Le point de terminaison du cluster s’affiche dans la console, comme dans l’exemple suivant.

      dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com
    • À l'aide de AWS CLI— Entrez la commande suivante.

      aws dax describe-clusters --query "Clusters[*].ClusterDiscoveryEndpoint"

      Le point de terminaison du cluster apparaît dans la sortie, comme dans l’exemple suivant.

      { "Address": "my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com", "Port": 8111, "URL": "dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com" }
  3. À présent, exécutez le programme en spécifiant le point de terminaison de cluster comme paramètre de ligne de commande.

    node TryDax.js dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com

    Vous devez voir des résultats similaires à ce qui suit :

    Attempting to create table; please wait... Successfully created table. Table status: ACTIVE Writing data to the table... Writing 20 items for partition key: 1 Writing 20 items for partition key: 2 Writing 20 items for partition key: 3 ... Running GetItem Test Total time: 153555.10 µs - Avg time: 383.89 µs Total time: 44679.96 µs - Avg time: 111.70 µs Total time: 36885.86 µs - Avg time: 92.21 µs Total time: 32467.25 µs - Avg time: 81.17 µs Total time: 32202.60 µs - Avg time: 80.51 µs Running Query Test Total time: 14869.25 µs - Avg time: 2973.85 µs Total time: 3036.31 µs - Avg time: 607.26 µs Total time: 2468.92 µs - Avg time: 493.78 µs Total time: 2062.53 µs - Avg time: 412.51 µs Total time: 2178.22 µs - Avg time: 435.64 µs Running Scan Test Total time: 2395.88 µs - Avg time: 479.18 µs Total time: 2207.16 µs - Avg time: 441.43 µs Total time: 2443.14 µs - Avg time: 488.63 µs Total time: 2038.24 µs - Avg time: 407.65 µs Total time: 1972.17 µs - Avg time: 394.43 µs Running Pagination Test Scan Pagination [ { pk: 1, sk: 1, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 2, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 3, someData: 'XXXXXXXXXX' } ] [ { pk: 1, sk: 4, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 5, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 6, someData: 'XXXXXXXXXX' } ] ... Query Pagination [ { pk: 1, sk: 1, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 2, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 3, someData: 'XXXXXXXXXX' } ] [ { pk: 1, sk: 4, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 5, someData: 'XXXXXXXXXX' }, { pk: 1, sk: 6, someData: 'XXXXXXXXXX' } ] ... Attempting to delete table; please wait... Successfully deleted table.

    Notez les informations relatives à la durée, c’est-à-dire le nombre de microsecondes requis pour les tests GetItem, Query et Scan.

  4. Dans ce cas, vous avez exécuté les programmes sur le cluster DAX. Vous allez maintenant réexécuter le programme mais, cette fois, sur DynamoDB.

  5. À présent, réexécutez le programme mais, cette fois, sans l’URL du point de terminaison du cluster en tant que paramètre de ligne de commande.

    node TryDax.js

    Examinez la sortie et notez les informations de durée. Les délais écoulés pour GetItem, Query et Scan devraient être sensiblement inférieurs avec DAX par rapport à DynamoDB.

Fonctionnalités non équivalentes à celles du AWS SDK V3

  • Clients bone : Dax Node.js V3 ne prend pas en charge les clients élémentaires.

    const dynamoDBClient = new DynamoDBClient({ region: 'us-west-2' }); const regularParams = { TableName: 'TryDaxTable', Key: { pk: 1, sk: 1 } }; // The DynamoDB client supports the send operation. const dynamoResult = await dynamoDBClient.send(new GetCommand(regularParams)); // However, the DaxDocument client does not support the send operation. const daxClient = new DaxDocument({ endpoints: ['your-dax-endpoint'], region: 'us-west-2', }); const params = { TableName: 'TryDaxTable', Key: { pk: 1, sk: 1 } }; // This will throw an error - send operation is not supported for DAX. Please refer to documentation. const result = await daxClient.send(new GetCommand(params)); console.log(result);
  • Pile d’intergiciel : Dax Node.js V3 ne prend pas en charge l’utilisation des fonctions d’intergiciel.

    const dynamoDBClient = new DynamoDBClient({ region: 'us-west-2' }); // The DynamoDB client supports the middlewareStack. dynamoDBClient.middlewareStack.add( (next, context) =>> async (args) => { console.log("Before operation:", args); const result = await next(args); console.log("After operation:", result); return result; }, { step: "initialize", // or "build", "finalizeRequest", "deserialize" name: "loggingMiddleware", } ); // However, the DaxDocument client does not support the middlewareStack. const daxClient = new DaxDocument({ endpoints: ['your-dax-endpoint'], region: 'us-west-2', }); // This will throw an error - custom middleware and middlewareStacks are not supported for DAX. Please refer to documentation. daxClient.middlewareStack.add( (next, context) => async (args) => { console.log("Before operation:", args); const result = await next(args); console.log("After operation:", result); return result; }, { step: "initialize", // or "build", "finalizeRequest", "deserialize" name: "loggingMiddleware", } );