AWS för backendutvecklare (EC2, S3, RDS, Lambda) · Lektion

Datamodellering i DynamoDB

Utforma effektiva tabellscheman och åtkomstmönster för DynamoDB för att optimera applikationernas prestanda och kostnader.

Lektion 3 av 411 steg

Datamodellering i DynamoDB är en gratis lektion i AWS för backendutvecklare (EC2, S3, RDS, Lambda) på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för AWS för backendutvecklare (EC2, S3, RDS, Lambda), och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AWS för backendutvecklare (EC2, S3, RDS, Lambda) innehåller totalt 4 lektioner.

Varför datamodellering är viktig i DynamoDB

DynamoDB är en NoSQL-databas, vilket innebär att den inte använder traditionella tabeller, rader och joins som SQL. Datamodellering handlar här framför allt om hur ni kommer att komma åt era data, inte bara om hur de lagras.

  • Schemalös: Inget fast schema, men strukturen är avgörande för prestandan.
  • Åtkomstmönster först: Utforma tabellerna utifrån de frågor ni kommer att köra.
  • Prestanda och kostnad: En bra modellering leder till snabba frågor och lägre kostnader.

Primärnycklar: partition och sortering

Varje objekt i DynamoDB behöver en primärnyckel. Nyckeln identifierar varje objekt unikt och avgör hur data lagras och hämtas. Den kan vara:

  • En partitionsnyckel (även kallad hashnyckel).
  • En sammansatt partitionsnyckel och sorteringsnyckel (även kallad rangnyckel).

Förstå partitionsnyckeln (PK)

Partitionsnyckeln (PK) avgör den fysiska partitionen (lagringsplatsen) där era data finns.

  • Unikhet: Om endast en PK används måste den vara unik för varje objekt.
  • Fördelning: En bra PK fördelar data jämnt mellan partitionerna och förhindrar ”heta partitioner”, som kan försämra prestandan.
  • Direkt åtkomst: Ni kan bara fråga efter ett objekt direkt om ni känner till dess partitionsnyckel.

Utnyttja sorteringsnyckeln (SK)

När ni använder både en partitionsnyckel och en sorteringsnyckel (SK) grupperas objekt med samma partitionsnyckel tillsammans och sorteras efter sorteringsnyckeln.

  • Unik kombination: Kombinationen av PK och SK måste vara unik.
  • Intervallfrågor: Möjliggör effektiva intervallfrågor (till exempel att hämta alla beställningar för en användare inom ett visst datumintervall).
  • Flexibel sortering: Möjliggör olika sorteringar inom samma partition.

Åtkomstmönster: er designvägledning

Till skillnad från relationsdatabaser, där ni utformar tabeller och sedan tar fram frågor, bör ni i DynamoDB först lista alla åtkomstmönster för programmets data.

  • Identifiera frågor: Vilka data behöver ni? Hur ska ni hämta dem?
  • Exempel: ”Hämta användarprofil efter userId”, ”Lista alla produkter efter category”, ”Hitta alla kommentarer för ett postId”.

Tabellens utformning (PK, SK, index) bör direkt stödja dessa mönster.

Introduktion till Single-Table Design

Ett vanligt och kraftfullt mönster i DynamoDB är Single-Table Design. Det innebär att flera olika entitetstyper (till exempel Users, Orders och Products) lagras i en enda tabell.

  • Fördelar: Minskar den operativa administrationen, möjliggör effektiva ”många-till-många”-relationer och kan vara mer kostnadseffektivt.
  • Så fungerar det: Använder generiska attributnamn som PK och SK samt prefix (till exempel USER#<id>, ORDER#<id>) för att skilja entitetstyper åt.

Fråga med globala sekundära index (GSI)

Vad gör ni om ni behöver fråga efter data med hjälp av ett attribut som inte ingår i primärnyckeln? Då kommer globala sekundära index (GSI:er) till användning.

  • Nya nycklar: Ett GSI har en egen partitionsnyckel och en valfri sorteringsnyckel, som kan vara vilka attribut som helst från bastabellen.
  • Fristående: Det är en helt separat tabell som DynamoDB underhåller, vilket möjliggör andra åtkomstmönster.
  • Eventual consistency: GSI:er är eventual consistent, vilket innebär att det kan ta en kort stund innan ändringar sprids.

Förbättra partitioner med lokala sekundära index (LSI)

Lokala sekundära index (LSI:er) gör det möjligt att fråga efter data med en annan sorteringsnyckel inom samma partitionsnyckel som i bastabellen.

  • Samma PK, annan SK: LSI:er delar partitionsnyckel med bastabellen men har en annan sorteringsnyckel.
  • Starkt konsistenta: Till skillnad från GSI:er stöder LSI:er starkt konsistenta läsningar.
  • Begränsade: De måste definieras när tabellen skapas och ni kan ha högst 5 per tabell.

Praktisk modellering: användarinlägg

Vi modellerar ett enkelt scenario: användare och deras inlägg. Vi vill kunna:

  • Åtkomstmönster 1: Hämta en användares profil.
  • Åtkomstmönster 2: Hämta alla inlägg av en användare, sorterade efter datum.

Med en Single-Table Design:

  • PK: USER#<userId>
  • SK: #METADATA# (för användarprofilen), POST#<postId> (för inlägg)

Då kan ni hämta en användares profil och inlägg med en enda fråga mot partitionen USER#<userId>.

Snabbkontroll: indextyper

Ni har en DynamoDB-tabell som lagrar kundbeställningar. Primärnyckeln är customerId (partitionsnyckel) och orderId (sorteringsnyckel).

Ni behöver ofta fråga efter beställningar med hjälp av orderDate för en viss kund. Vilken typ av index passar bäst?

Sammanfattning: bemästra DynamoDB-design

Vi har gått igenom grunderna i datamodellering för DynamoDB:

  • Förstå hur partitionsnycklar och sorteringsnycklar definierar datastrukturen.
  • Utforma lösningen utifrån era åtkomstmönster, inte bara datarelationerna.
  • Kraften i Single-Table Design för effektivitet.
  • Använda globala sekundära index (GSI:er) för olika typer av frågor.
  • Använda lokala sekundära index (LSI:er) för alternativ sortering inom en partition.

Effektiv datamodellering är avgörande för optimal prestanda och kostnad i DynamoDB!

Gratis att börja

Lär dig AWS för backendutvecklare (EC2, S3, RDS, Lambda) med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Datamodellering i DynamoDB” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen AWS för backendutvecklare (EC2, S3, RDS, Lambda), inklusive ”Datamodellering i DynamoDB”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i AWS för backendutvecklare (EC2, S3, RDS, Lambda) innehåller totalt 4 lektioner.

Vad lär jag mig i ”Datamodellering i DynamoDB”?

Utforma effektiva tabellscheman och åtkomstmönster för DynamoDB för att optimera applikationernas prestanda och kostnader. Ni övar på AWS för backendutvecklare (EC2, S3, RDS, Lambda) med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AWS för backendutvecklare (EC2, S3, RDS, Lambda)?

Du behöver inga förkunskaper. Utbildningen i AWS för backendutvecklare (EC2, S3, RDS, Lambda) på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Datamodellering i DynamoDB”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AWS för backendutvecklare (EC2, S3, RDS, Lambda)-lektionen?

Ja. Varje AWS för backendutvecklare (EC2, S3, RDS, Lambda)-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. RDS-läsrepliker och Multi-AZ
  2. Introduktion till DynamoDB
  3. Datamodellering i DynamoDB
  4. DynamoDB Streams och Global Tables
← Tillbaka till AWS för backendutvecklare (EC2, S3, RDS, Lambda)