Taulut, alkiot ja pääavaimet
Suunnittelette DynamoDB-tauluja osioavaimilla ja yhdistetyillä pääavaimilla sekä tutustutte alkiokohtaisiin tallennusrajoituksiin.
Taulut, alkiot ja pääavaimet on ilmainen AWS Solutions Architect-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu AWS Solutions Architect-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. AWS Solutions Architect-kurssilla on yhteensä 4 oppituntia.
DynamoDB: NoSQL-avain–arvo-tietokanta
Amazon DynamoDB on täysin hallittu, palvelimeton avain–arvo- ja dokumenttitietokanta, joka on suunniteltu yksinumeroisten millisekuntien suorituskykyyn kaikissa mittakaavoissa. Toisin kuin relaatiotietokannoissa, DynamoDB:ssä ei ole kiinteää skeemaa: kullakin kohteella voi olla erilainen joukko määritteitä, kunhan ensisijainen avain on mukana.
DynamoDB tallentaa tiedot tauluihin, jotka ovat SQL-taulua vastaava ylimmän tason säilö. Taulut jaetaan automaattisesti useille tallennussolmuille eri AZ-alueille, mikä tarjoaa sisäänrakennetun redundanssin ilman, että sinun tarvitsee määrittää sitä.
Taulut ja kohteet
DynamoDB:n taulu sisältää kokoelman kohteita, joista kukin on kokoelma määritteitä. Määritteet ovat tyypitettyjä arvoja: String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) ja Set-tyypit (SS, NS, BS).
Jokaisen taulun kohteen on sisällettävä ensisijaisen avaimen määritteet. Kaikki muut määritteet ovat valinnaisia, ja ne voivat vaihdella kohteiden välillä. Yksittäisen kohteen koko voi olla enintään 400 KB, mukaan lukien kaikkien sen määritteiden nimet ja arvot.
# Example DynamoDB item structure (JSON)
{
'UserId': {'S': 'user-abc-123'},
'Timestamp': {'N': '1719000000'},
'Username': {'S': 'alice'},
'Score': {'N': '4200'},
'Tags': {'SS': ['premium', 'verified']}
}Yksinkertainen ensisijainen avain: vain osioavain
Yksinkertainen ensisijainen avain koostuu yhdestä määritteestä, jota kutsutaan osioavaimeksi (myös hash-avaimeksi). DynamoDB käyttää osioavaimen arvoon sisäistä hajautusfunktiota määrittääkseen, missä tallennusosiossa kohde sijaitsee. Kaikki kohteet, joilla on sama osioavaimen arvo, tallennetaan yhdessä.
Yksinkertaista ensisijaista avainta käytettäessä kahdella taulun kohteella ei voi olla samaa osioavaimen arvoa, joten se yksilöi jokaisen kohteen. Tämä rakenne sopii tauluihin, joissa tietoja käytetään aina yksilöllisen tunnisteen, kuten käyttäjätunnuksen tai tilaustunnuksen, perusteella.
# 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_REQUESTYhdistelmäavain: osioavain ja lajitteluavain
Yhdistelmäavain käyttää sekä osioavainta että lajitteluavainta (myös range-avainta). Kohteet, joilla on sama osioavain, tallennetaan yhdessä ja lajitellaan lajitteluavaimen arvon mukaan, mikä mahdollistaa aluekyselyt osion sisällä.
Tämä rakenne on erittäin joustava: useilla kohteilla voi olla sama osioavain, kunhan niiden lajitteluavaimet ovat erilaiset. Esimerkiksi Orders-taulu voisi käyttää CustomerId-määritettä osioavaimena ja OrderDate-määritettä lajitteluavaimena, jolloin kaikki asiakkaan tilaukset voidaan hakea päivämäärän mukaan lajiteltuina.
# 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_REQUESTOsioavaimen suunnittelu ja kuumat osiot
Oikean osioavaimen valinta on tärkein DynamoDB:n suunnittelupäätös. Hyvällä osioavaimella on suuri kardinaliteetti (monia erillisiä arvoja), ja se jakaa käytön tasaisesti osioiden kesken. Huonot valinnat johtavat kuumiin osioihin, joissa yksi osio vastaanottaa suhteettoman paljon liikennettä ja aiheuttaa pyyntöjen rajoittamista.
Vältettäviä vastaesimerkkejä ovat totuusarvolipun käyttäminen (vain kaksi arvoa), päivämäärä, joka ryhmittelee kaikki tämän päivän kirjoitukset yhteen, sekä pienen kardinaliteetin tilakenttä. Hyviä valintoja ovat käyttäjätunnus, laitteen tunnus, satunnainen UUID tai yhdistelmäarvot, kuten tenantId#entityType.
PutItem, GetItem ja DeleteItem
DynamoDB:n kolme perustoimintoa kohteille ovat:
- PutItem: kirjoittaa uuden kohteen tai korvaa kokonaan olemassa olevan kohteen, jolla on sama ensisijainen avain
- GetItem: noutaa yhden kohteen täsmällisen ensisijaisen avaimen perusteella (edellyttää koko avainta: osioavainta ja yhdistelmäavaimessa myös lajitteluavainta)
- DeleteItem: poistaa kohteen täsmällisen ensisijaisen avaimen perusteella
Kaikki kolme toimintoa ovat atomisia kohdetasolla. Oletusarvoisesti GetItem käyttää eventually consistent -lukuja. Asetus --consistent-read pakottaa käyttämään vahvasti yhdenmukaista lukua, joka palauttaa aina viimeksi kirjoitetun arvon.
# 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 ja ehtolausekkeet
UpdateItem muokkaa olemassa olevan kohteen tiettyjä määritteitä korvaamatta koko kohdetta, toisin kuin PutItem. Voit lisätä tai poistaa määritteitä tai suorittaa Number-määritteille atomisia aritmeettisia toimintoja, kuten laskurin kasvattamisen.
Ehtolausekkeilla voit määrittää, että toiminto onnistuu vain, jos ehto toteutuu. Voit esimerkiksi päivittää kohteen tilan vain, jos sen nykyinen arvo on PENDING. Näin voidaan toteuttaa optimistisen lukituksen malleja ilman transaktioita, ja kyseessä on tärkeä DynamoDB:n suunnittelutekniikka.
# 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 vai Scan
Query noutaa kohteet, joilla on sama osioavaimen arvo, ja tuloksia voidaan halutessa suodattaa lajitteluavaimen ehtojen perusteella. Query on tehokas, koska se lukee vain kohteena olevan osion. Voit käyttää lajitteluavaimen ehtoja, kuten begins_with, between, =, < ja >, tulosten rajaamiseen osion sisällä.
Scan lukee kaikki taulun kohteet ja käyttää sen jälkeen valinnaista suodatuslauseketta. Scan-toiminnot ovat suurissa tauluissa kalliita, ja niitä tulee välttää tuotannon kyselymalleissa. Jos joudut käyttämään Scan-toimintoa usein, harkitse taulun rakenteen uudelleen suunnittelua tai lisää 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"}}'Vahvasti yhdenmukaiset ja lopulta yhdenmukaiset luvut
DynamoDB tallentaa tiedoistasi kolme kopiota useisiin AZ:ihin. Lopulta yhdenmukaiset luvut (oletus) voivat palauttaa hieman vanhentuneen arvon, jos äskettäinen kirjoitus ei ole vielä ehtinyt välittyä kaikkiin kopioihin, mutta ne kuluttavat puolet vahvasti yhdenmukaisten lukujen kapasiteettiyksiköistä.
Vahvasti yhdenmukaiset luvut palauttavat aina viimeisimmän vahvistetun kirjoituksen, mutta maksavat kaksi kertaa enemmän RCU-yksiköitä, eivätkä ole käytettävissä Global Secondary Indexes -indekseissä. Valitkaa lopulta yhdenmukaiset luvut paljon lukeville ja suurta läpimenoa vaativille työkuormille ja vahvasti yhdenmukaiset luvut vain silloin, kun sovelluksen on ehdottomasti saatava viimeisimmät tiedot.
DynamoDB-tapahtumat
DynamoDB tukee ACID-tapahtumia kohteiden TransactWriteItems ja TransactGetItems avulla. Tapahtumaan voi ryhmitellä enintään 100 kirjoitusoperaatiota useista kohteista ja jopa useista tauluista, jolloin varmistetaan, että kaikki operaatiot onnistuvat tai kaikki perutaan atomisesti.
Käyttäkää tapahtumia esimerkiksi rahan siirtämiseen tilien välillä (vähennetään saldoa yhdestä kohteesta ja lisätään sitä toiseen) tai paikan varaamiseen (tarkistetaan saatavuus ja varataan paikka atomisesti). Tapahtumat maksavat kaksi kertaa tavallisten RCU- ja WCU-yksiköiden verran, joten käyttäkää niitä vain silloin, kun atomisuus useiden kohteiden välillä on todella tarpeen.
Kohteen kokorajoitus ja tietomallinnuksen vinkit
DynamoDB:n 400 kilotavun kohdekohtainen rajoitus vaikuttaa tietomallinnukseen. Suurten hyötykuormien, kuten kuvien ja suurten asiakirjojen, tapauksessa tallentakaa binaaritiedot S3:een ja tallentakaa DynamoDB:hen vain S3-objektin avain. Mallintakaa syvästi sisäkkäiset hierarkkiset tiedot siten, että kullakin solmutyypillä on oma osioavaimen mallinsa ja käytössä on single-table design – yksi taulu sisältää useita entiteettityyppejä, jotka erotellaan osioavaimen etuliitteen ja lajitteluavainmallin avulla.
Single-table design minimoi taulujen määrän ja mahdollistaa tehokkaat käyttötavat sijoittamalla toisiinsa liittyvät kohteet samaan osioon. Se on edistynyt tekniikka, joka vähentää ylläpidon työmäärää ja parantaa suorituskykyä monimutkaisissa käyttötavoissa.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte tämän oppitunnin AWS Solutions Architect (SAA-C03) -käsitteet.
Oppitunnin yhteenveto
Tässä oppitunnissa opitte, että DynamoDB-taulut sisältävät skeemattomia kohteita, joiden koko on enintään 400 KB, yksinkertaisissa pääavaimissa käytetään vain osioavainta, kun taas yhdistelmäavaimiin lisätään lajitteluavain aluekyselyitä varten ja kardinaliteetiltaan suuret osioavaimet estävät kuumat osiot. Käyttäkää tehokkaaseen tietojen hakuun Query-operaatiota Scan-operaation sijaan. Seuraavaksi tutustumme varattuun ja tarpeen mukaan käytettävään kapasiteettitilaan.
Opi AWS Solutions Architect tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Taulut, alkiot ja pääavaimet” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa AWS Solutions Architect-oppimispolun 3 oppituntia, myös oppitunnin “Taulut, alkiot ja pääavaimet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. AWS Solutions Architect-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Taulut, alkiot ja pääavaimet”?
Suunnittelette DynamoDB-tauluja osioavaimilla ja yhdistetyillä pääavaimilla sekä tutustutte alkiokohtaisiin tallennusrajoituksiin. Harjoittelet AWS Solutions Architect-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni AWS Solutions Architect-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin AWS Solutions Architect-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Taulut, alkiot ja pääavaimet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä AWS Solutions Architect-oppitunnilla?
Kyllä. Jokainen AWS Solutions Architect-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Taulut, alkiot ja pääavaimet
- Varattu ja On-Demand-kapasiteetti
- Globaalit ja paikalliset toissijaiset indeksit
- DynamoDB Streams ja Global Tables