DynamoDB-filterexpressies: alles wat u moet weten

Dynamodb Filterexpressies Alles Wat U Moet Weten



Filterexpressies worden gebruikt in de No-SQL DynamoDB-functie, zoals WHERE-clausules die gebruikelijk zijn in SQL-databases. Aangezien DynamoDB echter een No-SQL-database is, gedragen filterexpressies zich heel anders dan WHERE-clausules vanwege de aard en structuur van No-SQL-databases.

Dit artikel richt zich op filterexpressies. Daarom zullen we de filteruitdrukkingen definiëren, uitleggen waarom en wanneer ze van toepassing zijn, en een stapsgewijze handleiding geven over het gebruik ervan door middel van relevante voorbeelden.

Wat zijn filterexpressies?

Filterexpressies zijn een populaire techniek om de gegevens in DynamoDB te filteren tijdens query- en scanbewerkingen. In DynamoDB zijn goede gegevensmodellering en organisatie afhankelijk van filtering. Hoewel de meeste applicaties altijd tonnen opgeslagen gegevens hebben, heb je misschien dringend een item uit de enorme puinhoop nodig.







Uw vermogen om de juiste gegevens op te halen wanneer u deze nodig heeft, hangt af van de filtermogelijkheden van uw database, en hier helpen de filterexpressies. Ze specificeren de resultaten binnen het query-item dat u naar u wilt terugsturen terwijl ze de rest van de items negeren.



U kunt de filterexpressies toepassen op de filters aan de serverzijde op itemkenmerken nadat een Query-bewerking is voltooid, maar voordat de server de resultaten van uw Query-aanroep terugbrengt. Dit houdt in dat uw Query nog steeds dezelfde hoeveelheid leescapaciteit verbruikt, ongeacht of u een filterexpressie gebruikt.



Bovendien vindt, net als bij gewone Query-bewerkingen, uw gegevenslimiet van 1 MB voor Query-bewerkingen plaats vóór de evaluatie van uw filterexpressiebewerking. U kunt deze bewerking gebruiken om de payload te verminderen, naar specifieke items te zoeken en de eenvoud en leesbaarheid tijdens de toepassingsontwikkeling te verbeteren.





Syntaxis en voorbeelden van filteruitdrukkingen

Met name gebruiken zowel filteruitdrukkingen als sleuteluitdrukkingen dezelfde syntaxis. Bovendien kunnen filteruitdrukkingen en voorwaarde-uitdrukkingen ook dezelfde functies, vergelijkingen en logische operatoren gebruiken.

De andere operatoren die de uitdrukkingen kunnen filteren, zijn ook de CONTAINS-operator, de OR-operator, de niet-gelijk aan ()-operator, de IN-operator, de BETWEEN-operator, de BEGINS_WITH-operator, de SIZE-operator en de EXISTS-operator.



Voorbeeld 1: query's uitvoeren met behulp van AWS CLI en primaire sleutels van DynamoDB

In dit voorbeeld wordt de tabel Muziek doorzocht op een bepaald genre (partitiesleutel) en een specifieke artiest (sorteersleutel). Het hulpprogramma levert alleen een resultaat op voor de items die overeenkomen met de specifieke partitiesleutel en sorteersleutel voor de nummers met de meeste weergaven.

U kunt het aantal views (#v) specificeren in de opdracht. We taggen bijvoorbeeld onze minimumlimiet op 1.000 weergaven om te impliceren dat alleen de resultaten voor de nummers met meer dan 1000 weergaven terugkomen.

$ aws dynamodb-query \
--tafel naam Muziek \
--sleutelvoorwaarde-expressie 'Genre = :fn en Artiest = :sub' \
--filter-expressie '#v >= :getal(1000)' \
--expressie-attribuutnamen '{'#v': 'Weergaven'}' \
--expressie-attribuutwaarden het dossier: // waarden.json

Voorbeeld 2: AWS CLI gebruiken met Condition Expression

We kunnen dezelfde Query herstructureren als in het vorige voorbeeld, maar nu met conditiesleutels naast onze filters. Het bevat niet de sorteersleutel. In plaats daarvan haalt het alle records op voor de opgegeven artiest met meer dan 1.000 weergaven. Het kan ook worden gereconstrueerd om bestellingen boven een bepaald aantal voor een bepaalde gebruikersnaam (customer_id) te geven.

$ aws dynamodb-query \
--tafel naam Muziek \
--sleutelvoorwaarde-expressie 'Gebruikersnaam = :gebruikersnaam' \
--filter-expressie 'Bedrag > :bedrag' \
--expressie-attribuutwaarden '{
':gebruikersnaam': { 'S': 'artiest' },
':bedrag': { 'N': '1000' }
}'
\
$ LOKAAL

Een voorbeeld van het resultaat ziet er als volgt uit:

De gegeven illustratie laat zien dat van de 56 songtitels van dezelfde artiest slechts zeven nummers meer dan 1000 views hebben. We hebben het cijfer echter afgekapt voor beknoptheidsdoeleinden en alleen de eerste en de laatste resultaten in de lijst opgenomen.

Voorbeeld 3: Filterexpressies gebruiken met de operator Niet gelijk aan ().

In het volgende Java-hulpprogramma willen we onze tabel (Movie Collection) doorzoeken op alle films die niet gelijk zijn aan 'Movie X'. Zorg ervoor dat u een filterexpressie gebruikt met een attribuut (#name) naast een expressieattribuutwaarde (:name), zoals hieronder wordt geïllustreerd:

const AWS = vereisen ( 'aws-sdk' ) ;
AWS.config.update ( { regio: 'eu-west-1' } ) ;
const dynamodb = nieuwe AWS.DynamoDB.DocumentClient ( ) ;

var parameters = {
Tafel naam: 'filmcollectie' ,
SleutelVoorwaardeExpressie: '#PK = :PK' ,
FilterExpressie: '#naam naam' , ( uitdrukking filteren )
ExpressionAttributeNamen: { '#PK' : 'PK' , '#naam' : 'naam' } , ( voorwaarde uitdrukking )
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':naam' : 'Film X'
}
} ;

dynamodb.query ( parameters, functie ( fout, gegevens ) {
indien ( fout ) console.log ( fout ) ;
anders console.log ( gegevens ) ;
} ) ;

Voorbeeld 4: Filterexpressies gebruiken met de scanoperator

Hoewel de vorige opdracht <> gebruikt om alleen die items op te halen die niet gelijk zijn aan de filmnaam Movie X, moet u ervoor zorgen dat u de sleutelvoorwaarde-expressies hier samen met de filterexpressie gebruikt. Dit komt omdat het onmogelijk is om de gegevens in de Query-operator te filteren zonder een sleutelvoorwaarde-expressie te gebruiken.

var parameters = {
Tafel naam: 'filmcollectie' ,
FilterExpressie: 'PK = :PK en #naam  :naam' ,
UitdrukkingAttribuutNamen: { '#naam' : 'naam' } ,
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':naam' : 'Film X'
}
} ;

dynamodb.scan ( parameters, functie ( fout, gegevens ) {
indien ( fout ) console.log ( fout ) ;
anders console.log ( gegevens ) ;
} ) ;

Conclusie

Dat is het einde van onze DynamoDB-zelfstudie over filterexpressies. U kunt de filteruitdrukkingen gebruiken om een ​​set voorkeursgegevens op te halen, de opgehaalde gegevens na een scan of query te filteren of een set gegevens naar een client te retourneren. Hoewel het toepasbaar is met een reeks tools, zijn er gevallen waarin het gebruik van de filterexpressies niet haalbaar is. Je kunt ze bijvoorbeeld alleen gebruiken als je een goed datamodel hebt, bij het gebruik van een primaire sleutel en bij het extraheren van grote hoeveelheden data.