Använda AWS DynamoDB i en Node.js-applikation
Key Takeaways
DynamoDB är en exceptionellt robust och effektiv NoSQL-databaslösning som tillhandahålls av Amazon Web Services (AWS), som kan hantera stora volymer av varierad information och samtidigt upprätthålla optimala nivåer av prestanda, resiliens och tillförlitlighet.
För att börja använda Amazons NoSQL-databastjänst, DynamoDB, i en Node.js-miljö är det nödvändigt att hämta modulen client-dynamodb från AWS SDK och fastställa lämpliga autentiseringsinställningar för åtkomst till plattformen.
DynamoDB är ett enkelt sätt att skapa tabeller och manipulera data genom olika operationer som att skriva, läsa, uppdatera och radera poster, allt med hjälp av användardefinierade parametrar. Denna funktion främjar anpassningsförmåga och skalbarhet i applikationsdesign, vilket förbättrar den övergripande effektiviteten.
Att använda en rad robusta programmeringsspråk i kombination med kraftfulla databaser är avgörande för en betydande del av skapandet av moderna applikationer.
Amazon Web Services tillhandahåller en innovativ lösning som kallas DynamoDB, som har potential att förändra datahanteringen genom att möjliggöra snabbt skapande av databaser som effektivt kan hantera stora och varierande datamängder.
Vad är DynamoDB?
Amazon Web Services tillhandahåller olika lösningar som tillgodoser olika databasbehov, inklusive Amazon Relational Database Service (RDS) för traditionella relationsdatabaser och Amazon DocumentDB, som stöder dokumentdatabaser som liknar MongoDB. DynamoDB är dessutom ett exempel på en icke-relationell eller NoSQL-databas som lagrar data med hjälp av ett nyckelvärdeslagringssystem.
DynamoDB kan effektivt hantera stora mängder information som är utspridd i ett distribuerat nätverk, samtidigt som den upprätthåller exceptionella nivåer av prestanda, uthållighet och tillförlitlighet. Systemet är ett anpassningsbart ramverk som möjliggör enkel lagring och hämtning av både strukturerad och ostrukturerad data.
DynamoDB är en mångsidig databaslösning som kan användas inom flera domäner. Den kan nås via både AWS Management Console och AWS Command Line Interface (CLI), samt integreras i webbapplikationer med hjälp av AWS Software Development Kit (SDK).
Kom igång med DynamoDB i Node.js
Node.js erbjuder en mängd olika alternativ för att skapa API:er (Application Programming Interface) för back-end-applikationer och ger användarna flexibilitet att välja den databas de föredrar för integrering i detta sammanhang.Dessutom stöder Node.js många externa tjänster, t.ex. Amazon Web Services DynamoDB, vilket ger utvecklarna ett stort antal valmöjligheter för att tillgodose deras specifika krav.
För att använda en tjänst från Amazon Web Services (AWS) i en Node-applikation krävs bara ett SDK-paket som är specifikt för den aktuella tjänsten. För att kunna interagera med DynamoDB måste man till exempel hämta och installera client-dynamodb
-modulen som finns i aws-sdk
.
Följ dessa steg för att utföra ett kommando i den angivna projektkatalogen:1. Navigera till önskad projektkatalog med hjälp av en terminal eller kommandotolk.2. Skriv in lämpligt kommando för installation av önskat paket och tryck på enter.3. Installationsprocessen påbörjas och när den är klar bör du kontrollera att paketet har installerats genom att kontrollera att det finns i projektets filsystem.
npm install @aws-sdk/client-dynamodb
För att kunna använda en DynamoDB-tabell i ditt Node.js-projekt med paketet aws-sdk/client-dynamodb
, är det nödvändigt att ange den geografiska platsen för tabellen genom att införliva dess region i klientens konfigurationsinställningar innan några interaktioner. Denna konfigurationsuppdatering bör utföras under initialiseringsprocessen för DynamoDB-klienten.
Om du tidigare har installerat och använt AWS CLI på din datorenhet är det mycket troligt att du redan har fastställt AWS-autentiseringsuppgifter i dina miljöinställningar. I ett sådant fall kommer den tillhörande SDK:n (Software Development Kit) att hämta dessa värden från omgivningen utan att du behöver vidta några ytterligare åtgärder.
Om du ännu inte har skapat en IAM-användare i Amazon Web Services (AWS)-konsolen kan du göra det genom att navigera till AWS Identity and Access Management (IAM)-tjänsten. När du har skapat detta nya användarkonto får du en unik åtkomstnyckelidentifierare och motsvarande hemlig nyckel, som fungerar som dina individuella autentiseringsuppgifter för åtkomst till olika resurser inom AWS-ekosystemet.
För att införliva dessa autentiseringsnycklar i din arbetsyta kan du utföra följande kommandoradsinstruktioner på ditt operativsystem:
På Unix, Linux eller macOS:
export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'
På Windows (CMD):
set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'
På Windows (PowerShell):
$env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'
I ditt Node.js-projekt skapar du en ny fil med namnet “dynamodb.js”.I den här filen använder du följande kodrader för att initiera en instans av Amazon Web Services (AWS) DynamoDB-klient:
const { DynamoDB } = require('@aws-sdk/client-dynamodb')
const region = "us-east-1" // your preferred region
const client = new DynamoDB({ region })
AWS ser till att känslig säkerhetsinformation skyddas på lämpligt sätt genom att förhindra att sådana data avslöjas i själva koden. När man försöker upprätta en klientanslutning som visades tidigare hämtas därför de nödvändiga åtkomstnycklarna och hemliga nycklarna från en miljökälla i stället för att vara direkt inbäddade i koden.
Den nyligen etablerade klienten underlättar en mängd funktioner, t.ex. skapande av tabeller och inmatning/utmatning av data.
DynamoDB arbetar med en schemalös arkitektur, liknande andra NoSQL-databaser, som gör det möjligt att sömlöst lägga till nya attribut eller fält till en befintlig tabell utan att det medför betydande omkostnader. När man skapar en DynamoDB-tabell är det därför nödvändigt att ange specifika attribut som ska fungera som primärnycklar för att underlätta effektiv hämtning och hantering av data.
Låt oss titta närmare på ett exempel på kod som konstruerar en ny tabell med titeln “Customer” inom ramen för Amazons DynamoDB-tjänst:
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();
AttributeDefinitions-fältet används för att specificera de primära egenskaperna hos tabellens struktur genom att definiera dess väsentliga attribut tillsammans med deras respektive datatyper. I detta speciella fall har Email-attributet en strängbaserad datatyp som betecknas med förkortningen “S”. De andra tillgängliga attributtyperna inkluderar numeriska värden som representeras av “N” och binära data som kännetecknas av “B”.
För att effektivt kunna hämta och ordna data i en DynamoDB-tabell är det viktigt att upprätta ett primärnyckelschema som anger ett eller flera attribut som den unika identifieraren för varje objekt. I det här fallet, eftersom vi har angett “Email” som primärnyckel, bör den inkluderas i KeySchema med den angivna KeyType “HASH”. Detta gör det möjligt för DynamoDB att effektivt identifiera och hitta specifika poster baserat på deras e-postadress.
Ett annat alternativ för KeyType-attributet är Range-typen, som fungerar som en sorteringsmekanism när den tillämpas på icke-unika hashvärden i en databastabell. I situationer där flera poster har identiska hashvärden kan man med hjälp av intervallnycklar gruppera dessa poster baserat på ytterligare särskiljande information, t.ex. datum eller färger. Genom att använda den här metoden kan man effektivt organisera data på ett mer strukturerat sätt och samtidigt undvika potentiella konflikter som kan uppstå om man bara använder hash-nycklar.
Den tredje viktiga aspekten i den ovan nämnda koden gäller ProvisionedThroughput, som fastställer den tillåtna hastigheten för läs- och skrivoperationer för den angivna DynamoDB-tabellen per sekund.
Efter att ha kört den ovannämnda koden kan man förvänta sig att få utdata i form av:
När man navigerar till instrumentpanelen för DynamoDB-tabeller i AWS Management Consoles webbgränssnitt kan man se att tabellen antingen genomgår en provisioneringsprocess eller har skapats och för närvarande uppvisar ett tillstånd av antingen “aktiv” eller “provisionerad”.
När du bestämmer lämpliga värden för ReadCapacityUnits och WriteCapacityUnits är det viktigt att noggrant utvärdera de specifika kraven för din applikation för att undvika potentiella prestandaproblem eller överdrivna avgifter på ditt konto.
När tabellen har fastställts som aktiv kan du utföra en mängd olika operationer som innebär att skapa, läsa, uppdatera och radera data i tabellen.
Exemplen visar hur man skriver och hämtar information från
⭐ Lägg till data i tabellen . För att skriva data till en tabell behöver du klientens putItem-metod. Koden nedan lägger till en ny kund i tabellen Customer i 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)
Params-objektet innehåller TableName som är tabellen du skriver till, och fältet Item som innehåller de data du lägger till med deras specifika typer. Lägg märke till de nya fälten som inte fanns i tabellen från början, det är så DynamoDB fungerar flexibelt. Du kan visa data i din databas i konsolen så här: 6478 594
⭐ Läs data från tabellen . DynamoDB låter dig läsa data på olika sätt. SDK:s scan-funktion läser hela tabellen, medan getItem endast läser specifika data. Till exempel hämtar koden nedan alla kunder:
const getAllCustomers = async () => {
const params = {
TableName: "Customer"
}
const customers = await client.scan(params)
console.log(customers)
}
Medan följande kod hämtar användaren efter e-postvärdet:
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]")
⭐ Uppdatera data i tabellen . För att uppdatera befintliga data i en tabell använder du SDK:s updateItem-funktion. Följande kod visar hur du uppdaterar en specifik post:
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)
}
Du kan också välja att göra din funktion dynamisk genom att bygga uppdateringsuttryck från dina uppdateringsdata. DynamoDB:s flexibilitet gör att du kan hantera varje operation efter dina behov.
⭐ Ta bort data från tabellen . För att radera en post från DynamoDB behöver du funktionen deleteItem och nyckeln till den aktuella posten.Så här implementerar du det:
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]")
Bygg effektiva applikationer med DynamoDB
Amazon Web Services är fortfarande mycket framgångsrikt och erbjuder en användarvänlig plattform för att utveckla effektiva, tillförlitliga digitala tjänster samtidigt som robusta säkerhetsåtgärder finns på plats. DynamoDB-lösningen är ett idealiskt alternativ för dem som söker en strömlinjeformad databasupplevelse som kräver minimal hantering av underliggande infrastruktur eller skyddsprotokoll.
Du har fått den kunskap och de verktyg som krävs för att börja använda DynamoDB i ett Node.js-projekt, så att du kan fatta ett välgrundat beslut om dess implementering i framtida projekt.