Cassandra TTL & Cassandra Τύποι δεδομένων CQL (Παράδειγμα)
⚡ Έξυπνη Σύνοψη
Cassandra Οι τύποι δεδομένων ορίζουν τι μπορεί να περιέχει κάθε στήλη και το TTL ελέγχει για πόσο καιρό μια τιμή επιβιώνει πριν λήξει αυτόματα. Αυτή η σελίδα παραθέτει κάθε τύπο CQL, εξηγεί τον μηχανισμό λήξης και καλύπτει τη συμπεριφορά tombstone που ακολουθεί τη λήξη.
Cassandra Τύποι δεδομένων
Cassandra υποστηρίζει διαφορετικούς τύπους τύπων δεδομένων. Εδώ είναι ο πίνακας που δείχνει τους τύπους δεδομένων, τις σταθερές τους και την περιγραφή.
| Τύπος CQL | Σταθερά | Περιγραφή |
|---|---|---|
| ascii | Χορδές | Συμβολοσειρά χαρακτήρων US-Ascii |
| bigint | Ακεραίες | 64-bit υπογεγραμμένο μακρύ |
| άμορφη μάζα | σταγόνες | Αυθαίρετα byte σε δεκαεξαδικό |
| boolean | Booleans | Σωστό ή λάθος |
| αντιμετώπιση | Ακεραίες | Κατανεμημένες τιμές μετρητή 64 bit |
| Ραντεβού | Ακέραιοι, συμβολοσειρές | Ημερομηνία ημερολογίου χωρίς χρονική συνιστώσα |
| δεκαδικός | Ακέραιοι, πλωτήρες | Μεταβλητή ακρίβεια δεκαδικού |
| διπλασιαστεί | Ακέραιοι, πλωτήρες | 64-bit κυμαινόμενο σημείο |
| διάρκεια | Διάρκεια | Ένα διάστημα μηνών, ημερών και νανοδευτερολέπτων |
| φλοτέρ | Ακέραιοι, πλωτήρες | 32-bit κυμαινόμενο σημείο |
| παγωμένος | Πλειάδες, συλλογές, τύποι που καθορίζονται από το χρήστη | Αποθηκεύει μια τιμή πολλαπλών τμημάτων ως ένα αμετάβλητο blob |
| inet | Χορδές | Διεύθυνση IP σε μορφή IPv4 ή IPv6 |
| int | Ακεραίες | 32-bit ακέραιος με πρόσημο |
| λίστα | Ταξινομημένη συλλογή στοιχείων | |
| χάρτη | Συλλογή ζευγών κλειδιών και τιμών σε στυλ JSON | |
| σειρά | Αταξινόμητη συλλογή μοναδικών στοιχείων | |
| ψιλόλιθος | Ακεραίες | 16-bit ακέραιος με πρόσημο |
| κείμενο | Χορδές | Κωδικοποιημένη συμβολοσειρά UTF-8 |
| ώρα | Ακέραιοι, συμβολοσειρές | Ώρα της ημέρας με ακρίβεια νανοδευτερολέπτου |
| timestamp | Ακέραιοι, συμβολοσειρές | Ημερομηνία συν ώρα, κωδικοποιημένη ως χιλιοστά του δευτερολέπτου από την εποχή |
| timeuuid | UUID | UUID τύπου 1, ταξινομήσιμο κατά ενσωματωμένο χρόνο |
| μικροσκοπικός | Ακεραίες | 8-bit ακέραιος με πρόσημο |
| πλειάδα | Μια σταθερή ομάδα πληκτρολογημένων πεδίων | |
| Ουάου | UUID | Τυπικό UUID |
| βαρτσάρ | Χορδές | Κωδικοποιημένη συμβολοσειρά UTF-8, ένα ψευδώνυμο κειμένου |
| ποικιλία | Ακεραίες | Αυθαίρετος ακέραιος αριθμός ακριβείας |
Τρεις επιλογές σε αυτήν τη λίστα προκαλούν τα περισσότερα λάθη μοντελοποίησης, επομένως αξίζει να αναφερθούν ρητά.
- κείμενο κατά του varchar. Είναι του ίδιου τύπου. Και τα δύο ονόματα λειτουργούν και η ανάμειξή τους δεν προσθέτει καμία αξία.
- χρονική σήμανση έναντι timeuuid. Χρησιμοποιήστε τη χρονική σήμανση για να καταγράψετε πότε συνέβη κάτι. Χρησιμοποιήστε το timeuuid ως στήλη ομαδοποίησης όταν πολλά συμβάντα μοιράζονται ένα χιλιοστό του δευτερολέπτου, επειδή το UUID εγγυάται μοναδικότητα ενώ παράλληλα ταξινομεί κατά χρόνο.
- δεκαδικό έναντι διπλού. Οι χρηματικές τιμές ανήκουν σε δεκαδική μορφή. Ένας διπλασιασμός εισάγει δυαδικό σφάλμα στρογγυλοποίησης που συσσωρεύεται σε όλες τις συγκεντρώσεις.
A αντιμετώπιση Η στήλη φέρει έναν ειδικό περιορισμό: ένας πίνακας μπορεί να περιέχει στήλες μετρητών ή συνηθισμένες στήλες, ποτέ και τις δύο, και οι γραμμές μετρητών δεν μπορούν να εισαχθούν, μόνο να αυξηθούν.
Cassandra TTL (Time to Live) χρησιμοποιώντας Αυτόματη Λήξη Δεδομένων
Cassandra παρέχει λειτουργικότητα με την οποία τα δεδομένα μπορούν να λήξουν αυτόματα.
Κατά την εισαγωγή δεδομένων, πρέπει να καθορίσετε την τιμή «ttl» σε δευτερόλεπτα. Η τιμή "ttl" είναι ο χρόνος για τη ζωντανή αξία για τα δεδομένα. Μετά από αυτό το συγκεκριμένο χρονικό διάστημα, τα δεδομένα θα αφαιρεθούν αυτόματα.
Για παράδειγμα, καθορίστε την τιμή ttl 100 δευτερόλεπτα κατά την εισαγωγή. Τα δεδομένα θα διαγραφούν αυτόματα μετά από 100 δευτερόλεπτα. Όταν τα δεδομένα έχουν λήξει, αυτά τα δεδομένα που έχουν λήξει επισημαίνονται με μια ταφόπλακα.
Μια ταφόπλακα υπάρχει για περίοδο χάριτος. Μετά τη λήξη των δεδομένων, τα δεδομένα αφαιρούνται αυτόματα μετά τη διαδικασία συμπίεσης.
Σύνταξη
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
Παράδειγμα
Εδώ είναι το στιγμιότυπο όπου εισάγονται δεδομένα στον πίνακα Student με τιμή ttl 100 δευτερόλεπτα.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
Εδώ είναι το στιγμιότυπο όπου τα δεδομένα λήγουν αυτόματα μετά από 100 δευτερόλεπτα και τα δεδομένα αφαιρούνται αυτόματα.
Έλεγχος και Αλλαγή TTL σε Υπάρχοντα Δεδομένα
Μόλις μια τιμή φέρει ένα TTL, τρεις επιπλέον λειτουργίες είναι χρήσιμες και η καθεμία έχει μια συμπεριφορά που εκπλήσσει τους νεοφερμένους.
Ο υπολειπόμενος χρόνος ζωής οποιασδήποτε στήλης που δεν είναι πρωτεύοντος κλειδιού μπορεί να διαβαστεί με τη συνάρτηση TTL.
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
Ένα μηδενικό αποτέλεσμα σημαίνει ότι η στήλη δεν έχει οριστεί ημερομηνία λήξης. Δεν είναι δυνατή η υποβολή ερωτημάτων στις στήλες πρωτεύοντος κλειδιού με αυτόν τον τρόπο, επειδή το TTL συνδέεται με τις τιμές και όχι με το κλειδί.
Σε μια υπάρχουσα τιμή μπορεί να δοθεί ένα νέο TTL ενημερώνοντάς την, γεγονός που μηδενίζει την αντίστροφη μέτρηση από εκείνη τη στιγμή.
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
Μια προεπιλογή σε ολόκληρο τον πίνακα αποφεύγει την επανάληψη της ρήτρας σε κάθε πρόταση.
ALTER TABLE University.Student WITH default_time_to_live = 86400;
Ακολουθούν δύο συνέπειες. Πρώτον, η TTL εφαρμόζεται ανά στήλη, όχι ανά γραμμή, επομένως η ενημέρωση μιας στήλης χωρίς TTL αφήνει αυτήν τη στήλη πίσω μετά τη λήξη των υπόλοιπων, παράγοντας μια μερικώς συμπληρωμένη γραμμή. Η ρύθμιση της TTL σε ολόκληρο το ένθετο αποφεύγει αυτό. Δεύτερον, κάθε λήξη γράφει μια ταμποναριστή στήλη, επομένως ένας πίνακας όπου εκατομμύρια γραμμές λήγουν μαζί θα επιβραδύνει τις αναγνώσεις μέχρι να τις διαγράψει η συμπύκνωση. Η χρήση του TimeWindowCompactionStrategy για τέτοιους πίνακες επιτρέπει την απόρριψη ολόκληρων SSTables ταυτόχρονα αντί για συμπύκνωση γραμμής προς γραμμή.
Η λήξη μπορεί επίσης να εφαρμοστεί σε στοιχεία μέσα σε μια συλλογή, η οποία καλύπτεται από το Cassandra συλλογές tutorial.



