Cassandra Συλλογές: Σύνολο, Λίστα & Χάρτη σε CQL με Παράδειγμα
⚡ Έξυπνη Σύνοψη
Cassandra Οι συλλογές αποθηκεύουν πολλές τιμές μέσα σε μία μόνο στήλη χρησιμοποιώντας τους τύπους set, list και map. Αυτή η σελίδα εξηγεί κάθε τύπο, τη σύνταξη CQL για τη δημιουργία και τη συμπλήρωσή τους, τον τρόπο ενημέρωσης στοιχείων και τα όρια μεγέθους που καθορίζουν πότε μια συλλογή είναι λανθασμένη επιλογή.
Τι είναι Cassandra Συλλογές;
Cassandra Οι συλλογές είναι ένας καλός τρόπος χειρισμού εργασιών. Πολλά στοιχεία μπορούν να αποθηκευτούν σε συλλογές. Υπάρχουν περιορισμοί σε Cassandra συλλογές.
- Μια στήλη συλλογής δεν μπορεί να αποθηκεύσει περισσότερα από 64 KB δεδομένων σε μία μόνο τιμή.
- Διατηρήστε μια συλλογή μικρή για να αποφύγετε την επιβάρυνση της υποβολής ερωτημάτων στη συλλογή, επειδή ολόκληρη η συλλογή διαβάζεται ακόμα και όταν χρειάζεται μόνο ένα στοιχείο.
- Η αποθήκευση περισσότερων από 64 KB σημαίνει ότι μπορούν να υποβληθούν ερωτήματα μόνο για τα πρώτα 64 KB, γεγονός που έχει ως αποτέλεσμα την απώλεια δεδομένων.
- Μια μη παγωμένη συλλογή περιορίζεται σε περίπου 65,535 στοιχεία και κάθε στοιχείο διαβάζεται μαζί ως μία μονάδα.
Αυτά τα όρια υποδεικνύουν έναν κανόνα: οι συλλογές ταιριάζουν σε μια χούφτα χαρακτηριστικά που είναι συνδεδεμένα με μια γραμμή, όχι σε μια ανοιχτή λίστα που μεγαλώνει με τη χρήση. Οτιδήποτε συνεχίζει να μεγαλώνει ανήκει σε στήλες ομαδοποίησης του δικού του πίνακα.
Τύποι Cassandra Συλλογές
Υπάρχουν κυρίως τρία είδη συλλογών που Cassandra υποστηρίζει:
- σετ
- Λιστα
- Χάρτης
Cassandra Σετ συλλογής
Ένα σύνολο αποθηκεύει μια ομάδα στοιχείων που επιστρέφει ταξινομημένα στοιχεία κατά την υποβολή ερωτήματος.
Σύνταξη
Εδώ είναι η σύνταξη της συλλογής Set που αποθηκεύει πολλές διευθύνσεις email για τον δάσκαλο.
CREATE TABLE University.Teacher ( id int, Name text, Email set<text>, PRIMARY KEY (id) );
Παράδειγμα
Εδώ είναι το στιγμιότυπο όπου δημιουργείται ο πίνακας "Δάσκαλος" με τη στήλη "Email" ως συλλογή.
Εδώ είναι το στιγμιότυπο όπου τα δεδομένα εισάγονται στη συλλογή.
INSERT INTO University.Teacher (id, Name, Email) VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});
Τα μεμονωμένα στοιχεία προστίθενται ή αφαιρούνται χωρίς να ξαναγραφεί ολόκληρο το σύνολο, κάτι που αποτελεί το κύριο πλεονέκτημα του να μην παγώνεις μια συλλογή.
UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1; UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;
Cassandra Συλλογή λίστας
Όταν έχει σημασία η σειρά των στοιχείων, χρησιμοποιείται η λίστα.
Παράδειγμα
Ακολουθεί ένα στιγμιότυπο όπου προστίθενται μαθήματα στηλών τύπου λίστας στον πίνακα "Δάσκαλος".
ALTER TABLE University.Teacher ADD coursenames list<text>;
Εδώ είναι το στιγμιότυπο όπου τα δεδομένα εισάγονται στη στήλη «ονόματα μαθημάτων».
INSERT INTO University.Teacher (id, Name, Email, coursenames) VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);
Εδώ είναι το στιγμιότυπο που δείχνει την τρέχουσα κατάσταση της βάσης δεδομένων μετά την εισαγωγή.
Τα στοιχεία μπορούν να προστεθούν ή να προταχθούν, αν και η προταθείσα προσθήκη και η ενημέρωση κατά ευρετήριο απαιτούν και οι δύο Cassandra να διαβάσουν πρώτα τη λίστα, γεγονός που τα καθιστά πιο αργά από την προσθήκη.
UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2; UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;
Cassandra Συλλογή χαρτών
Ο χάρτης είναι ένας τύπος συλλογής που χρησιμοποιείται για την αποθήκευση ζευγών τιμών κλειδιών. Όπως υποδηλώνει το όνομά του ότι αντιστοιχίζει το ένα πράγμα στο άλλο.
Για παράδειγμα, εάν θέλετε να αποθηκεύσετε το όνομα του μαθήματος με το προαπαιτούμενο όνομα του μαθήματος, μπορεί να χρησιμοποιηθεί η συλλογή χαρτών.
Παράδειγμα
Εδώ είναι το στιγμιότυπο όπου δημιουργείται ο τύπος χάρτη για το όνομα του μαθήματος και το προαπαιτούμενο όνομα του μαθήματος.
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
Εδώ είναι το στιγμιότυπο όπου τα δεδομένα εισάγονται στον τύπο συλλογής χάρτη.
INSERT INTO University.Course (id, prereq) VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});
Μία μόνο καταχώρηση ορίζεται ή αφαιρείται χωρίς να αγγίξετε τον υπόλοιπο χάρτη.
UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1; DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;
Σύνολο vs Λίστα vs Χάρτης: Επιλογή Συλλογής
Οι τρεις τύποι φαίνονται εναλλάξιμοι, αλλά διαφέρουν ως προς τις εγγυήσεις παραγγελίας και το κόστος ενημέρωσης.
| Άποψη | σετ | Λιστα | Χάρτης |
|---|---|---|---|
| παραγγελία | Ταξινόμηση κατά τιμή | Η εντολή εισαγωγής διατηρήθηκε | Ταξινόμηση κατά κλειδί |
| Διπλότυπα | Δεν επιτρέπεται | Επιτρέπονται τα κατοικίδια | Μοναδικά κλειδιά |
| Κόστος ενημέρωσης | Φθηνό, δεν χρειάζεται διάβασμα | Προσθήκη φθηνή. Η προσθήκη προθέματος και η ενημέρωση ευρετηρίου απαιτούν ανάγνωση | Φθηνό ανά κλειδί |
| καλυτερα for | Ετικέτες, διευθύνσεις ηλεκτρονικού ταχυδρομείου, μοναδικές ετικέτες | Ταξινομημένα βήματα όπου τα διπλότυπα έχουν νόημα | Ονομασμένα χαρακτηριστικά με απρόβλεπτα κλειδιά |
Προτιμήστε ένα σύνολο από μια λίστα, εκτός αν η σειρά έχει πραγματικά σημασία, επειδή οι λειτουργίες ευρετηρίου λίστας δημιουργούν ταφόπλακες και μπορούν να παράγουν εκπληκτικά αποτελέσματα υπό ταυτόχρονες εγγραφές. Προσθήκη παγωμένος σε οποιοδήποτε από τα τρία το αποθηκεύει ως μία αμετάβλητη τιμή, η οποία επιτρέπει στη συλλογή να εμφανίζεται σε ένα πρωτεύον κλειδί αλλά καταργεί τις ενημερώσεις σε επίπεδο στοιχείου.
CREATE TABLE University.Enrolment ( id int, tags frozen<set<text>>, PRIMARY KEY (id, tags) );
Όταν μια συλλογή υπερβαίνει μερικές δεκάδες στοιχεία, μοντελοποιήστε την ως ξεχωριστό πίνακα με το στοιχείο ως στήλη ομαδοποίησης, ακολουθώντας την προσέγγιση στο Cassandra κανόνες μοντέλου δεδομένωνΤο φιλτράρισμα βάσει περιεχομένου συλλογής απαιτεί ένα ευρετήριο, το οποίο καλύπτεται στο δημιουργία και απόθεση ευρετηρίου tutorial.







