Филтърни изрази на DynamoDB: Всичко, което трябва да знаете

Filt Rni Izrazi Na Dynamodb Vsicko Koeto Trabva Da Znaete



Филтърните изрази се използват във функцията No-SQL DynamoDB като клаузите WHERE, които са често срещани в SQL базите данни. Въпреки това, тъй като DynamoDB е база данни без SQL, филтърните изрази се държат доста по-различно от клаузите WHERE поради естеството и структурата на базите данни без SQL.

Тази статия се фокусира върху филтърни изрази. Затова ще дефинираме филтърните изрази, ще обясним защо и кога са приложими и ще предоставим ръководство стъпка по стъпка как да ги използвате чрез подходящи примери.

Какво представляват филтърните изрази?

Филтърните изрази са популярна техника за филтриране на данните в DynamoDB по време на операциите Query и Scan. В DynamoDB правилното моделиране и организация на данни разчитат на филтриране. Докато повечето приложения винаги имат тонове запазени данни, може спешно да се нуждаете от елемент от огромната бъркотия.







Вашата способност да извличате правилните данни, когато имате нужда от тях, зависи от възможностите за филтриране на вашата база данни и това е мястото, където филтърните изрази помагат. Те уточняват резултатите в елемента на заявката, който искате да ви бъде върнат, тъй като изхвърлят останалите елементи.



Можете да приложите филтърните изрази на филтрите от страна на сървъра върху атрибутите на елемент след приключване на операция на заявка, но преди сървърът да върне резултатите от вашето извикване на заявка. Това означава, че вашата заявка все още консумира същото количество капацитет за четене, независимо дали използвате филтърен израз.



Освен това, подобно на обикновените операции на заявка, вашето ограничение за данни от 1 MB за операции на заявка се случва преди оценката на вашата операция за филтърен израз. Можете да използвате тази операция, за да намалите полезния товар, да търсите конкретни елементи и да подобрите опростеността и четливостта по време на разработката на приложение.





Синтаксис на филтърния израз и примери

Трябва да се отбележи, че както филтърните изрази, така и ключовите изрази използват един и същ синтаксис. Освен това филтърните изрази и изразите за условия могат също да използват едни и същи функции, компаратори и логически оператори.

Другите оператори, които могат да филтрират изразите, също включват оператора CONTAINS, оператора OR, оператора not-equals (), оператора IN, оператора BETWEEN, оператора BEGINS_WITH, оператора SIZE и оператора EXISTS.



Пример 1: Запитване с помощта на първични ключове на AWS CLI и DynamoDB

Този пример прави запитване към таблицата „Музика“ за конкретен жанр (ключ на дял) и конкретен изпълнител (ключ за сортиране). Помощната програма връща резултат само за елементите, които съответстват на конкретния ключ за дял и ключ за сортиране за песните с най-много гледания.

Можете да посочите броя изгледи (#v) в командата. Например, маркираме нашия минимален лимит до 1000 показвания, за да подсказваме, че ще се върнат само резултатите за песните с над 1000 гледания.

$ aws dynamodb заявка \
--име-на-таблица музика \
--ключово-условно-изразяване „Жанр = :fn и Изпълнител = :sub“ \
--филтър-израз '#v >= :num(1000)' \
--имена-на-атрибути на изрази '{'#v': 'Изгледи'}' \
--expression-attribute-values файл: // values.json

Пример 2: Използване на AWS CLI с израз на условие

Можем да преструктурираме същата заявка, както в предишния пример, но сега с ключове за условия заедно с нашите филтри. Не включва ключа за сортиране. Вместо това той извлича всички записи за посочения изпълнител с повече от 1000 гледания. Може също така да бъде реконструиран, за да предоставя поръчки над даден номер за конкретно потребителско име (customer_id).

$ aws dynamodb заявка \
--име-на-таблица музика \
--ключово-условно-изразяване „Потребителско име = :потребителско име“ \
--филтър-израз 'Сума >: сума' \
--expression-attribute-values '{
':потребителско име': { 'S': 'изпълнител' },
':сума': { 'N': '1000' }
}'
\
$ЛОКАЛНО

Пример за резултата изглежда така:

Дадената илюстрация показва, че от 56 заглавия на песни за един и същ изпълнител, само седем песни имат повече от 1000 гледания. Ние обаче съкратихме цифрата за краткост и включихме само първия и последния резултат в списъка.

Пример 3: Използване на филтърни изрази с оператора No-Equal ().

В следната помощна програма на Java искаме да направим запитване към нашата таблица (колекция от филми) за всички филми, които не са равни на „Филм X“. Уверете се, че използвате филтърен израз с атрибут (#име) заедно със стойност на атрибут на израз (:име), както е илюстрирано по-долу:

const AWS = изискване ( 'aws-sdk' ) ;
AWS.config.update ( { регион: 'eu-west-1' } ) ;
const dynamodb = нов AWS.DynamoDB.DocumentClient ( ) ;

var params = {
  Име на таблица: 'колекция от филми' ,
KeyConditionExpression: '#PK = :PK' ,
FilterExpression: '#име :име' , ( филтър израз )
ExpressionAttributeNames: { '#PK' : 'PK' , '#име' : 'име' } , ( израз на условие )
ExpressionAttributeValues: {
„:PK“ : „OgejhHrdRS453HGD4Ht44“ ,
':име' : 'Филм X'
}
} ;

dynamodb.query ( параметри, функция ( грешка, данни ) {
ако ( грешка ) console.log ( грешка ) ;
друго console.log ( данни ) ;
} ) ;

Пример 4: Използване на филтърни изрази с оператора за сканиране

Докато предишната команда използва <>, за да извлече само онези елементи, които не са равни на името на филма, наречено Movie X, уверете се, че използвате изразите за ключови условия тук заедно с израза на филтъра. Това е така, защото е невъзможно да се филтрират данните в оператора Query, без да се използва израз на ключово условие.

var params = {
Име на таблица: 'колекция от филми' ,
FilterExpression: „PK = :PK и #име :име“ ,
ExpressionAttributeNames: { '#име' : 'име' } ,
ExpressionAttributeValues: {
„:PK“ : „OgejhHrdRS453HGD4Ht44“ ,
':име' : 'Филм X'
}
} ;

dynamodb.scan ( параметри, функция ( грешка, данни ) {
ако ( грешка ) console.log ( грешка ) ;
друго console.log ( данни ) ;
} ) ;

Заключение

Това е краят на нашия урок на DynamoDB за филтърни изрази. Можете да използвате филтърните изрази, за да извлечете набор от предпочитани данни, да филтрирате извлечените данни след сканиране или заявка или да върнете набор от данни на клиент. Въпреки че е приложим с набор от инструменти, има случаи, когато използването на филтърните изрази не е жизнеспособно. Например, можете да ги използвате само ако имате правилен модел на данни, когато използвате първичен ключ и когато извличате големи части от данни.