Utilizarea AWS DynamoDB într-o aplicație Node.js

Aspecte Cheie

  • DynamoDB, o bază de date NoSQL puternică oferită de AWS, excelează în gestionarea volumelor mari și diverse de date, menținând în același timp performanța, durabilitatea și fiabilitatea.
  • Pentru a începe utilizarea DynamoDB în Node.js, instalați pachetul `client-dynamodb` din `aws-sdk` și configurați-vă credențialele.
  • Cu DynamoDB, puteți crea tabele, scrie și citi date, actualiza înregistrări și șterge date cu ușurință, folosind metodele și parametrii clientului. Acest lucru oferă flexibilitate și scalabilitate pentru dezvoltarea eficientă a aplicațiilor.

Dezvoltarea modernă a aplicațiilor necesită adesea o combinație armonioasă între limbaje de programare robuste și sisteme de baze de date de înaltă performanță.

Amazon Web Services (AWS) oferă o soluție remarcabilă sub forma DynamoDB, un instrument care poate optimiza gestionarea datelor. Cu acesta, puteți implementa rapid o bază de date capabilă să gestioneze volume mari și variate de informații.

Ce este DynamoDB?

AWS furnizează o gamă variată de servicii de baze de date pentru diferite cerințe, inclusiv Amazon RDS pentru bazele de date relaționale și DocumentDB pentru bazele de date de documente, asemănătoare cu MongoDB. DynamoDB este o bază de date NoSQL concepută pentru stocarea datelor în format cheie-valoare.

DynamoDB poate gestiona cantități masive de date într-o infrastructură distribuită, fără a compromite performanța, durabilitatea sau fiabilitatea. Aceasta oferă un model adaptabil, permițându-vă să stocați și să interogați date cu ușurință, indiferent dacă acestea sunt structurate sau nestructurate.

Puteți utiliza DynamoDB ca soluție de bază de date pentru diverse tipuri de aplicații. Accesul la aceasta se poate face direct prin consola web AWS, în mod programatic prin AWS-CLI, sau prin aplicații web folosind AWS-SDK.

Primii pași cu DynamoDB în Node.js

Există o multitudine de instrumente disponibile pentru construirea de API-uri backend în Node.js, iar alegerea bazei de date pentru API-ul dvs. este flexibilă. Node.js oferă suport extins pentru servicii externe, inclusiv baze de date precum AWS DynamoDB.

Tot ce aveți nevoie pentru a accesa un serviciu AWS dintr-o aplicație Node este pachetul client `aws-sdk` specific serviciului respectiv. De exemplu, pentru a interacționa cu DynamoDB, este necesar să instalați pachetul `client-dynamodb` din cadrul `aws-sdk`.

Rulați următoarea comandă în directorul proiectului dvs. pentru a instala pachetul:

 npm install @aws-sdk/client-dynamodb

După instalarea pachetului `aws-sdk/client-dynamodb` în proiectul Node.js, trebuie să specificați regiunea tabelului DynamoDB în configurație, înainte de a interacționa cu acesta. Acest lucru se realizează în timpul inițializării clientului DynamoDB.

Dacă ați instalat și ați utilizat anterior AWS-CLI pe computerul dvs., este probabil să aveți deja credențialele AWS configurate în mediul dvs., iar SDK-ul le va prelua automat din variabilele de mediu.

Dacă nu ați făcut acest lucru, puteți accesa serviciul AWS Identity Access Management (IAM) din consola dvs. și crea un nou utilizator. După crearea utilizatorului, veți obține un ID de cheie de acces și o cheie secretă, care vor reprezenta credențialele dvs. personale.

Adăugați aceste credențiale în mediul dvs., executând următoarele comenzi în terminal, în funcție de sistemul dvs. de operare:

Pentru Unix, Linux sau macOS:

 export AWS_ACCESS_KEY_ID='id-ul cheii dvs. de acces'
export AWS_SECRET_ACCESS_KEY='cheia dvs. secretă de acces'

Pentru Windows (CMD):

 set AWS_ACCESS_KEY_ID='id-ul cheii dvs. de acces'
set AWS_SECRET_ACCESS_KEY='cheia dvs. secretă de acces'

Pentru Windows (PowerShell):

 $env:AWS_ACCESS_KEY_ID='id-ul cheii dvs. de acces'
$env:AWS_SECRET_ACCESS_KEY='cheia dvs. secretă de acces'

Apoi, înapoi în proiectul dvs. Node.js, creați un fișier nou numit `dynamodb.js`. În acest fișier, instanțiați un nou client AWS DynamoDB folosind următorul cod:

 const { DynamoDB } = require('@aws-sdk/client-dynamodb')

const region = "us-east-1"

const client = new DynamoDB({ region })

Foarte simplu! AWS se asigură că nu expuneți credențialele de securitate în codul dvs., astfel încât, în timp ce codul de mai sus încearcă să creeze clientul, acesta citește mai întâi cheia de acces și cheia secretă din variabilele de mediu.

Clientul nou creat vă permite să efectuați diverse operațiuni, cum ar fi crearea de tabele, precum și citirea și scrierea de date.

DynamoDB este fără schemă, similar cu alte baze de date NoSQL, ceea ce vă permite să adăugați oricând noi atribute (câmpuri) unui tabel. Din acest motiv, este suficient să adăugați doar atributele care vor servi drept chei primare la crearea unui tabel DynamoDB.

Consultați exemplul de cod de mai jos, care demonstrează crearea unui nou tabel (`Client`) în DynamoDB:

 const createCustomerTable = async () => {
    const params = {
        TableName: "Customer",
        AttributeDefinitions: [
            {
                AttributeName: "Email",
                AttributeType: "S"
            },
        ],
        KeySchema: [
            {
                AttributeName: "Email",
                KeyType: "HASH"
            }
        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 5,
            WriteCapacityUnits: 5
        }
    };

    client.createTable(params, (err, data) => {
        if (err) {
           console.log(err);
        } else {
            console.log(data);
        }
    });
}

createCustomerTable();

Câmpul `AttributeDefinitions` este locul unde definiți atributele cheie ale tabelului și tipurile acestora. Atributul `Email` are tipul `S`, ceea ce înseamnă că câmpul așteaptă un șir ca valoare. Tipurile de atribute disponibile sunt `S`, `N` și `B` (șir, număr și binar).

Aveți nevoie de `KeySchema` pentru a defini cheile primare, care vă ajută să identificați și să organizați rapid elementele. DynamoDB se așteaptă ca atributele pe care le adăugați la crearea tabelului să fie atribute cheie, deci emailul este cheia primară în acest caz. Acesta trebuie adăugat la `KeySchema` și trebuie specificat `KeyType` ca `HASH`.

Cealaltă valoare disponibilă pentru `KeyType` este `RANGE`, care este utilizată pentru cheile de sortare. Cheile de sortare sunt utile în situațiile în care aveți date cu aceeași cheie `HASH` într-un tabel și doriți să le grupați în funcție de date suplimentare, cum ar fi data sau culoarea, transformând datele suplimentare într-o cheie `RANGE`.

Al treilea parametru important din codul de mai sus este `ProvisionedThroughput`. Acesta definește numărul de operații de citire și scriere pe secundă pe care doriți să le permită DynamoDB pentru tabel.

Când executați codul de mai sus, ar trebui să obțineți rezultate similare cu următorul exemplu:

Dacă verificați tabloul de bord pentru tabelele DynamoDB din consola web, veți observa că tabelul este fie în proces de furnizare, fie are deja starea activă.

Luați întotdeauna în considerare nevoile aplicației dvs. atunci când specificați valorile pentru `ReadCapacityUnits` și `WriteCapacityUnits`, deoarece o valoare inadecvată poate duce la probleme de performanță sau la costuri mari de facturare pentru contul dvs.

Odată ce sunteți sigur că tabelul este activ, puteți efectua operațiuni CRUD pe acesta.

Următoarele exemple de cod ilustrează modul de scriere și citire de date în tabelul `Client`.

  • Adăugarea de date în tabel. Pentru a scrie date într-un tabel, utilizați metoda `putItem` a clientului. Următorul cod adaugă un nou client în tabelul `Client` din DynamoDB.
     const createCustomer = async (customer) => {
        const params = {
            TableName: "Customer",
            Item: customer
        }

        client.putItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log(data)
            }
        })
    }

    const customerData = {
        Name: { "S": "Timilehin O." },
        Email: { "S": "[email protected]" },
        Age: { "N": "18"},
        Country: { "S": "Nigeria" }
    }

    createCustomer(customerData)

    Obiectul `params` conține `TableName`, care este tabelul în care se scrie, și câmpul `Item`, care conține datele adăugate, cu tipurile lor specifice. Observați noile câmpuri care nu existau în tabelul inițial; aceasta este flexibilitatea DynamoDB. Puteți vizualiza datele din baza de date în consolă, după cum se arată mai jos:

  • Citirea datelor din tabel. DynamoDB oferă multiple modalități de citire a datelor. Funcția `scan` a SDK-ului citește întregul tabel, în timp ce funcția `getItem` citește doar date specifice. De exemplu, codul de mai jos obține toți clienții:
     const getAllCustomers = async () => {
        const params = {
            TableName: "Customer"
        }

        const customers = await client.scan(params)
        console.log(customers)
    }

    În timp ce următorul cod obține utilizatorul după valoarea adresei de e-mail:

     const getCustomerByEmail = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

        const customer = await client.getItem(params)
        console.log(customer)
    }

    getCustomerByEmail("[email protected]")

  • Actualizarea datelor din tabel. Pentru a actualiza datele existente într-un tabel, utilizați funcția `updateItem` a SDK-ului. Următorul cod demonstrează actualizarea unei anumite înregistrări:
      const updateCustomerLocation = async (email, age) => {
         const params = {
             TableName: "Customer",
             Key: {
                 Email: { "S": email }
             },
             UpdateExpression: "SET Age = :newAge",
             ExpressionAttributeValues: {
                 ':newAge': { "N": age }
             },
             ReturnValues: "ALL_NEW"
         }

         const updatedCustomer = await client.updateItem(params)
         console.log(updatedCustomer.Attributes)
     }

    De asemenea, puteți opta pentru a face funcția dinamică, creând expresii de actualizare din datele dvs. de actualizare. Flexibilitatea DynamoDB vă permite să gestionați fiecare operațiune în funcție de cerințele specifice.

  • Ștergerea datelor din tabel. Pentru a șterge o înregistrare din DynamoDB, utilizați funcția `deleteItem` și cheia înregistrării specifice. Iată cum puteți implementa acest lucru:
     const deleteCustomer = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

        client.deleteItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log("Customer deleted successfully")
            }
        })
    }

    deleteCustomer("[email protected]")

  • Dezvoltarea aplicațiilor performante cu DynamoDB

    Amazon Web Services continuă să evolueze. Aceasta oferă o platformă accesibilă pe care o puteți folosi pentru a dezvolta soluții digitale eficiente și sigure. DynamoDB este alegerea ideală dacă sunteți în căutarea unei baze de date care să ruleze fără a vă face griji cu privire la infrastructură sau securitate.

    Acum aveți cunoștințele necesare pentru a începe să utilizați DynamoDB în Node.js și puteți alege cu încredere DynamoDB pentru următoarea dvs. aplicație Node.js.