Å administrere omfangsrike datamengder kan være en oppoverbakke oppgave for databehandlere, hovedsakelig hvis søke- eller skanneresultatene dine går på flere sider. Paginering i DynamoDB gjør det mulig for databasen å håndtere de store datamengdene ved å dele opp resultatene i flere håndterbare sider. Denne oppskriften forklarer DynamoDB-pagineringen og gir ulike mulige bruksområder og eksempler. Den fremhever også hvordan pagineringen i DynamoDB skiller seg fra pagineringen i andre databaser.
Hva er paginering i DynamoDB?
Generelt er paginering, avledet fra ordet sider, en teknikk som brukes av databaser for å dele opp datapostene i flere biter, segmenter eller sider. Og siden AWS DynamoDB støtter lagring av store datamengder, har den pålitelige pagineringsfunksjoner.
DynamoDB-pagineringskomponenten sikrer at du bare kan hente opptil 1 GB data per skanning eller spørring. Selv om det er en standardinnstilling, kan du legge til en grenseparameter i en spørring for å spesifisere en grense. Du kan videre angi en grense for antall poster i hver skannespørring.
Spesielt er det noen få forskjeller mellom paginering i DynamoDB og paginering i en typisk SQL-database. Mest åpenbart kommer hver paginerte post som hentes i DynamoDB med en direkte kostnad, noe som gjør dette til en uskreven regel når du bruker paginering i DynamoDB. Denne funksjonen gjør paginering til en viktig faktor for å begrense både de hentede postene og direkte kostnader.
Slik bruker du paginering i DynamoDB
1. Paginering under en spørringsoperasjon
I DynamoDB returnerer en spørring kun resultatene på opptil 1 MB. Men du kan effektivt bekrefte om det er flere resultater ved å granske resultatene dine. Spesielt inneholder et lavnivå spørringsoperasjonsresultat et LastEvaluatedKey-element som ikke er null for å indikere at det er flere elementer relatert til spørringen din som du bør hente.
Et resultat uten et LastEvaluatedKey-element som ikke er null, innebærer at alle elementene som samsvarer med søket, passer innenfor 1 MB-grensen og at det ikke er flere elementer for gjenfinning. Du kan selvfølgelig også sette en grense for antall elementer per resultat. Se følgende eksempelkommando:
aws dynamodb spørring \
--tabellnavn MyTableName \
--nøkkel-betingelse-uttrykk 'Partisjonsnøkkel = :pk \
--expression-attribute-values '{' :pk ':{' S ':' a1234b '}},
--grense 10 \
Du kan bruke den forrige kommandoen til å spørre tabellen om elementene med de samme nøkkelbetingelsesuttrykksverdiene. La oss søke i vår 'Ordre'-tabell for ordre_IDer fra Darry Tech. Vi har også satt en grense til 10 varer per side. Et annet alternativ for –limit-parameteren er å bruke –page-size-parameteren til samme formål.
Paginering er en automatisk operasjon i AWS CLI for elementer under 1 MB med data. Du kan legge til en eksklusiv startnøkkel til kommandoen hvis du vil at søket skal starte fra en bestemt ordre.
Svaret ser slik ut:
De oppgitte resultatene viser 10 Darry Tech på første side. Du kan bruke LastEvaluatedKey-verdiene for å få flere bestillinger som samsvarer med uttrykksnøkkelverdiene for søket for å konstruere et nytt søk. Den nye spørringsforespørselen inneholder LastEvaluatedKey-verdiene i ExclusiveStartKey-parameteren.
Et eksempel på syntaksen er vist i følgende:
aws dynamodb spørring \--tabellnavn Eksempeltabell \
--nøkkel-betingelse-uttrykk 'Partisjonsnøkkel = :pk \
--expression-attribute-values '{' :pk ':{' S ': Darry Tech ' \
--grense 10 \
--exclusive-start-key '{' Partisjonsnøkkel ':{' S ': Darry Tech' }, 'Sorteringsnøkkel' :{ 'S' : '5356' }} '
Den forrige kommandoen produserer de neste motregningsordrene på neste side, og starter med ordre-ID-en som har den spesifiserte primærnøkkelen, dvs. {“PartitionKey”:{“S”: Darry Tech”},”SortKey”:{“S”: ”5356-sy”}}.
2. Paginering under skanneoperasjoner
Det er også mulig å bruke paginering for skanneoperasjoner. Alt fungerer på samme måte som med spørringskommandoene. Du må imidlertid bruke filter-expression-attributtet. Kommandoen ser ut som det vi har her:
aws dynamodb skanning \--tabellnavn MyTable \
--filter-uttrykk 'Attributtnavn = :verdi' \
--uttrykk-attributt-verdier '{':value':{'S':'ABC123'}}' \
--grense tjue \
--eksklusiv-startnøkkel '{'PartitionKey':{'S':'ABC123'},'SortKey':{'S':'XYZ987'}}'
Den forrige kommandoen trekker ut opptil 20 elementer per side fra MyTable-tabellen, og starter med elementet hvis primærnøkkel er {'PartitionKey': 'ABC123', 'SortKey': 'XYZ987'}. Den filtrerer resultatene til å inkludere bare elementene der AttributeName-attributtet har 'ABC123'-verdien.
I svaret er det LastEvaluatedKey feltet inneholder primærnøkkelen til det siste elementet i resultatsettet. Du kan bruke denne verdien som ExclusiveStartKey i en påfølgende skanning operasjon for å hente neste side med resultater.
Konklusjon
Paginering i DynamoDB forbedrer håndteringen av data. Det er imidlertid viktig å vite om systemene dine vil ha nytte av paginering. Det er nødvendig å bruke paginering hvis du har en lang liste med elementer i en applikasjon. Mens den medfølgende illustrasjonen fokuserer på AWS CLI-kallet, kan du også bruke paginering med AWS SDK-er som Pythons Boto3 eller en hvilken som helst SDK du foretrekker.