Tabeller, elementer og primærnøkler
Utform DynamoDB-tabeller med partisjonsnøkler og sammensatte primærnøkler, og forstå lagringsbegrensningene på elementnivå.
Tabeller, elementer og primærnøkler er en gratis leksjon i AWS Solutions Architect på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AWS Solutions Architect, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AWS Solutions Architect inneholder totalt 4 leksjoner.
DynamoDB: NoSQL-nøkkel-verdi-lager
Amazon DynamoDB er en fullstendig administrert, serverløs nøkkel-verdi- og dokumentdatabase som er utviklet for ytelse på ensifret antall millisekunder uansett skala. I motsetning til relasjonsdatabaser er DynamoDB skjema-fri – hvert element kan ha et annet sett med attributter, så lenge primærnøkkelen finnes.
DynamoDB lagrer data i tabeller, som er den øverste beholderen, tilsvarende en SQL-tabell. Tabellene fordeles automatisk på flere lagringsnoder på tvers av AZ-er, noe som gir innebygd redundans uten at du trenger å konfigurere noe.
Tabeller og elementer
En DynamoDB-tabell inneholder en samling elementer, der hvert element består av en samling attributter. Attributter er typede verdier: String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) og Set-typer (SS, NS, BS).
Hvert element i en tabell må inneholde primærnøkkelattributtene. Alle andre attributter er valgfrie og kan variere mellom elementene. Ett element kan ha en maksimal størrelse på 400 KB, inkludert alle attributtnavnene og -verdiene.
# Example DynamoDB item structure (JSON)
{
'UserId': {'S': 'user-abc-123'},
'Timestamp': {'N': '1719000000'},
'Username': {'S': 'alice'},
'Score': {'N': '4200'},
'Tags': {'SS': ['premium', 'verified']}
}Enkel primærnøkkel: Bare partisjonsnøkkel
En enkel primærnøkkel består av ett attributt kalt partisjonsnøkkelen (også kalt hash-nøkkelen). DynamoDB bruker en intern hash-funksjon på partisjonsnøkkelverdien for å avgjøre hvilken lagringspartisjon som inneholder elementet. Alle elementer med samme partisjonsnøkkelverdi lagres sammen.
Med en enkel primærnøkkel kan ingen to elementer i tabellen ha samme partisjonsnøkkelverdi – den identifiserer hvert element entydig. Denne utformingen passer for tabeller der du alltid får tilgang til data via en unik identifikator, for eksempel en bruker-ID eller ordre-ID.
# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
--table-name Users \
--attribute-definitions AttributeName=UserId,AttributeType=S \
--key-schema AttributeName=UserId,KeyType=HASH \
--billing-mode PAY_PER_REQUESTSammensatt primærnøkkel: Partisjons- og sorteringsnøkkel
En sammensatt primærnøkkel bruker både en partisjonsnøkkel og en sorteringsnøkkel (også kalt områdenøkkelen). Elementer med samme partisjonsnøkkel lagres sammen og sorteres etter sorteringsnøkkelverdien, noe som muliggjør områdespørringer innenfor en partisjon.
Denne utformingen er svært fleksibel: Flere elementer kan dele samme partisjonsnøkkel så lenge sorteringsnøklene er forskjellige. En tabell med navnet Orders kan for eksempel bruke CustomerId som partisjonsnøkkel og OrderDate som sorteringsnøkkel, slik at du kan spørre etter alle ordrene for en kunde sortert etter dato.
# Create a table with a composite primary key
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions \
AttributeName=CustomerId,AttributeType=S \
AttributeName=OrderDate,AttributeType=S \
--key-schema \
AttributeName=CustomerId,KeyType=HASH \
AttributeName=OrderDate,KeyType=RANGE \
--billing-mode PAY_PER_REQUESTUtforming av partisjonsnøkler og varme partisjoner
Å velge riktig partisjonsnøkkel er den viktigste designbeslutningen i DynamoDB. En god partisjonsnøkkel har høy kardinalitet (mange forskjellige verdier) og fordeler tilgangen jevnt på tvers av partisjonene. Dårlige valg fører til varme partisjoner, der én partisjon mottar uforholdsmessig mye trafikk og forårsaker struping.
Antimønstre som bør unngås: bruk av et boolsk flagg (bare to verdier), en dato som samler alle dagens skrivinger, eller et statusfelt med lav kardinalitet. Gode valg er bruker-ID, enhets-ID, tilfeldig UUID eller sammensatte verdier som tenantId#entityType.
PutItem, GetItem og DeleteItem
De tre grunnleggende operasjonene for DynamoDB-elementer er:
- PutItem: skriver et nytt element eller erstatter fullstendig et eksisterende element med samme primærnøkkel
- GetItem: henter ett element ved hjelp av den nøyaktige primærnøkkelen (krever hele nøkkelen – partisjonsnøkkelen og, hvis den er sammensatt, sorteringsnøkkelen)
- DeleteItem: fjerner et element ved hjelp av den nøyaktige primærnøkkelen
Alle tre operasjonene er atomiske på elementnivå. Som standard bruker GetItem eventually consistent-lesinger. Hvis du legger til --consistent-read, tvinges en strongly consistent-lesing som alltid returnerer den sist skrevne verdien.
# PutItem
aws dynamodb put-item \
--table-name Users \
--item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'
# GetItem
aws dynamodb get-item \
--table-name Users \
--key '{"UserId":{"S":"user-123"}}' \
--consistent-readUpdateItem og betingelsesuttrykk
UpdateItem endrer bestemte attributter i et eksisterende element uten å erstatte det fullstendig, i motsetning til PutItem. Du kan legge til attributter, fjerne attributter eller utføre aritmetikk på Number-attributter atomisk (for eksempel øke en teller).
Betingelsesuttrykk lar deg angi at en operasjon bare skal lykkes hvis en betingelse er sann. Du kan for eksempel bare oppdatere statusen til et element hvis den nå er PENDING. Dette implementerer mønstre for optimistisk låsing uten transaksjoner og er en viktig designteknikk i DynamoDB.
# Atomically increment a counter, only if item exists
aws dynamodb update-item \
--table-name Orders \
--key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
--update-expression 'SET ItemCount = ItemCount + :inc' \
--condition-expression 'attribute_exists(CustomerId)' \
--expression-attribute-values '{":inc":{"N":"1"}}'Query kontra Scan
Query henter elementer som deler samme partisjonsnøkkelverdi, eventuelt filtrert etter betingelser for sorteringsnøkkelen. Query er effektiv, fordi den bare leser den aktuelle partisjonen. Du kan bruke betingelser for sorteringsnøkkelen som begins_with, between, =, < og > for å begrense resultatene i partisjonen.
Scan leser hvert element i tabellen og bruker deretter et valgfritt filteruttrykk. Scan er kostbart for store tabeller og bør unngås i produksjonens spørringsmønstre. Hvis du ofte trenger Scan, bør du vurdere tabellutformingen på nytt eller legge til en Global Secondary Index.
# Query: get all orders for customer c-123 after a date
aws dynamodb query \
--table-name Orders \
--key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
--expression-attribute-values \
'{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'Sterkt konsistente kontra eventuelt konsistente lesinger
DynamoDB lagrer tre kopier av dataene dine på tvers av flere AZ-er. Eventuelt konsistente lesinger (standardinnstillingen) kan returnere en litt utdatert verdi hvis en nylig skriving ennå ikke har blitt replikert til alle kopiene – men de bruker halvparten av lesekapasitetsenhetene sammenlignet med sterkt konsistente lesinger.
Sterkt konsistente lesinger returnerer alltid den sist bekreftede skrivningen, men koster dobbelt så mange RCU-er og er ikke tilgjengelige på Global Secondary Indexes. Velg eventuelt konsistente lesinger for arbeidsbelastninger med høy gjennomstrømming og mange lesinger, og sterkt konsistente lesinger bare når applikasjonen krever de aller nyeste dataene.
DynamoDB-transaksjoner
DynamoDB støtter ACID-transaksjoner via TransactWriteItems og TransactGetItems. En transaksjon kan gruppere opptil 100 skriveoperasjoner på tvers av flere elementer og til og med flere tabeller, slik at enten alle lykkes, eller alle rulles atomisk tilbake.
Bruk transaksjoner i scenarier som pengeoverføring mellom kontoer (trekk fra ett element og godskriv et annet) eller bestilling av et sete (kontroller tilgjengeligheten og reserver setet atomisk). Transaksjoner koster dobbelt så mange vanlige RCU-er/WCU-er, så bruk dem bare når atomisitet på tvers av flere elementer faktisk er nødvendig.
Begrensning på elementstørrelse og tips for datamodellering
DynamoDBs grense på 400 KB per element påvirker datamodelleringen. For store datamengder (for eksempel bilder og store dokumenter) lagrer du de binære dataene i S3 og bare S3-objektnøkkelen i DynamoDB. For dypt nestede hierarkiske data modellerer du hver nodetype med sitt eget mønster for partisjonsnøkkel ved hjelp av single-table design – én tabell inneholder flere entitetstyper som skilles fra hverandre ved hjelp av prefikset for partisjonsnøkkelen og mønsteret for sorteringsnøkkelen.
Single-table design minimerer antallet tabeller og muliggjør effektiv tilgang basert på tilgangsmønstre ved å plassere relaterte elementer i samme partisjon. Dette er en avansert teknikk som reduserer driftsbelastningen og forbedrer ytelsen for komplekse tilgangsmønstre.
Hurtigsjekk
Test forståelsen din av AWS Solutions Architect-konsepter (SAA-C03) fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte du at DynamoDB-tabeller inneholder skjemaløse elementer med en grense på 400 KB, at enkle primærnøkler bare bruker en partisjonsnøkkel, mens sammensatte nøkler også har en sorteringsnøkkel for områdespørringer, og at partisjonsnøkler med høy kardinalitet forhindrer varme partisjoner. Bruk Query i stedet for Scan for effektiv tilgang. Deretter skal vi se nærmere på kapasitetsmodusene provisioned og on-demand.
Lær deg AWS Solutions Architect med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Tabeller, elementer og primærnøkler» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien AWS Solutions Architect, inkludert «Tabeller, elementer og primærnøkler», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i AWS Solutions Architect inneholder totalt 4 leksjoner.
Hva lærer jeg i «Tabeller, elementer og primærnøkler»?
Utform DynamoDB-tabeller med partisjonsnøkler og sammensatte primærnøkler, og forstå lagringsbegrensningene på elementnivå. Du øver på AWS Solutions Architect med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med AWS Solutions Architect?
Ingen tidligere erfaring er nødvendig. AWS Solutions Architect på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Tabeller, elementer og primærnøkler»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne AWS Solutions Architect-leksjonen?
Ja. Alle AWS Solutions Architect-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Tabeller, elementer og primærnøkler
- Provisioned vs On-Demand-kapasitet
- Globale sekundærindekser og lokale sekundærindekser
- DynamoDB Streams og globale tabeller