DynamoDB Pagination: Επισκόπηση, περιπτώσεις χρήσης και παραδείγματα

Dynamodb Pagination Episkopese Periptoseis Chreses Kai Paradeigmata



Η διαχείριση ογκωδών ποσοτήτων δεδομένων μπορεί να είναι μια δύσκολη εργασία για τους διαχειριστές δεδομένων, κυρίως εάν τα αποτελέσματα του ερωτήματός σας ή της σάρωσης εκτελούνται σε πολλές σελίδες. Η σελιδοποίηση στο DynamoDB επιτρέπει στη βάση δεδομένων να χειρίζεται μεγάλες ποσότητες δεδομένων σπάζοντας τα αποτελέσματα σε πολλές διαχειρίσιμες σελίδες. Αυτή η εγγραφή εξηγεί τη σελιδοποίηση DynamoDB και παρέχει διάφορες πιθανές περιπτώσεις χρήσης και παραδείγματα. Υπογραμμίζει επίσης πώς η σελιδοποίηση στο DynamoDB διαφέρει από τη σελιδοποίηση σε άλλες βάσεις δεδομένων.

Τι είναι η σελιδοποίηση στο DynamoDB;

Γενικά, η σελιδοποίηση, που προέρχεται από τη λέξη σελίδες, είναι μια τεχνική που χρησιμοποιείται από βάσεις δεδομένων για να χωρίσει τις εγγραφές δεδομένων σε πολλαπλά κομμάτια, τμήματα ή σελίδες. Και δεδομένου ότι το AWS DynamoDB υποστηρίζει την αποθήκευση μεγάλων ποσοτήτων δεδομένων, διαθέτει αξιόπιστες δυνατότητες σελιδοποίησης.







Το στοιχείο σελιδοποίησης DynamoDB διασφαλίζει ότι μπορείτε να ανακτήσετε μόνο έως και 1 GB δεδομένων ανά σάρωση ή ερώτημα. Αν και αυτή είναι μια προεπιλεγμένη ρύθμιση, μπορείτε να προσθέσετε μια παράμετρο ορίου σε ένα ερώτημα για να καθορίσετε ένα όριο. Μπορείτε επιπλέον να ορίσετε ένα όριο για τον αριθμό των εγγραφών σε κάθε ερώτημα σάρωσης.



Συγκεκριμένα, υπάρχουν μερικές διαφορές μεταξύ της σελιδοποίησης στο DynamoDB και της σελιδοποίησης σε μια τυπική βάση δεδομένων SQL. Το πιο προφανές είναι ότι κάθε σελιδοποιημένη εγγραφή που ανακτάται στο DynamoDB έχει ένα άμεσο κόστος, καθιστώντας αυτό έναν άγραφο κανόνα κατά τη χρήση της σελιδοποίησης στο DynamoDB. Αυτή η δυνατότητα καθιστά τη σελιδοποίηση ζωτικό παράγοντα για τον περιορισμό τόσο των ανακτημένων εγγραφών όσο και του άμεσου κόστους.



Πώς να χρησιμοποιήσετε τη σελιδοποίηση στο DynamoDB





1. Σελιδοποίηση κατά τη διάρκεια μιας λειτουργίας ερωτήματος

Στο DynamoDB, ένα ερώτημα επιστρέφει μόνο αποτελέσματα έως και 1 MB. Αλλά μπορείτε να επιβεβαιώσετε αποτελεσματικά εάν υπάρχουν περισσότερα αποτελέσματα ελέγχοντας τα αποτελέσματά σας. Συγκεκριμένα, ένα αποτέλεσμα λειτουργίας ερωτήματος χαμηλού επιπέδου περιέχει ένα στοιχείο LastEvaluatedKey το οποίο δεν είναι μηδενικό για να υποδείξει ότι υπάρχουν περισσότερα στοιχεία που σχετίζονται με το ερώτημά σας και πρέπει να ανακτήσετε.

Ένα αποτέλεσμα χωρίς στοιχείο LastEvaluatedKey που δεν είναι μηδενικό, σημαίνει ότι όλα τα στοιχεία που ταιριάζουν με το ερώτημα χωρούν εντός του ορίου του 1 MB και δεν υπάρχουν άλλα στοιχεία για ανάκτηση. Φυσικά, μπορείτε επίσης να ορίσετε ένα όριο για τον αριθμό των στοιχείων ανά αποτέλεσμα. Δείτε το ακόλουθο δείγμα εντολής:



aws dynamodb ερώτημα \

--όνομα πίνακα MyTableName \

--κλειδί-κατάσταση-έκφραση 'PartitionKey = :pk \

--expression-attribute-values ​​'{'
:pk ':{' μικρό ':' a1234b '}},

-- όριο 10 \

Μπορείτε να χρησιμοποιήσετε την προηγούμενη εντολή για να υποβάλετε ερώτημα στον πίνακα σας για τα στοιχεία με τις ίδιες τιμές έκφρασης συνθήκης κλειδιού. Ας αναζητήσουμε τον πίνακα 'Παραγγελίες' για order_Ids από την Darry Tech. Θέτουμε επίσης ένα όριο στα 10 στοιχεία ανά σελίδα. Μια άλλη επιλογή για την παράμετρο –limit είναι να χρησιμοποιήσετε την παράμετρο –page-size για τον ίδιο σκοπό.

Η σελιδοποίηση είναι μια αυτόματη λειτουργία στο AWS CLI για στοιχεία κάτω από 1 MB δεδομένων. Μπορείτε να προσθέσετε ένα αποκλειστικό κλειδί έναρξης στην εντολή εάν θέλετε το ερώτημά σας να ξεκινά από μια συγκεκριμένη παραγγελία.

Η απάντηση μοιάζει με αυτό:

Τα παρεχόμενα αποτελέσματα δείχνουν 10 Darry Tech στην πρώτη σελίδα. Μπορείτε να χρησιμοποιήσετε τις τιμές LastEvaluatedKey για να λάβετε περισσότερες παραγγελίες που αντιστοιχούν στις τιμές των κλειδιών έκφρασης της αναζήτησής σας για να δημιουργήσετε ένα νέο ερώτημα. Το νέο αίτημα ερωτήματος περιέχει τις τιμές LastEvaluatedKey στην παράμετρο ExclusiveStartKey.

Ένα παράδειγμα σύνταξης φαίνεται στο παρακάτω:

aws dynamodb ερώτημα \

--table-name ExampleTable \

--κλειδί-κατάσταση-έκφραση 'PartitionKey = :pk \

--expression-attribute-values ​​'{'
:pk ':{' μικρό ': Darry Tech' \

-- όριο 10 \

--exclusive-start-key '{'
PartitionKey ':{' μικρό ': Darry Tech' }, 'Κλειδί ταξινόμησης' :{ 'ΜΙΚΡΟ' : '5356' }} '

Η προηγούμενη εντολή παράγει τις επόμενες εντολές ρύθμισης στην επόμενη σελίδα, ξεκινώντας με το αναγνωριστικό παραγγελίας που έχει το καθορισμένο πρωτεύον κλειδί, π.χ. {“PartitionKey”:{“S”: Darry Tech”},”SortKey”:{“S”: '5356-sy'}}.

2. Σελιδοποίηση κατά τις λειτουργίες σάρωσης

Είναι επίσης δυνατή η χρήση της σελιδοποίησης για λειτουργίες σάρωσης. Όλα λειτουργούν με τον ίδιο τρόπο όπως με τις εντολές ερωτήματος. Ωστόσο, πρέπει να χρησιμοποιήσετε το χαρακτηριστικό filter-expression. Η εντολή μοιάζει με αυτό που έχουμε εδώ:

aws dynamodb σάρωση \

--table-name MyTable \

--φίλτρο-έκφραση 'AttributeName = :value' \

--έκφραση-ιδιότητα-τιμές '{':value':{'S':'ABC123'}}' \

--όριο είκοσι \

-- αποκλειστικό κλειδί έναρξης '{'PartitionKey':{'S':'ABC123'},'SortKey':{'S':'XYZ987'}}'

Η προηγούμενη εντολή αποσύρει έως και 20 στοιχεία ανά σελίδα από τον πίνακα MyTable, ξεκινώντας με το στοιχείο του οποίου το πρωτεύον κλειδί είναι {“PartitionKey”: “ABC123”, “SortKey”: “XYZ987”}. Φιλτράρει τα αποτελέσματα για να περιλαμβάνει μόνο τα στοιχεία όπου το χαρακτηριστικό AttributeName έχει την τιμή 'ABC123'.

Στην απάντηση, το LastEvaluatedKey Το πεδίο περιέχει το πρωτεύον κλειδί του τελευταίου στοιχείου στο σύνολο αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε αυτήν την τιμή ως το ExclusiveStartKey σε μια μεταγενέστερη σάρωση λειτουργία για την ανάκτηση της επόμενης σελίδας αποτελεσμάτων.

συμπέρασμα

Η σελιδοποίηση στο DynamoDB βελτιώνει τη διαχειρισιμότητα των δεδομένων. Ωστόσο, είναι ζωτικής σημασίας να γνωρίζετε εάν τα συστήματά σας θα ωφεληθούν από τη σελιδοποίηση. Είναι απαραίτητο να χρησιμοποιήσετε σελιδοποίηση εάν έχετε μια μακρά λίστα στοιχείων σε μια εφαρμογή. Ενώ η παρεχόμενη εικόνα εστιάζει στην κλήση AWS CLI, μπορείτε επίσης να χρησιμοποιήσετε σελιδοποίηση με AWS SDK όπως το Boto3 της Python ή οποιοδήποτε SDK προτιμάτε.