Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla · Oppitunti

DynamoDB-taulukoiden suunnittelu

Opiskelkaa tehokkaiden DynamoDB-taulukkokaavioiden suunnittelun parhaat käytännöt keskittyen osioavaimiin ja lajitteluavaimiin optimaalisen suorituskyvyn saavuttamiseksi

Oppitunti 2/411 vaihetta

DynamoDB-taulukoiden suunnittelu on ilmainen Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-kurssilla on yhteensä 4 oppituntia.

Miksi DynamoDB:n suunnittelulla on merkitystä

Tervetuloa DynamoDB-taulujen suunnitteluun! Toisin kuin perinteiset relaatiotietokannat, DynamoDB on NoSQL-tietokanta, joka edellyttää erilaista lähestymistapaa skeeman suunnitteluun.

  • Sen palvelimettomuus ja suorituskyky suuressa mittakaavassa riippuvat suuresti siitä, miten suunnittelette taulunne ja valitsette avaimenne.
  • Hyvin suunniteltu taulu takaa nopean ja yhdenmukaisen suorituskyvyn sekä kustannustehokkuuden.
  • Huono suunnittelu voi johtaa hitaisiin kyselyihin, suuriin kustannuksiin ja toiminnan ongelmiin.

Partition Key (PK)

Jokainen DynamoDB-taulun alkio tunnistetaan yksilöllisesti pääavaimella. Minkä tahansa pääavaimen ensimmäinen osa on Partition Key (josta käytetään joskus nimitystä Hash Key).

  • DynamoDB käyttää Partition Key -avaimen arvoa sisäisen hajautusfunktion syötteenä.
  • Tämä funktio määrittää fyysisen osion (tallennussijainnin), johon tiedot tallennetaan.
  • Hyvät Partition Key -avaimet jakavat tiedot tasaisesti osioiden kesken, estävät hot spotit ja varmistavat skaalautuvuuden.

Sort Key (SK)

Ensisijaisen avaimen toinen osa, jos päätätte käyttää sellaista, on lajitteluavain (josta käytetään joskus myös nimitystä alueavain).

  • Samalla osioavaimella olevat kohteet ryhmitellään ja järjestetään lajitteluavaimen arvon mukaan.
  • Tämä mahdollistaa tehokkaat aluekyselyt (esimerkiksi kaikki käyttäjän tilaukset tietyltä ajanjaksolta).
  • Osioavaimen ja lajitteluavaimen yhdistelmän on oltava taulukon jokaiselle kohteelle yksilöllinen.

Ensisijaisten avainten ymmärtäminen

Taulukon ensisijainen avain voi olla joko yksinkertainen ensisijainen avain (vain osioavain) tai yhdistelmäavain (osioavain ja lajitteluavain).

  • Yksinkertainen ensisijainen avain: Sopii erinomaisesti tilanteisiin, joissa jokainen kohde tarvitsee yksilöllisen tunnisteen, kuten userId-tunnisteen Users-taulukossa.
  • Yhdistelmäavain: Sopii parhaiten yksi moneen -suhteisiin tai tilanteisiin, joissa on kyseltävä kohteita, joilla on yhteinen osioavain mutta eri toissijainen tunniste, kuten userId ja orderId Orders-taulukossa.

Yksinkertainen PK käytännössä

Tarkastellaan Users-taulukkoa, jossa jokaisella käyttäjällä on yksilöllinen userId. Voimme käyttää userId-tunnistetta yksinkertaisena osioavaimena. Kohde voidaan lisätä esimerkiksi näin:

import boto3

# This client is conceptual for illustration.
# In a real app, it would connect to your DynamoDB table.
class MockDynamoDBTable:
    def __init__(self, name):
        self.name = name
        self.items = {}

    def put_item(self, Item):
        pk = Item['userId']
        if pk in self.items:
            print(f"Warning: Item with userId '{pk}' already exists. Overwriting.")
        self.items[pk] = Item
        print(f"Item added/updated in '{self.name}': {Item}")

# Simulate a DynamoDB table named 'Users'
table = MockDynamoDBTable('Users')

def add_user_item():
    table.put_item(
        Item={
            'userId': 'user123',
            'username': 'Alice',
            'email': 'alice@example.com'
        }
    )

if __name__ == "__main__":
    add_user_item()

Yhdistelmäavain käytännössä

Kuvitellaan nyt Orders-taulukko, jossa käyttäjällä voi olla useita tilauksia. Käyttäisimme userId-tunnistetta osioavaimena ja orderId-tunnistetta lajitteluavaimena. Näin voimme noutaa tietyn käyttäjän kaikki tilaukset orderId-tunnisteen mukaan järjestettyinä.

import boto3

# This client is conceptual for illustration.
# In a real app, it would connect to your DynamoDB table.
class MockDynamoDBTable:
    def __init__(self, name):
        self.name = name
        self.items = {}

    def put_item(self, Item):
        pk = Item['userId']
        sk = Item['orderId']
        if pk not in self.items:
            self.items[pk] = {}
        self.items[pk][sk] = Item
        print(f"Item added/updated in '{self.name}': {Item}")

# Simulate a DynamoDB table named 'Orders'
table = MockDynamoDBTable('Orders') # Assume PK: userId, SK: orderId

def add_order_item():
    table.put_item(
        Item={
            'userId': 'user123',
            'orderId': 'order456',
            'itemCount': 2,
            'totalAmount': 50.00,
            'orderDate': '2023-10-26'
        }
    )

if __name__ == "__main__":
    add_order_item()

Suunnittelu käyttötapojen perusteella

DynamoDB:n suunnittelussa tärkeintä on ymmärtää käyttömallit. Ensisijaiset avaimet kannattaa suunnitella sen perusteella, miten sovellus tekee kyselyitä, ei vain sen perusteella, miltä data näyttää.

  • Millaisia kyselyitä teette? (esimerkiksi kaikki tietyn luokan tuotteet tai tietyn käyttäjän uusimmat julkaisut).
  • Mitä dataa palautetaan? (esimerkiksi yksittäinen kohde tai kohteiden luettelo).
  • Osioavaimen tulisi yleensä olla attribuutti, jonka perusteella teette useimmin kyselyitä yksittäisistä kohteista tai kohderyhmistä.
  • Lajitteluavain mahdollistaa joustavat kyselyt kyseisen ryhmän sisällä (esimerkiksi aluekyselyt ja käänteinen järjestys).

Parhaat käytännöt avainten valintaan

Oikeiden avainten valinta on suorituskyvyn kannalta ratkaisevaa:

  • Suuri kardinaliteetti: Avaimilla tulisi olla paljon yksilöllisiä arvoja, jotta yksittäiseen osioon ei synny kuormitushuippuja.
  • Tasainen jakauma: Arvoja tulisi käyttää suunnilleen yhtä paljon. Välttäkää avaimia, joiden muutamia arvoja kysellään huomattavasti useammin kuin muita.
  • Kyselyiden tehokkuus: Suunnitelkaa avaimet niin, että yleisimmät kyselyt voidaan toteuttaa GetItem-toiminnolla (vain PK) tai Query-toiminnolla (PK ja valinnainen SK-ehto).
  • Välttäkää skannauksia: Kaikki taulukon kohteet lukevat toiminnot (Scan) ovat tehottomia ja kalliita. Suunnittelussa tulisi minimoida niiden tarve.

Yksi moneen -suhteiden mallintaminen

Yhdistelmäavaimet sopivat erinomaisesti hyvin yleisten yksi moneen -suhteiden mallintamiseen. Esimerkiksi käyttäjällä voi olla useita julkaisuja:

  • Osioavain: USER#<userId> (yleinen tapa lisätä avainten alkuun etuliite selkeyden vuoksi).
  • Lajitteluavain: POST#<postId>.
  • Tämän rakenteen ansiosta kaikki käyttäjän julkaisut voidaan noutaa kyselyllä, joka käyttää vain osioavainta. Myös yksittäisiä julkaisuja voidaan hakea lisäämällä lajitteluavainta koskeva ehto.

Tämä lähestymistapa pitää toisiinsa liittyvät tiedot yhdessä ja mahdollistaa tehokkaan haun.

Suunnitteluhaaste

Suunnittelette taulukkoa, johon tallennetaan käyttäjien kommentteja eri artikkeleista. Tärkeimmät käyttötavat ovat seuraavat:

  1. Kaikkien tiettyä artikkelia koskevien kommenttien hakeminen.
  2. Kaikkien tietyn käyttäjän tekemien kommenttien hakeminen.

Millainen ensisijaisten avainten rakenne tukisi tehokkaimmin kaikkien tiettyä artikkelia koskevien kommenttien hakemista?

Kertaus: avainten suunnittelu

Hienoa työtä! Tässä oppitunnissa opitte DynamoDB-taulukoiden suunnittelun perusperiaatteet:

  • Osioavainten merkityksen datan jakamisessa.
  • Lajitteluavainten hyödyt järjestämisessä ja aluekyselyissä.
  • Miten ensisijaiset avaimet (yksinkertaiset tai yhdistelmäavaimet) yksilöivät kohteet.
  • Miten tärkeässä roolissa käyttömallit ovat suunnitteluratkaisujen ohjaamisessa.
  • Avainten valinnan parhaat käytännöt suorituskyvyn ja kustannustehokkuuden varmistamiseksi.

Näiden käsitteiden hallinta on tärkeää, kun rakennatte skaalautuvia ja suorituskykyisiä palvelimettomia sovelluksia DynamoDB:llä!

Aloita maksutta

Opi Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla 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
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”DynamoDB-taulukoiden suunnittelu” ilmainen?

Kyllä – oppitunnin ”DynamoDB-taulukoiden suunnittelu” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-kurssin, päivitä CoddyKit PROhon. Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”DynamoDB-taulukoiden suunnittelu”?

Opiskelkaa tehokkaiden DynamoDB-taulukkokaavioiden suunnittelun parhaat käytännöt keskittyen osioavaimiin ja lajitteluavaimiin optimaalisen suorituskyvyn saavuttamiseksi Harjoittelet Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”DynamoDB-taulukoiden suunnittelu”-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ä Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-oppitunnilla?

Kyllä. Jokainen Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla-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

  1. DynamoDB:n perusteet
  2. DynamoDB-taulukoiden suunnittelu
  3. Lambdan ja DynamoDB:n integrointi
  4. Kyselyt secondary indexeillä: GSI:t ja LSI:t
← Takaisin: Palvelimeton taustajärjestelmä AWS Lambdalla ja API Gatewaylla