Node.js und DAX - Amazon DynamoDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Node.js und DAX

Das DAX-SDK für Node.js v3.x ist mit dem AWS -SDK für Node.js v3.x kompatibel. Das DAX-SDK für Node.js v3.x unterstützt die Verwendung aggregierter Clients. Beachten Sie, dass DAX die Erstellung von Bare-Bone-Clients nicht unterstützt. Weitere Informationen zu nicht unterstützten Funktionen finden Sie unter Funktionen, die nicht mit AWS SDK V3 identisch sind.

Gehen Sie wie folgt vor, um die Beispielanwendung Node.js auf Ihrer EC2 Amazon-Instance auszuführen.

So führen Sie das Node.js-Beispiel für DAX aus
  1. Richten Sie Node.js auf Ihrer EC2 Amazon-Instance wie folgt ein:

    1. Installieren Sie den Node Version Manager (nvm).

      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    2. Installieren Sie Node.js mit dem nvm.

      nvm install 18
    3. Verwenden Sie nvm, um Node 18 zu verwenden.

      nvm use 18
    4. Testen Sie, ob Node.js installiert ist und ordnungsgemäß ausgeführt wird.

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

      Die folgende Meldung sollte angezeigt werden.

      Running Node.js v18.x.x

  2. Installieren Sie den Client DaxDocument Node.js mit dem Node-Paketmanager (npm).

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

TryDaxBeispielcode

Wenn Sie die Leistungsvorteile von DynamoDB Accelerator (DAX) bewerten möchten, gehen Sie wie folgt vor, um einen Beispieltest durchzuführen, bei dem die Lesevorgangszeiten zwischen Standard-DynamoDB und einem DAX-Cluster verglichen werden.

  1. Nachdem Sie Ihren Workspace eingerichtet und lib-dax als Abhängigkeit hinzugefügt haben, kopieren Sie TryDax.js in Ihr Projekt.

  2. Führen Sie das Programm für Ihren DAX-Cluster aus. Um den Endpunkt für Ihren DAX-Cluster zu bestimmen, wählen Sie einen der folgenden Schritte aus:

    • Using the DynamoDB console (Verwenden der DynamoDB-Konsole) — Wählen Sie Ihren DAX-Cluster aus. Der Cluster-Endpunkt wird auf der Konsole angezeigt, wie im folgenden Beispiel gezeigt.

      dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com
    • Verwenden Sie AWS CLI— Geben Sie den folgenden Befehl ein.

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

      Der Cluster-Endpunkt wird in der Ausgabe angezeigt, wie im folgenden Beispiel gezeigt.

      { "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. Führen Sie jetzt das Programm aus, indem Sie den Cluster-Endpunkt als Befehlszeilenparameter angeben.

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

    Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:

    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.

    Beachten Sie die Zeitinformationen. Die Anzahl der Mikrosekunden, die für die GetItem-, Query-, Scan-Tests benötigt werden.

  4. In diesem Fall haben Sie die Programme für den DAX-Cluster ausgeführt. Jetzt führen Sie das Programm erneut aus, diesmal für DynamoDB.

  5. Führen Sie nun das Programm erneut aus, diesmal aber ohne die Cluster-Endpunkt-URL als Befehlszeilenparameter.

    node TryDax.js

    Sehen Sie sich die Ausgabe an und notieren Sie die Zeitinformationen. Die verstrichene Zeit sollte für GetItem, Query und Scan mit DAX deutlich kürzer sein als mit DynamoDB.

Funktionen, die nicht mit AWS SDK V3 identisch sind

  • Bare-Bone-Clients: Dax Node.js V3 unterstützt keine Bare-Bone-Clients.

    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);
  • Middleware-Stack: Dax Node.js V3 unterstützt die Verwendung von Middleware-Funktionen nicht.

    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", } );