DynamoDB-filteruttrykk: Alt du trenger å vite

Dynamodb Filteruttrykk Alt Du Trenger A Vite



Filteruttrykk brukes i No-SQL DynamoDB-funksjonen som WHERE-klausuler som er vanlige i SQL-databaser. Men siden DynamoDB er en No-SQL-database, oppfører filteruttrykk seg ganske annerledes enn WHERE-klausuler på grunn av naturen og strukturen til No-SQL-databaser.

Denne artikkelen fokuserer på filteruttrykk. Derfor vil vi definere filteruttrykkene, forklare hvorfor og når de er anvendelige, og gi en trinn-for-trinn-guide for hvordan du bruker dem gjennom relevante eksempler.

Hva er filteruttrykk?

Filteruttrykk er en populær teknikk for å filtrere dataene i DynamoDB under spørre- og skanningsoperasjoner. I DynamoDB er riktig datamodellering og organisering avhengig av filtrering. Selv om de fleste applikasjoner alltid har tonnevis av lagrede data, kan det hende du trenger en gjenstand fra det store rotet.







Din evne til å hente de riktige dataene når du trenger det avhenger av filtreringsmulighetene til databasen din, og det er her filteruttrykkene hjelper. De spesifiserer resultatene i søkeelementet som du ønsker skal returneres til deg ettersom de forkaster resten av elementene.



Du kan bruke filteruttrykkene på filtrene på serversiden på elementattributter etter at en spørringsoperasjon er ferdig, men før serveren henter tilbake resultatene av spørringsanropet. Dette innebærer at spørringen din fortsatt bruker samme mengde lesekapasitet, uavhengig av om du bruker et filteruttrykk.



Dessuten, som vanlige spørringsoperasjoner, skjer datagrensen på 1 MB for spørringsoperasjoner før evalueringen av filteruttrykksoperasjonen. Du kan bruke denne operasjonen til å redusere nyttelasten, søke etter spesifikke elementer og forbedre enkelheten og lesbarheten under applikasjonsutvikling.





Filteruttrykkssyntaks og eksempler

Spesielt bruker både filteruttrykk og nøkkeluttrykk samme syntaks. Dessuten kan filteruttrykk og betingelsesuttrykk også bruke de samme funksjonene, komparatorene og logiske operatorene.

De andre operatorene som filtrerer uttrykkene kan bruke inkluderer også CONTAINS-operatoren, OR-operatoren, not-equals ()-operatoren, IN-operatoren, BETWEEN-operatoren, BEGINS_WITH-operatoren, SIZE-operatoren og EXISTS-operatoren.



Eksempel 1: Spørring ved hjelp av AWS CLI og DynamoDB primærnøkler

Dette eksemplet spør etter musikktabellen for en bestemt sjanger (partisjonsnøkkel) og en spesifikk artist (sorteringsnøkkel). Verktøyet bringer bare tilbake et resultat for elementene som samsvarer med den bestemte partisjonsnøkkelen og sorteringsnøkkelen for sangene med flest visninger.

Du kan spesifisere antall visninger (#v) i kommandoen. For eksempel merker vi minimumsgrensen vår til 1000 visninger for å antyde at bare resultatene for sangene med over 1000 visninger kommer tilbake.

$ aws dynamodb spørring \
--tabellnavn Musikk \
--nøkkel-betingelse-uttrykk 'Sjanger = :fn og artist = :sub' \
--filter-uttrykk '#v >= :nummer(1000)' \
--uttrykk-attributt-navn '{'#v': 'Visninger'}' \
--uttrykk-attributt-verdier fil: // verdier.json

Eksempel 2: Bruk av AWS CLI med betingelsesuttrykk

Vi kan omstrukturere den samme spørringen som i forrige eksempel, men nå med betingelsesnøkler ved siden av filtrene våre. Den inkluderer ikke sorteringsnøkkelen. I stedet henter den alle postene for den angitte artisten med mer enn 1000 visninger. Det kan også rekonstrueres for å gi ordre over et gitt nummer for et bestemt brukernavn (customer_id).

$ aws dynamodb spørring \
--tabellnavn Musikk \
--nøkkel-betingelse-uttrykk 'Brukernavn = :brukernavn' \
--filter-uttrykk 'Beløp > :beløp' \
--uttrykk-attributt-verdier '{
':username': { 'S': 'artist' },
':amount': { 'N': '1000' }
}'
\
$LOCAL

Et eksempel på resultatet ser slik ut:

Den gitte illustrasjonen viser at av de 56 sangtitlene for samme artist er det bare syv sanger som har mer enn 1000 visninger. Vi har imidlertid kuttet tallet for korthets skyld og inkludert bare de første og siste resultatene i listen.

Eksempel 3: Bruk av filteruttrykk med No-Equal ()-operatøren

I det følgende Java-verktøyet ønsker vi å spørre tabellen vår (Movie Collection) for alle filmer som ikke er lik 'Movie X'. Pass på at du bruker et filteruttrykk med et attributt (#name) ved siden av en uttrykksattributtverdi (:name) som illustrert i følgende:

const AWS = krever ( 'aws-sdk' ) ;
AWS.config.update ( { region: 'eu-west-1' } ) ;
const dynamodb = ny AWS.DynamoDB.DocumentClient ( ) ;

var params = {
  Tabellnavn: 'filmsamling' ,
KeyConditionExpression: '#PK = :PK' ,
FilterExpression: '#navn  :navn' , ( filteruttrykk )
ExpressionAttributeNames: { '#PK' : 'PK' , '#Navn' : 'Navn' } , ( tilstandsuttrykk )
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':Navn' : 'Film X'
}
} ;

dynamodb.query ( parametere, funksjon ( feil, data ) {
hvis ( feil ) console.log ( feil ) ;
ellers console.log ( data ) ;
} ) ;

Eksempel 4: Bruk av filteruttrykk med skanneoperatøren

Mens den forrige kommandoen bruker <> for å hente bare de elementene som ikke er lik filmnavnet kalt Movie X, sørg for at du bruker nøkkelbetingelsesuttrykkene her sammen med filteruttrykket. Dette er fordi det er umulig å filtrere dataene i spørringsoperatoren uten å bruke et nøkkelbetingelsesuttrykk.

var params = {
Tabellnavn: 'filmsamling' ,
FilterExpression: 'PK = :PK og #navn  :navn' ,
ExpressionAttributeNames: { '#Navn' : 'Navn' } ,
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':Navn' : 'Film X'
}
} ;

dynamodb.scan ( parametere, funksjon ( feil, data ) {
hvis ( feil ) console.log ( feil ) ;
ellers console.log ( data ) ;
} ) ;

Konklusjon

Det er slutten på DynamoDB-opplæringen vår om filteruttrykk. Du kan bruke filteruttrykkene til å hente et sett med foretrukne data, filtrere de hentede dataene etter en skanning eller spørring, eller returnere et sett med data til en klient. Selv om det kan brukes med en rekke verktøy, er det tilfeller der bruk av filteruttrykk ikke er levedyktig. Du kan for eksempel bare bruke dem hvis du har en riktig datamodell, når du bruker en primærnøkkel, og når du trekker ut store deler av data.