Δημιουργία και απόθεση INDEX μέσα Cassandra

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

Δημιουργία και απόθεση ευρετηρίου σε Cassandra Ενεργοποιεί το φιλτράρισμα σε στήλες που δεν αποτελούν μέρος του πρωτεύοντος κλειδιού. Αυτή η σελίδα καλύπτει τις εντολές CREATE INDEX και DROP INDEX, τους κανόνες ονομασίας, τους διαθέσιμους τύπους ευρετηρίου και τις περιπτώσεις όπου ένα ευρετήριο είναι η λανθασμένη απάντηση.

  • 🔎 Γιατί Ευρετήριο: Χωρίς ευρετήριο, μια ρήτρα WHERE μπορεί να αναφέρεται μόνο σε στήλες πρωτεύοντος κλειδιού.
  • 🏷️ Κανόνας ονομασίας: Ένα ανώνυμο ευρετήριο δημιουργείται ως TableName_ColumnName_idx και πρέπει να παραλειφθεί με αυτό το όνομα.
  • 🔁 Αυτόματη Συντήρηση: Οι υπάρχουσες γραμμές καταχωρούνται στο ευρετήριο κατά τη δημιουργία και οι νέες γραμμές καταχωρούνται στο ευρετήριο κατά την εγγραφή χωρίς περαιτέρω ενέργεια.
  • 🚫 Περιορισμοί: Οι στήλες πρωτεύοντος κλειδιού έχουν ήδη καταχωρηθεί στο ευρετήριο, επομένως ένα δευτερεύον ευρετήριο σε αυτές απορρίπτεται.
  • 📉 Θέματα Πληθικότητας: Οι στήλες με πολύ υψηλή ή πολύ χαμηλή πληθικότητα καθιστούν έναν δείκτη αργό ή άχρηστο.
  • 🧱 Καλύτερη εναλλακτική: Ένας πίνακας ερωτημάτων που έχει δημιουργηθεί για συγκεκριμένο σκοπό συνήθως έχει καλύτερες επιδόσεις από ένα δευτερεύον ευρετήριο σε κλίμακα.

Δημιουργία και απόθεση ευρετηρίου σε Cassandra

Cassandra Δημιουργία ευρετηρίου

Η εντολή «Δημιουργία ευρετηρίου» δημιουργεί ένα ευρετήριο στη στήλη που καθορίζεται από τον χρήστη. Εάν τα δεδομένα υπάρχουν ήδη για τη στήλη που θέλετε να δημιουργήσετε ευρετήριο, Cassandra δημιουργεί ευρετήρια στα δεδομένα κατά την εκτέλεση της δήλωσης «δημιουργία ευρετηρίου».

  • Αφού δημιουργήσετε ένα ευρετήριο, Cassandra ευρετηριάζει αυτόματα νέα δεδομένα όταν εισάγονται δεδομένα.
  • Το ευρετήριο δεν μπορεί να δημιουργηθεί σε πρωτεύον κλειδί, καθώς ένα πρωτεύον κλειδί έχει ήδη ευρετηριαστεί.
  • Υποστηρίζονται ευρετήρια σε στήλες συλλογής, χρησιμοποιώντας τη φόρμα ΚΛΕΙΔΙΑ, ΤΙΜΕΣ ή ΕΙΣΑΓΩΓΕΣ ανάλογα με το τι πρέπει να αναζητηθεί.
  • Χωρίς ευρετηρίαση στη στήλη, Cassandra Δεν είναι δυνατό το φιλτράρισμα αυτής της στήλης εκτός εάν είναι πρωτεύον κλειδί.

Γι' αυτό, για το φιλτράρισμα στηλών σε Cassandra, πρέπει να δημιουργηθούν ευρετήρια.

Σύνταξη

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Παράδειγμα

Εδώ είναι το στιγμιότυπο όπου επιχειρήθηκε να φιλτράρει τη στήλη "dept" χωρίς να δημιουργηθεί το ευρετήριο. Σε απάντηση, το σφάλμα επιστράφηκε.

Cassandra Δημιουργία ευρετηρίου

Εδώ είναι το στιγμιότυπο όπου δημιουργείται ευρετήριο στη στήλη τμήματος.

Cassandra Δημιουργία ευρετηρίου

CREATE INDEX DeptIndex ON University.Student (dept);

Εδώ είναι το στιγμιότυπο όπου θα φιλτραριστεί επιτυχώς η στήλη 'dept'.

Cassandra Δημιουργία ευρετηρίου

SELECT * FROM University.Student WHERE dept = 'CS';

Το όνομα του ευρετηρίου είναι προαιρετικό. Η παράλειψή του επιτρέπει Cassandra δημιουργήστε ένα αυτόματα, κάτι που έχει σημασία όταν ο δείκτης πρέπει αργότερα να αφαιρεθεί.

CREATE INDEX IF NOT EXISTS ON University.Student (dept);

Cassandra Απόθεση ευρετηρίου

Η εντολή "Drop index" απορρίπτει το καθορισμένο ευρετήριο. Εάν το όνομα ευρετηρίου δεν δόθηκε κατά τη δημιουργία ευρετηρίου, τότε το όνομα ευρετηρίου είναι TableName_ColumnName_idx.

  • Εάν το ευρετήριο δεν υπάρχει, θα επιστρέψει ένα σφάλμα εκτός και αν χρησιμοποιηθεί IF EXISTS που θα επιστρέψει no-op.
  • Πρέπει να καθορίσετε το όνομα του χώρου κλειδιών με το όνομα του ευρετηρίου, διαφορετικά το ευρετήριο θα αναζητηθεί στον τρέχοντα χώρο κλειδιών.

Σύνταξη

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Παράδειγμα

Εδώ είναι το στιγμιότυπο της εκτελεσθείσας εντολής 'Drop index' που ρίχνει το ευρετήριο DeptIndex.

Cassandra Απόθεση ευρετηρίου

DROP INDEX IF EXISTS University.DeptIndex;

Μετά την επιτυχή εκτέλεση της εντολής, το DeptIndex θα απορριφθεί από τον χώρο κλειδιών. Τώρα τα δεδομένα δεν μπορούν να φιλτραριστούν από το τμήμα στήλης.

Για να επιβεβαιώσετε ποιοι δείκτες υπάρχουν πριν από την απόθεσηping πρώτον, περιγράψτε τον πίνακα και διαβάστε τους ορισμούς ευρετηρίου στο κάτω μέρος της εξόδου.

DESCRIBE TABLE University.Student;

Τύποι Δεικτών σε Cassandra

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

Χαρακτηριστικά Πώς λειτουργεί καλυτερα for
Δευτερεύων δείκτης Κάθε κόμβος καταχωρεί μόνο τα δικά του τοπικά δεδομένα, επομένως ένα ερώτημα χωρίς κλειδί διαμέρισης πρέπει να επικοινωνήσει με κάθε κόμβο. Ερωτήθηκαν μέτριες στήλες πληθικότητας μαζί με ένα κλειδί διαμέρισης.
Δείκτης SASI Ένα συνημμένο ευρετήριο που υποστηρίζει αντιστοίχιση προθέματος και επιθήματος LIKE καθώς και αριθμητικά εύρη. Μοτίβα αναζήτησης κειμένου. Εξακολουθεί να χαρακτηρίζεται ως πειραματικό, επομένως δοκιμάστε το πριν από τη χρήση παραγωγής.
Δείκτης Συνδεδεμένου Αποθηκευτικού Χώρου (SAI) Εισήχθη στο Cassandra 5.0, μοιράζοντας μία δομή ευρετηρίου σε όλες τις στήλες με χαμηλότερο κόστος εγγραφής. Η σύγχρονη αντικατάσταση και των δύο παραπάνω Cassandra 5 συστάδες.

Η δημιουργία ευρετηρίου για μια στήλη συλλογής χρησιμοποιεί έναν τροποποιητή που δηλώνει ποιο μέρος θα καταχωρηθεί στο ευρετήριο.

CREATE INDEX ON University.Teacher (VALUES(Email));
CREATE INDEX ON University.Course (KEYS(prereq));
CREATE INDEX ON University.Course (ENTRIES(prereq));

Η συνάρτηση VALUES αναζητά τα στοιχεία ενός συνόλου ή λίστας, η συνάρτηση KEYS αναζητά κλειδιά αντιστοίχισης και η συνάρτηση ENTRIES αντιστοιχίζει ένα ζεύγος κλειδιού και τιμής. Η ευρετηρίαση συλλογών καλύπτεται περαιτέρω στο Cassandra συλλογές tutorial.

Πότε δεν πρέπει να χρησιμοποιείτε ευρετήριο σε Cassandra

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

  • Πολύ υψηλή πληθικότητα. Η δημιουργία ευρετηρίου για κάτι σχεδόν μοναδικό, όπως μια διεύθυνση ηλεκτρονικού ταχυδρομείου, σημαίνει ότι σχεδόν κάθε διαμέρισμα περιέχει μία αντίστοιχη γραμμή, επομένως το ερώτημα εξαπλώνεται σε ολόκληρο το σύμπλεγμα για να επιστρέψει μία μόνο εγγραφή.
  • Πολύ χαμηλή πληθικότητα. Η ευρετηρίαση μιας σημαίας δύο τιμών, όπως ενεργή ή ανενεργή, παράγει τεράστια διαμερίσματα ευρετηρίου και η ανάγνωση μίας επιστρέφει το μισό του πίνακα.
  • Στήλες που ενημερώνονται συχνά. Κάθε αλλαγή γράφει μια καταχώρηση ευρετηρίου και μια επιγραφή για την παλιά, επομένως η συσσώρευση επιγραφών υποβαθμίζει τις αναγνώσεις με την πάροδο του χρόνου.
  • Ερωτήματα χωρίς κλειδί διαμέρισης. Χωρίς ένα, ο συντονιστής πρέπει να επικοινωνήσει με κάθε κόμβο και να συγχωνεύσει τα αποτελέσματα, κάτι που δεν κλιμακώνεται καθώς προστίθενται κόμβοι.

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

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

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

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

Όχι. Οι υπάρχουσες γραμμές καταχωρούνται στο παρασκήνιο και ο πίνακας παραμένει διαθέσιμος. Οι μεγάλοι πίνακες απαιτούν χρόνο και η πρόοδος μπορεί να παρακολουθηθεί με το nodetool compactionstats.

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

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

Συχνά, επειδή προκαλεί την εκτέλεση ενός απορριφθέντος ερωτήματος. Αντιμετωπίστε αυτήν την πρόταση ως σήμα ότι πραγματικά απαιτείται είτε ένας δείκτης είτε ένας νέος πίνακας ερωτήματος.

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