Cassandra TTL & Cassandra Τύποι δεδομένων CQL (Παράδειγμα)

⚡ Έξυπνη Σύνοψη

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

  • 🔤 Οικογένειες τύπων: Η CQL ομαδοποιεί τους τύπους σε κατηγορίες κειμένου, αριθμών, ημερομηνίας και ώρας, αναγνωριστικού και συλλογής.
  • 🔢 Αριθμητική επιλογή: Οι τιμές από tinyint έως varint καλύπτουν κάθε ακέραιο πλάτος, ενώ οι τιμές από δεκαδικό διατηρούν την ακριβή ακρίβεια για τα χρήματα.
  • 🆔 UUID έναντι TimeUUID: Το timeuuid ενσωματώνει μια χρονική σήμανση και ταξινομεί χρονολογικά, ώστε να ταιριάζει σε στήλες ομαδοποίησης με χρονική σειρά.
  • Βασικά στοιχεία TTL: Μια τιμή ttl σε δευτερόλεπτα που ορίζεται κατά την εισαγωγή διαγράφει αυτόματα τα δεδομένα μόλις παρέλθουν.
  • 🪦 Συμπεριφορά Λήξης: Τα δεδομένα που έχουν λήξει γίνονται άχρηστα και αφαιρούνται φυσικά μόνο μετά τη συμπύκνωση.
  • 🧊 Κατεψυγμένα είδη: Η σήμανση μιας συλλογής ή πλειάδας ως κατεψυγμένης (frozen) την αποθηκεύει ως μία αμετάβλητη τιμή που πρέπει να αντικατασταθεί ολόκληρη.

Cassandra Τύποι δεδομένων TTL CQL

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 δευτερόλεπτα.

Cassandra TTL με χρήση αυτόματης λήξης δεδομένων

INSERT INTO University.Student (rollno, name, dept, semester)
VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;

Εδώ είναι το στιγμιότυπο όπου τα δεδομένα λήγουν αυτόματα μετά από 100 δευτερόλεπτα και τα δεδομένα αφαιρούνται αυτόματα.

Cassandra TTL με χρήση αυτόματης λήξης δεδομένων

Έλεγχος και Αλλαγή 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.

Συχνές Ερωτήσεις

Όχι. Το TTL προσκολλάται σε τιμές που δεν είναι κλειδιά. Μια γραμμή εξαφανίζεται μόνο όταν λήξει κάθε στήλη που δεν είναι κλειδιά, επομένως ο ορισμός του TTL σε ολόκληρο το ένθετο είναι η αξιόπιστη προσέγγιση.

Το ανώτατο όριο είναι 630,720,000 δευτερόλεπτα, είκοσι χρόνια. Τιμές που υπερβαίνουν αυτό το όριο απορρίπτονται, επομένως η διατήρηση μεγαλύτερης διάρκειας πρέπει να διεκπεραιωθεί από μια εργασία καθαρισμού σε επίπεδο εφαρμογής.

Παγώστε το όταν ολόκληρη η τιμή γράφεται πάντα μαζί ή όταν αποτελεί μέρος ενός πρωτεύοντος κλειδιού. Μια παγωμένη συλλογή δεν μπορεί να έχει ενημερωμένα μεμονωμένα στοιχεία.

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

Μπορεί να μετατρέψει μια πολιτική διατήρησης σε τιμές TTL και να προτείνει μια στρατηγική συμπύκνωσης. Επιβεβαιώστε πρώτα την νόμιμη περίοδο διατήρησης, καθώς τα δεδομένα που έχουν λήξει δεν μπορούν να ανακτηθούν.

Συνοψίστε αυτήν την ανάρτηση με: