DynamoDB filtri avaldised: kõik, mida peate teadma

Dynamodb Filtri Avaldised Koik Mida Peate Teadma



Filtriavaldisi kasutatakse funktsioonis No-SQL DynamoDB, näiteks WHERE-klauslid, mis on levinud SQL-i andmebaasides. Kuna DynamoDB on aga no-SQL-i andmebaas, käituvad filtriavaldised No-SQL-i andmebaaside olemuse ja struktuuri tõttu hoopis teisiti kui WHERE-klauslid.

See artikkel keskendub filtriavaldistele. Seetõttu määratleme filtriavaldised, selgitame, miks ja millal need on rakendatavad, ning anname asjakohaste näidete kaudu samm-sammult juhendi nende kasutamiseks.

Mis on filtriavaldised?

Filtriavaldised on populaarne meetod DynamoDB andmete filtreerimiseks päringu- ja skannimistoimingute ajal. DynamoDB-s tugineb õige andmete modelleerimine ja korraldamine filtreerimisele. Kuigi enamikul rakendustel on alati palju salvestatud andmeid, võib teil tohutust segadusest kiiresti vaja minna.







Võimalus hankida õigeid andmeid alati, kui vajate, sõltub teie andmebaasi filtreerimisvõimalustest ja siin on abiks filtriavaldised. Nad määravad päringuüksuses olevad tulemused, mida soovite teile tagastada, kuna nad loobuvad ülejäänud üksustest.



Saate rakendada filtriavaldisi serveripoolsetele filtritele üksuse atribuutidele pärast päringutoimingu lõppu, kuid enne, kui server teie päringukutse tulemused tagasi toob. See tähendab, et teie päring kasutab endiselt sama palju lugemismahtu, olenemata sellest, kas kasutate filtriavaldist.



Pealegi, nagu tavaliste päringutoimingute puhul, toimub teie päringutoimingute 1 MB andmepiirang enne filtriavaldise toimingu hindamist. Seda toimingut saate kasutada kasuliku koormuse vähendamiseks, konkreetsete üksuste otsimiseks ning rakenduse arendamise lihtsuse ja loetavuse parandamiseks.





Filtri avaldise süntaks ja näited

Nimelt kasutavad nii filtriavaldised kui ka võtmeavaldised sama süntaksit. Peale selle võivad filtriavaldised ja tingimusavaldised kasutada samu funktsioone, komparaatoreid ja loogilisi operaatoreid.

Teiste avaldiste filtreerimiseks kasutatavate operaatorite hulka kuuluvad ka operaator CONTAINS, operaator VÕI, mitte-võrdne () operaator, IN, operaator BETWEEN, operaator BEGINS_WITH, operaator SIZE ja operaator EXISTS.



Näide 1: päring, kasutades AWS CLI ja DynamoDB esmaseid võtmeid

See näide esitab tabelist Muusika konkreetse žanri (partitsioonivõti) ja konkreetse esitaja (sorteerimisvõti) päringu. Utiliit toob tagasi ainult nende üksuste tulemused, mis vastavad konkreetsele partitsioonivõtmele ja sortimisvõtmele kõige rohkem vaadetega lugude puhul.

Käskluses saab määrata vaadete arvu (#v). Näiteks märgistame oma minimaalseks piiranguks 1000 vaatamist, mis viitab sellele, et tagasi tulevad ainult üle 1000 vaatamise saanud lugude tulemused.

$ aws dynamodb päring \
--tabeli nimi Muusika \
--võtme-tingimuse avaldis 'Žanr = :fn ja esitaja = :sub' \
--filtri avaldis '#v >= :num(1000)' \
--avaldis-atribuudi-nimed '{'#v': 'Vaatused'}' \
--avaldis-atribuut-väärtused fail: // väärtused.json

Näide 2: AWS CLI kasutamine tingimusavaldisega

Saame ümber struktureerida sama päringu nagu eelmises näites, kuid nüüd on filtrite kõrval ka tingimusklahvid. See ei sisalda sortimisvõtit. Selle asemel hangib see kõik määratud esitaja kirjed, millel on rohkem kui 1000 vaatamist. Seda saab ka rekonstrueerida, et anda konkreetse kasutajanime (kliendi_id) jaoks etteantud numbrist kõrgemaid tellimusi.

$ aws dynamodb päring \
--tabeli nimi Muusika \
--võtme-tingimuse avaldis 'Kasutajanimi = :kasutajanimi' \
--filtri avaldis 'Summa > :summa' \
--avaldis-atribuut-väärtused '{
':kasutajanimi': { 'S': 'artist' },
':summa': { 'N': '1000' }
}'
\
$LOCAL

Tulemuse näide näeb välja selline:

Toodud illustratsioonil on näha, et sama artisti 56 laulu pealkirjast on ainult seitsmel lool rohkem kui 1000 vaatamist. Lühiduse huvides oleme siiski arvu kärbinud ja lisanud loendisse ainult esimese ja viimase tulemuse.

Näide 3: Filtriavaldiste kasutamine operaatoriga No-Equal ()

Järgmises Java utiliidis tahame oma tabelist (filmikogu) teha päringu kõigi filmide jaoks, mis ei võrdu 'Movie X'-ga. Veenduge, et kasutate avaldise atribuudi väärtuse (:name) kõrval filtriavaldist atribuudiga (#name), nagu on näidatud järgmises.

const AWS = nõua ( 'aws-sdk' ) ;
AWS.config.update ( { piirkond: 'eu-west-1' } ) ;
const dynamodb = uus AWS.DynamoDB.DocumentClient ( ) ;

var params = {
  Tabelinimi: 'filmikogu' ,
KeyConditionExpression: '#PK = :PK' ,
FilterExpression: '#nimi  :nimi' , ( filtri väljend )
ExpressionAttributeNames: { '#PK' : 'PK' , '#nimi' : 'nimi' } , ( tingimuse väljendus )
Väljendi atribuutide väärtused: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':nimi' : 'Film X'
}
} ;

dynamodb.query ( parameetrid, funktsiooni ( eksitus, andmed ) {
kui ( eks ) console.log ( eks ) ;
muidu console.log ( andmeid ) ;
} ) ;

Näide 4: Filtriavaldiste kasutamine skannimisoperaatoriga

Kui eelmine käsk kasutab <>, et tuua ainult need üksused, mis ei võrdu filmi nimega Movie X, siis veenduge, et kasutaksite siin võtmetingimuse avaldisi koos filtriavaldisega. Selle põhjuseks on asjaolu, et päringuoperaatori andmeid on võimatu filtreerida ilma võtmetingimuse avaldist kasutamata.

var params = {
Tabeli nimi: 'filmikogu' ,
FilterExpression: 'PK = :PK ja #nimi  :nimi' ,
ExpressionAttributeNames: { '#nimi' : 'nimi' } ,
Väljendi atribuutide väärtused: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':nimi' : 'Film X'
}
} ;

dynamodb.scan ( parameetrid, funktsiooni ( eksitus, andmed ) {
kui ( eks ) console.log ( eks ) ;
muidu console.log ( andmeid ) ;
} ) ;

Järeldus

Sellega lõpeb meie DynamoDB filtriavaldiste õpetus. Saate kasutada filtriavaldisi eelistatud andmete kogumi toomiseks, hangitud andmete filtreerimiseks pärast skannimist või päringut või andmekomplekti tagastamiseks kliendile. Kuigi see on rakendatav paljude tööriistade puhul, on juhtumeid, kus filtriavaldiste kasutamine ei ole elujõuline. Näiteks saate neid kasutada ainult siis, kui teil on õige andmemudel, kui kasutate primaarvõtit ja eraldate suuri andmeid.