DynamoDB Pagination: Pangkalahatang-ideya, Mga Kaso ng Paggamit, at Mga Halimbawa

Dynamodb Pagination Pangkalahatang Ideya Mga Kaso Ng Paggamit At Mga Halimbawa



Ang pamamahala sa napakaraming data ay maaaring isang mahirap na gawain para sa mga tagapamahala ng data, pangunahin kung ang iyong query o mga resulta ng pag-scan ay tumatakbo sa maraming pahina. Ang pagbilang ng pahina sa DynamoDB ay nagbibigay-daan sa database na pangasiwaan ang malalaking dami ng data sa pamamagitan ng paghahati ng mga resulta sa maraming napapamahalaang mga pahina. Itinatampok din nito kung paano naiiba ang pagination sa DynamoDB sa pagination sa ibang mga database.

Ano ang Pagination sa DynamoDB?

Sa pangkalahatan, ang pagination, na nagmula sa mga salitang pahina, ay isang pamamaraan na ginagamit ng mga database upang hatiin ang mga talaan ng data sa maramihang mga chunks, mga segment, o mga pahina. At dahil sinusuportahan ng AWS DynamoDB ang pag-iimbak ng malalaking halaga ng data, nagtatampok ito ng maaasahang mga kakayahan sa pagination.







Tinitiyak ng bahagi ng pagination ng DynamoDB na maaari ka lamang kumuha ng hanggang 1 GB ng data sa bawat pag-scan o query. Bagama't iyon ay isang default na setting, maaari kang magdagdag ng parameter ng limitasyon sa isang query upang tumukoy ng limitasyon. Maaari ka pang magtakda ng limitasyon para sa bilang ng mga tala sa bawat query sa pag-scan.



Kapansin-pansin, may ilang pagkakaiba sa pagitan ng pagination sa DynamoDB at pagination sa isang tipikal na database ng SQL. Malinaw, ang bawat paginated record na kinukuha sa DynamoDB ay may direktang gastos, na ginagawa itong hindi nakasulat na panuntunan kapag ginagamit ang pagination sa DynamoDB. Ginagawa ng feature na ito ang pagination bilang isang mahalagang salik sa paglilimita sa parehong mga nakuhang tala at direktang gastos.



Paano Gamitin ang Pagination sa DynamoDB





1. Pagbilang ng pahina sa panahon ng isang Query Operation

Sa DynamoDB, ibinabalik lamang ng isang query ang mga resulta ng hanggang 1 MB. Ngunit maaari mong epektibong makumpirma kung mayroong higit pang mga resulta sa pamamagitan ng pagsusuri sa iyong mga resulta. Kapansin-pansin, ang isang mababang antas na resulta ng pagpapatakbo ng query ay naglalaman ng isang LastEvaluatedKey na elemento na hindi null upang ipahiwatig na mayroong higit pang mga item na nauugnay sa iyong query na dapat mong kunin.

Ang isang resulta na walang LastEvaluatedKey na elemento na hindi null, ay nagpapahiwatig na ang lahat ng mga item na tumutugma sa query ay magkasya sa loob ng 1 MB na limitasyon at wala nang mga item para sa pagkuha. Siyempre, maaari ka ring magtakda ng limitasyon para sa bilang ng mga item sa bawat resulta. Tingnan ang sumusunod na sample command:



aws dynamodb query \

--table-name MyTableName \

--key-condition-expression 'PartitionKey = :pk \

--expression-attribute-values ​​'{'
:pk ':{' S ':' a1234b '}},

--limitasyon 10 \

Maaari mong gamitin ang nakaraang command upang i-query ang iyong talahanayan para sa mga item na may parehong mga halaga ng pagpapahayag ng pangunahing kondisyon. Hayaan kaming maghanap sa aming talahanayan ng 'Mga Order' para sa order_Id mula sa Darry Tech. Nagtakda din kami ng limitasyon sa 10 item bawat pahina. Ang isa pang opsyon para sa –limit na parameter ay ang paggamit ng –page-size na parameter para sa parehong layunin.

Ang pagination ay isang awtomatikong operasyon sa AWS CLI para sa mga item na mas mababa sa 1MB ng data. Maaari kang magdagdag ng eksklusibong start key sa command kung gusto mong magsimula ang iyong query sa isang partikular na order.

Mukhang ganito ang tugon:

Ang mga ibinigay na resulta ay nagpapakita ng 10 Darry Tech sa unang pahina. Maaari mong gamitin ang mga halaga ng LastEvaluatedKey upang makakuha ng higit pang mga order na tumutugma sa mga value ng key ng expression ng iyong paghahanap upang makabuo ng bagong query. Ang bagong kahilingan sa query ay naglalaman ng mga halaga ng LastEvaluatedKey sa ExclusiveStartKey na parameter.

Ang isang halimbawa ng syntax ay ipinapakita sa sumusunod:

aws dynamodb query \

--table-name ExampleTable \

--key-condition-expression 'PartitionKey = :pk \

--expression-attribute-values ​​'{'
:pk ':{' S ': Darry Tech ' \

--limitasyon 10 \

--exclusive-start-key '{'
PartitionKey ':{' S ': Darry Tech' }, 'SortKey' :{ 'S' : '5356' }} '

Ang nakaraang command ay gumagawa ng mga susunod na setoff order sa susunod na page, simula sa order ID na may tinukoy na pangunahing key, ibig sabihin, {“PartitionKey”:{“S”: Darry Tech”},”SortKey”:{“S”: ”5356-sy”}}.

2. Pagbilang ng pahina sa Panahon ng Pag-scan

Posible ring gamitin ang pagination para sa mga operasyon ng pag-scan. Gumagana ang lahat sa parehong paraan tulad ng sa mga utos ng query. Gayunpaman, kailangan mong gamitin ang katangian ng filter-expression. Ang utos ay mukhang kung ano ang mayroon kami dito:

aws dynamodb scan \

--table-name MyTable \

--filter-expression 'AttributeName = :value' \

--expression-attribute-values '{':value':{'S':'ABC123'}}' \

--limitasyon dalawampu \

--exclusive-start-key '{'PartitionKey':{'S':'ABC123'},'SortKey':{'S':'XYZ987'}}'

Ang nakaraang command ay nagretiro ng hanggang 20 item bawat page mula sa MyTable table, simula sa item na ang pangunahing key ay {“PartitionKey”: “ABC123”, “SortKey”: “XYZ987”}. Pini-filter nito ang mga resulta upang isama lang ang mga item kung saan ang attribute na AttributeName ay may value na 'ABC123'.

Sa tugon, ang LastEvaluatedKey Ang field ay naglalaman ng pangunahing key ng huling item sa set ng resulta. Maaari mong gamitin ang halagang ito bilang ang ExclusiveStartKey sa isang kasunod scan operasyon upang makuha ang susunod na pahina ng mga resulta.

Konklusyon

Pinapabuti ng pagination sa DynamoDB ang pamamahala ng data. Gayunpaman, mahalagang malaman kung makikinabang ang iyong mga system mula sa pagination. Kinakailangang gumamit ng pagination kung mayroon kang mahabang listahan ng mga item sa isang application. Habang ang ibinigay na paglalarawan ay nakatuon sa tawag sa AWS CLI, maaari mo ring gamitin ang pagination sa mga AWS SDK gaya ng Python's Boto3 o anumang SDK na gusto mo.