Driver Amazon QLDB per Node.js — Tutorial di avvio rapido - Database Amazon Quantum Ledger (Amazon QLDB)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Driver Amazon QLDB per Node.js — Tutorial di avvio rapido

In questo tutorial, imparerai come configurare un'applicazione semplice utilizzando il driver Amazon QLDB per Node.js. Questa guida include passaggi per l'installazione del driver JavaScript TypeScript ed esempi di creazione, lettura, aggiornamento ed eliminazione CRUD. Per esempi più approfonditi che dimostrano queste operazioni in un'applicazione di esempio completa, consulta ilTutorial su Node.js.

Nota

Ove applicabile, alcuni passaggi hanno esempi di codice diversi per ciascuna versione principale supportata del driver QLDB per Node.js.

Prerequisiti

Prima di iniziare, eseguire la seguente procedura:

  1. Completa il driverPrerequisiti per Node.js, se non l'hai già fatto. Ciò include la registrazioneAWS, la concessione dell'accesso programmatico per lo sviluppo e l'installazione di Node.js.

  2. Crea un libro contabile denominatoquick-start.

    Per informazioni su come creare un libro mastro, consultaOperazioni di base per i libri mastri Amazon QLDB oFase 1: creazione di un nuovo libro mastro in Guida introduttiva alla console.

Se si utilizza TypeScript, è necessario eseguire anche i seguenti passaggi di configurazione.

Da installare TypeScript
  1. Installare il TypeScript pacchetto. Il driver QLDB viene eseguito su TypeScript 3.8.x.

    $ npm install --global typescript@3.8.0
  2. Dopo aver installato il pacchetto, eseguire il seguente comando per assicurarsi che il TypeScript compilatore sia installato.

    $ tsc --version

Per eseguire il codice nei passaggi seguenti, tieni presente che devi prima traspilare il TypeScript file in JavaScript codice eseguibile, come segue.

$ tsc app.ts; node app.js

Fase 1: Configurazione del progetto

In primo luogo, configura il tuo progetto Node.js.

  1. Crea una cartella per la tua applicazione.

    $ mkdir myproject $ cd myproject
  2. Per inizializzare il progetto, inserisci il seguentenpm comando e rispondi alle domande che vengono poste durante la configurazione. Puoi usare i valori predefiniti per la maggior parte delle domande.

    $ npm init
  3. Installa il driver Amazon QLDB per Node.js.

    • Utilizzo della versione 3.x

      $ npm install amazon-qldb-driver-nodejs --save
    • Utilizzo della versione 2.x

      $ npm install amazon-qldb-driver-nodejs@2.2.0 --save
    • Utilizzo della versione 1.x

      $ npm install amazon-qldb-driver-nodejs@1.0.0 --save
  4. Installa le dipendenze peer del driver.

    • Utilizzo della versione 3.x

      $ npm install @aws-sdk/client-qldb-session --save $ npm install ion-js --save $ npm install jsbi --save
    • Utilizzo della versione 2.x o 1.x

      $ npm install aws-sdk --save $ npm install ion-js@4.0.0 --save $ npm install jsbi@3.1.1 --save
  5. Crea un nuovo file denominatoapp.js per JavaScript, oapp.ts per TypeScript.

    Quindi, aggiungi in modo incrementale gli esempi di codice nei passaggi seguenti per provare alcune operazioni CRUD di base. In alternativa, puoi saltare il step-by-step tutorial ed eseguire invece l'applicazione completa.

Fase 2: Inizializzazione del driver

Inizializza un'istanza del driver che si connette al registro denominatoquick-start. Aggiungi il seguente codice al tuoapp.ts fileapp.js or.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); var https = require('https'); function main() { const maxConcurrentTransactions = 10; const retryLimit = 4; const agentForQldb = new https.Agent({ maxSockets: maxConcurrentTransactions }); const lowLevelClientHttpOptions = { httpAgent: agentForQldb } const serviceConfigurationOptions = { region: "us-east-1" }; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) var retryConfig = new qldb.RetryConfig(retryLimit); var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, lowlevelClientHttpOptions, maxConcurrentTransactions, retryConfig); } main();
TypeScript
import { Agent } from "https"; import { NodeHttpHandlerOptions } from "@aws-sdk/node-http-handler"; import { QLDBSessionClientConfig } from "@aws-sdk/client-qldb-session"; import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs"; function main(): void { const maxConcurrentTransactions: number = 10; const agentForQldb: Agent = new Agent({ maxSockets: maxConcurrentTransactions }); const lowLevelClientHttpOptions: NodeHttpHandlerOptions = { httpAgent: agentForQldb }; const serviceConfigurationOptions: QLDBSessionClientConfig = { region: "us-east-1" }; const retryLimit: number = 4; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) const retryConfig: RetryConfig = new RetryConfig(retryLimit); const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, lowLevelClientHttpOptions, maxConcurrentTransactions, retryConfig); } if (require.main === module) { main(); }
Nota
  • In questo esempio di codice, sostituisci us-east-1 con ilRegione AWS luogo in cui hai creato il tuo libro mastro.

  • Per semplicità, gli altri esempi di codice in questa guida utilizzano un driver con impostazioni predefinite, come specificato nell'esempio seguente per la versione 1.x. Puoi anche utilizzare la tua istanza del driver con unaRetryConfig personalizzata.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); var https = require('https'); function main() { var maxConcurrentTransactions = 10; var retryLimit = 4; var agentForQldb = new https.Agent({ keepAlive: true, maxSockets: maxConcurrentTransactions }); var serviceConfigurationOptions = { region: "us-east-1", httpOptions: { agent: agentForQldb } }; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) var retryConfig = new qldb.RetryConfig(retryLimit); var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig); } main();
TypeScript
import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs"; import { ClientConfiguration } from "aws-sdk/clients/acm"; import { Agent } from "https"; function main(): void { const maxConcurrentTransactions: number = 10; const agentForQldb: Agent = new Agent({ keepAlive: true, maxSockets: maxConcurrentTransactions }); const serviceConfigurationOptions: ClientConfiguration = { region: "us-east-1", httpOptions: { agent: agentForQldb } }; const retryLimit: number = 4; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) const retryConfig: RetryConfig = new RetryConfig(retryLimit); const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig); } if (require.main === module) { main(); }
Nota
  • In questo esempio di codice, sostituisci us-east-1 con ilRegione AWS luogo in cui hai creato il tuo libro mastro.

  • La versione 2.x introduce il nuovo parametro opzionaleRetryConfig per l'inizializzazioneQldbDriver.

  • Per semplicità, gli altri esempi di codice in questa guida utilizzano un driver con impostazioni predefinite, come specificato nell'esempio seguente per la versione 1.x. Puoi anche utilizzare la tua istanza del driver con unaRetryConfig personalizzata.

  • Questo esempio di codice inizializza un driver che riutilizza le connessioni esistenti impostando le opzioni keep-alive. Per ulteriori informazioni, consultaConsigli di configurazione il driver Node.js.

JavaScript
const qldb = require('amazon-qldb-driver-nodejs'); function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); } main();
TypeScript
import { QldbDriver } from "amazon-qldb-driver-nodejs"; function main(): void { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); } if (require.main === module) { main(); }
Nota

È possibile impostare la variabile diAWS_REGION ambiente per specificare la regione. Per ulteriori informazioni, consulta Impostare ilRegione AWS nella Guida per gliAWS SDK for JavaScript sviluppatori.

Fase 3: Creare una tabella e un indice

Gli esempi di codice seguenti mostrano come eseguireCREATE INDEX istruzioniCREATE TABLE e.

  1. Aggiungete la seguente funzione che crea una tabella denominataPeople.

    JavaScript
    async function createTable(txn) { await txn.execute("CREATE TABLE People"); }
    TypeScript
    async function createTable(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE TABLE People"); }
  2. Aggiungi la seguente funzione che crea un indice per ilfirstName campo dellaPeople tabella. Gli indici sono necessari per ottimizzare le prestazioni delle query e contribuire a limitare le eccezioni di conflitto OCC (Optimistic Concurrency Control).

    JavaScript
    async function createIndex(txn) { await txn.execute("CREATE INDEX ON People (firstName)"); }
    TypeScript
    async function createIndex(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE INDEX ON People (firstName)"); }
  3. Nellamain funzione, primacreateTable chiami e poi chiamicreateIndex.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); await driver.executeLambda(async (txn) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); }); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); }); driver.close(); } if (require.main === module) { main(); }
  4. Esegui il codice per creare la tabella e l'indice.

    JavaScript
    $ node app.js
    TypeScript
    $ tsc app.ts; node app.js

Fase 4: Inserimento di un documento

L'esempio di codice seguente mostra come eseguire un'INSERTistruzione. QLDB supporta il linguaggio di interrogazione PartiQL (compatibile con SQL) e il formato dati Amazon Ion (superset di JSON).

  1. Aggiungete la seguente funzione che inserisce un documento nellaPeople tabella.

    JavaScript
    async function insertDocument(txn) { const person = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); }
    TypeScript
    async function insertDocument(txn: TransactionExecutor): Promise<void> { const person: Record<string, any> = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); }

    Questo esempio utilizza un punto interrogativo (?) come segnaposto variabile per passare le informazioni del documento alla dichiarazione. Ilexecute metodo supporta valori sia nei tipi Amazon Ion che nei tipi nativi Node.js.

    Suggerimento

    Per inserire più documenti utilizzando una singolaINSERT istruzione, è possibile passare un elenco di parametri di tipo all'istruzione come segue.

    // people is a list txn.execute("INSERT INTO People ?", people);

    Non si racchiude la variabile placeholder (?) tra parentesi a doppio angolo (<<...>>) quando si passa un elenco. Nelle istruzioni PartiQL, le parentesi a doppio angolo indicano una raccolta non ordinata nota come borsa.

  2. Nellamain funzione, rimuovicreateIndex le chiamatecreateTable e e aggiungi una chiamata ainsertDocument.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); }); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); }); driver.close(); } if (require.main === module) { main(); }

Fase 5: esegui query sul documento

L'esempio di codice seguente mostra come eseguire un'SELECTistruzione.

  1. Aggiungete la seguente funzione che interroga un documento dallaPeople tabella.

    JavaScript
    async function fetchDocuments(txn) { return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John"); }
    TypeScript
    async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> { return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList(); }
  2. Nellamain funzione, aggiungi la seguente chiamata afetchDocuments dopo la chiamata ainsertDocument.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }

Fase 6: Aggiornamento del documento

L'esempio di codice seguente mostra come eseguire un'UPDATEistruzione.

  1. Aggiungete la seguente funzione che aggiorna un documento nellaPeople tabella passandolastName a"Stiles".

    JavaScript
    async function updateDocuments(txn) { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }
    TypeScript
    async function updateDocuments(txn: TransactionExecutor): Promise<void> { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }
  2. Nellamain funzione, aggiungi la seguente chiamata aupdateDocuments dopo la chiamata afetchDocuments. Quindi, chiamafetchDocuments di nuovo per vedere i risultati aggiornati.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }
  3. Esegui il codice per inserire, interrogare e aggiornare un documento.

    JavaScript
    $ node app.js
    TypeScript
    $ tsc app.ts; node app.js

Esecuzione dell'applicazione completa

I seguenti esempi di codice sono le versioni complete diapp.js eapp.ts. Invece di eseguire i passaggi precedenti singolarmente, puoi anche eseguire questo codice dall'inizio alla fine. Questa applicazione dimostra alcune operazioni CRUD di base sul registro denominatoquick-start.

Nota

Prima di eseguire questo codice, assicuratevi di non avere già una tabella attiva denominataPeople nelquick-start libro mastro.

JavaScript
const qldb = require('amazon-qldb-driver-nodejs'); async function createTable(txn) { await txn.execute("CREATE TABLE People"); } async function createIndex(txn) { await txn.execute("CREATE INDEX ON People (firstName)"); } async function insertDocument(txn) { const person = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); } async function fetchDocuments(txn) { return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John"); } async function updateDocuments(txn) { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); } async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
TypeScript
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function createTable(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE TABLE People"); } async function createIndex(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE INDEX ON People (firstName)"); } async function insertDocument(txn: TransactionExecutor): Promise<void> { const person: Record<string, any> = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); } async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> { return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList(); } async function updateDocuments(txn: TransactionExecutor): Promise<void> { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }

Per eseguire l'applicazione completa, immetti il seguente comando.

JavaScript
$ node app.js
TypeScript
$ tsc app.ts; node app.js