Contents

AWS DynamoDB gebruiken in een Node.js toepassing

Belangrijkste opmerkingen

DynamoDB is een uitzonderlijk robuuste en efficiënte NoSQL database-oplossing van Amazon Web Services (AWS), die in staat is om grote hoeveelheden gevarieerde informatie te beheren met behoud van optimale prestaties, veerkracht en betrouwbaarheid.

Om het gebruik van Amazon’s NoSQL database service, bekend als DynamoDB, te starten binnen een Node.js omgeving, is het nodig om de client-dynamodb module te verkrijgen van de AWS SDK en de juiste authenticatie instellingen te maken voor toegang tot het platform.

DynamoDB biedt een eenvoudige aanpak voor het creëren van tabellen, het manipuleren van data door middel van de verschillende operaties zoals het schrijven, lezen, bijwerken en verwijderen van records, allemaal met behulp van door de gebruiker gedefinieerde parameters. Deze functie bevordert het aanpassingsvermogen en de schaalbaarheid in het applicatieontwerp, waardoor de algehele efficiëntie toeneemt.

Het gebruik van een reeks robuuste programmeertalen in combinatie met krachtige databases is essentieel voor een aanzienlijk deel van de hedendaagse applicatiecreatie.

Amazon Web Services biedt een innovatieve oplossing die bekend staat als DynamoDB, die de potentie heeft om datamanagement te transformeren door het mogelijk te maken om snel databases te maken die in staat zijn om grote en gevarieerde datasets efficiënt te verwerken.

Wat is DynamoDB?

Amazon Web Services biedt verschillende oplossingen voor verschillende databasereisen, waaronder Amazon Relational Database Service (RDS) voor traditionele relationele databases en Amazon DocumentDB, dat documentdatabases ondersteunt vergelijkbaar met MongoDB. Daarnaast is DynamoDB een voorbeeld van een niet-relationele of NoSQL database die gegevens opslaat met behulp van een key-value opslagsysteem.

DynamoDB is in staat om grote hoeveelheden informatie, verspreid over een gedistribueerd netwerk, efficiënt te beheren met behoud van uitzonderlijke prestaties, duurzaamheid en betrouwbaarheid. Het systeem biedt een aanpasbaar raamwerk voor het eenvoudig opslaan en ophalen van zowel gestructureerde als ongestructureerde gegevens.

DynamoDB is een veelzijdige databaseoplossing die in meerdere domeinen kan worden gebruikt. Het is toegankelijk via zowel de AWS Management Console als de AWS Command Line Interface (CLI), maar kan ook worden geïntegreerd in webapplicaties met behulp van de AWS Software Development Kit (SDK).

Aan de slag met DynamoDB in Node.js

Node.js biedt een breed scala aan opties voor het bouwen van back-end application programming interfaces (API’s) en biedt gebruikers de flexibiliteit om de database van hun voorkeur te selecteren voor integratie binnen deze context.Bovendien ondersteunt Node.js talloze externe services, zoals DynamoDB van Amazon Web Services, waardoor ontwikkelaars een uitgebreide keuze hebben om aan hun specifieke eisen te voldoen.

Om een Amazon Web Services (AWS) service te gebruiken binnen een Node applicatie, is het enige dat nodig is het juiste SDK pakket specifiek voor die service. Om bijvoorbeeld te communiceren met DynamoDB, moet je de client-dynamodb module verkrijgen en installeren die zich in de aws-sdk bevindt.

Volg deze stappen om een opdracht uit te voeren in de opgegeven projectdirectory:1. Navigeer naar de gewenste projectdirectory met behulp van een terminal of opdrachtprompt.2. Typ de juiste opdracht in voor het installeren van het vereiste pakket en druk op enter.3. Het installatieproces zal beginnen en zodra het is voltooid, moet je controleren of het pakket met succes is geïnstalleerd door te controleren of het aanwezig is in het bestandssysteem van het project.

 npm install @aws-sdk/client-dynamodb

Om een DynamoDB tabel te gebruiken in je Node.js project met het aws-sdk/client-dynamodb pakket, is het nodig om de geografische locatie van de tabel te specificeren door de regio op te nemen in de configuratie-instellingen van de client voordat er interacties plaatsvinden. Deze configuratie update moet worden uitgevoerd tijdens het initialisatie proces van de DynamoDB client.

Als je eerder de AWS CLI hebt geïnstalleerd en gebruikt op je computer, is het zeer waarschijnlijk dat je al AWS credentials hebt ingesteld in je omgevingsinstellingen. In zo’n geval zal de bijbehorende software development kit (SDK) deze waarden naadloos ophalen uit die omgeving, zonder dat daar extra handelingen voor nodig zijn.

Als je nog geen IAM-gebruiker hebt aangemaakt binnen de Amazon Web Services (AWS) Console, kun je dit doen door te navigeren naar de AWS Identity and Access Management (IAM) service. Zodra je deze nieuwe gebruikersaccount hebt aangemaakt, krijg je een unieke access key identifier en bijbehorende secret key, die dienen als je geïndividualiseerde referenties voor toegang tot verschillende bronnen binnen het AWS ecosysteem.

Om deze verificatiesleutels in je werkruimte op te nemen, kun je de volgende opdrachtregelinstructies uitvoeren op je besturingssysteem:

Op Unix, Linux of macOS:

 export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'

Op Windows (CMD):

 set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'

Op Windows (PowerShell):

 $env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'

Maak in je Node.js project een nieuw bestand met de naam “dynamodb.js”.Gebruik in dit bestand de volgende regels code om een instantie van de Amazon Web Services (AWS) DynamoDB client te initialiseren:

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

const region = "us-east-1" // your preferred region

const client = new DynamoDB({ region })

AWS zorgt ervoor dat gevoelige beveiligingsinformatie adequaat wordt beschermd door te voorkomen dat zulke gegevens in de code zelf worden vrijgegeven. Bijgevolg worden bij een poging om een clientverbinding tot stand te brengen, zoals eerder gedemonstreerd, de benodigde toegangssleutels en geheime sleutels opgehaald uit een omgevingsbron in plaats van rechtstreeks in de code te zitten.

De recent opgezette client faciliteert een veelheid aan functionaliteiten zoals het aanmaken van tabellen en het in- en uitvoeren van gegevens.

DynamoDB werkt op een schema-loze architectuur, vergelijkbaar met andere NoSQL databases, wat de naadloze toevoeging van nieuwe attributen of velden aan een bestaande tabel mogelijk maakt zonder significante overhead. Daarom is het bij het aanmaken van een DynamoDB tabel noodzakelijk om specifieke attributen aan te wijzen die zullen fungeren als primaire sleutels om het efficiënt terugvinden en beheren van gegevens te vergemakkelijken.

Laten we ons verdiepen in een voorbeeld van code die een nieuwe tabel met de naam “Customer” maakt binnen het domein van Amazon’s DynamoDB service:

 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();

Het AttributeDefinitions veld dient om de primaire kenmerken van de tabelstructuur te specificeren door het definiëren van de essentiële attributen samen met hun respectievelijke datatypes. In dit specifieke geval wordt het kenmerk E-mail aangeduid als een gegevenstype op basis van tekenreeksen, aangeduid met de afkorting “S”. De andere beschikbare attribuuttypes omvatten numerieke waarden vertegenwoordigd door “N” en binaire gegevens gekenmerkt door “B”.

Om efficiënt data op te halen en te ordenen in een DynamoDB tabel, is het essentieel om een primaire sleutel schema op te stellen dat één of meer attributen aanwijst als unieke identificatie voor elk item. In dit geval, omdat we “Email” hebben aangewezen als de primaire sleutel, moet het worden opgenomen in het KeySchema met het gespecificeerde KeyType van “HASH”. Hierdoor kan DynamoDB effectief specifieke records identificeren en lokaliseren op basis van hun e-mailadres.

Een andere alternatieve optie voor het KeyType attribuut is het Range type, dat dient als een sorteermechanisme wanneer het wordt toegepast op niet-unieke hash waarden binnen een database tabel. In situaties waar meerdere records identieke hashwaarden hebben, maakt het gebruik van bereiksleutels het mogelijk om deze records te groeperen op basis van aanvullende onderscheidende informatie, zoals datums of kleuren. Door deze methode toe te passen, kan men effectief gegevens organiseren op een meer gestructureerde manier en tegelijkertijd potentiële conflicten vermijden die kunnen ontstaan door alleen hash sleutels te gebruiken.

Het derde essentiële aspect binnen de eerder genoemde code heeft betrekking op de ProvisionedThroughput, die de toegestane snelheid van lees- en schrijfbewerkingen voor de gespecificeerde DynamoDB tabel per seconde vaststelt.

Na het uitvoeren van de bovenstaande code, kun je output verwachten in de vorm van:

/nl/images/dynamodb_create_table_console.jpg

Bij het navigeren naar het DynamoDB tabellen dashboard in de AWS Management Console web interface, kan men zien dat de tabel ofwel het provisioning proces ondergaat of succesvol is gecreëerd en momenteel een status van “actief” of “provisioned” vertoont.

Bij het bepalen van de juiste waarden voor ReadCapacityUnits en WriteCapacityUnits is het cruciaal om de specifieke vereisten van je applicatie zorgvuldig te evalueren om potentiële prestatieproblemen of te hoge kosten voor je account te voorkomen.

Als de tabel eenmaal actief is, kunt u verschillende bewerkingen uitvoeren voor het maken, lezen, bijwerken en verwijderen van gegevens in de tabel.

De gegeven voorbeelden demonstreren het proces van het schrijven en ophalen van informatie uit de

⭐ Gegevens aan de tabel toevoegen . Om gegevens naar een tabel te schrijven, heb je de putItem-methode van de client nodig. De onderstaande code voegt een nieuwe klant toe aan de tabel Customer in 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)

Het params object bevat de TableName die de tabel is waarnaar je schrijft, en het Item veld dat de data bevat die je toevoegt met hun specifieke types. Let op de nieuwe velden die in eerste instantie niet in de tabel zaten, dit is hoe DynamoDB flexibel werkt. Je kunt de gegevens in je database op deze manier bekijken in je console: /nl/images/dynamodb_table_data_screen.jpg

⭐ Lees gegevens uit de tabel . DynamoDB staat je toe om data te lezen op verschillende manieren. De SDK’s scan functie leest de hele tabel, terwijl getItem alleen specifieke data leest. Bijvoorbeeld, de onderstaande code krijgt alle klanten:

 const getAllCustomers = async () => {
    const params = {
        TableName: "Customer"
    }

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

Terwijl de volgende code de gebruiker krijgt door de e-mail waarde:

 const getCustomerByEmail = async (email) => {
    const params = {
        TableName: "Customer",
        Key: {
            Email: { "S": email } // the type is always required
        }
    }

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

getCustomerByEmail("[email protected]")

⭐ Update data in de tabel . Gebruik de functie updateItem van de SDK om bestaande gegevens in een tabel bij te werken. De volgende code demonstreert hoe u een specifieke record bijwerkt:

  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)
 }

Je kunt er ook voor kiezen om je functie dynamisch te maken door update expressies te bouwen van je update data. DynamoDB’s flexibiliteit stelt je in staat om elke operatie te behandelen volgens je behoeften.

⭐ Verwijder data uit de tabel . Om een record uit DynamoDB te verwijderen, heb je de deleteItem functie nodig en de sleutel van de specifieke record.Hier lees je hoe je het implementeert:

 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]")

EfficiÃ"nte applicaties bouwen met DynamoDB

Amazon Web Services blijft zeer succesvol en biedt een gebruiksvriendelijk platform voor het ontwikkelen van effectieve, betrouwbare digitale diensten terwijl robuuste beveiligingsmaatregelen gegarandeerd zijn. De DynamoDB-oplossing presenteert zichzelf als een ideale optie voor diegenen die op zoek zijn naar een gestroomlijnde database-ervaring die minimaal beheer van de onderliggende infrastructuur of beschermingsprotocollen vereist.

Je hebt de nodige kennis en tools verworven om DynamoDB te gebruiken binnen een Node.js project, zodat je een geïnformeerde beslissing kan nemen over de implementatie ervan in toekomstige projecten.