Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Πριν από τρία χρόνια ο Viktor Tarnavsky και ο Alexey Milovidov από τη Yandex στη σκηνή HighLoad++ είπα, το οποίο το ClickHouse είναι καλό και πώς δεν επιβραδύνεται. Και στο επόμενο στάδιο ήταν Αλεξάντερ Ζάιτσεφ с κανω ΑΝΑΦΟΡΑ σχετικά με τη μετακόμιση σε Κάντε κλικ στο σπίτι από άλλο αναλυτικό ΣΔΒΔ και με το συμπέρασμα ότι Κάντε κλικ στο σπίτι, φυσικά, καλό, αλλά όχι πολύ βολικό. Όταν το 2016 η εταιρεία LifeStreet, όπου δούλευε τότε ο Αλέξανδρος, μετέφρασε το αναλυτικό σύστημα πολλαπλών πεταμπάιτ σε Κάντε κλικ στο σπίτι, ήταν ένας συναρπαστικός «δρόμος με κίτρινα τούβλα», γεμάτος άγνωστους κινδύνους - Κάντε κλικ στο σπίτι τότε έμοιαζε με ναρκοπέδιο.

Τρία χρόνια μετά Κάντε κλικ στο σπίτι έγινε πολύ καλύτερος - κατά τη διάρκεια αυτής της περιόδου, ο Αλέξανδρος ίδρυσε την εταιρεία Altinity, η οποία όχι μόνο βοηθά στη μετακόμιση Κάντε κλικ στο σπίτι δεκάδες έργα, αλλά και βελτιώνει το ίδιο το προϊόν μαζί με συναδέλφους της Yandex. Τώρα Κάντε κλικ στο σπίτι ακόμα όχι ένας ξένοιαστος περίπατος, αλλά όχι πια ένα ναρκοπέδιο.

Ο Alexander ασχολείται με κατανεμημένα συστήματα από το 2003, αναπτύσσοντας μεγάλα έργα στο MySQL, Oracle и Βέρτικα. Στο τελευταίο HighLoad++ 2019 Αλέξανδρος, ένας από τους πρωτοπόρους της χρήσης Κάντε κλικ στο σπίτι, είπε τι είναι τώρα αυτό το DBMS. Θα μάθουμε για τα κύρια χαρακτηριστικά Κάντε κλικ στο σπίτι: πώς διαφέρει από άλλα συστήματα και σε ποιες περιπτώσεις είναι πιο αποτελεσματική η χρήση του. Χρησιμοποιώντας παραδείγματα, ας εξετάσουμε φρέσκες και αποδεδειγμένες πρακτικές για συστήματα οικοδόμησης που βασίζονται σε Κάντε κλικ στο σπίτι.


Αναδρομική: τι έγινε πριν από 3 χρόνια

Πριν από τρία χρόνια μεταφέραμε την εταιρεία LifeStreet επί Κάντε κλικ στο σπίτι από διαφορετική βάση δεδομένων αναλυτικών στοιχείων και η μετεγκατάσταση αναλυτικών στοιχείων δικτύου διαφημίσεων φαινόταν ως εξής:

  • Ιούνιος 2016. Σε Ανοιχτή πηγή εμφανίστηκε Κάντε κλικ στο σπίτι και ξεκινήσαμε το έργο μας.
  • Αύγουστος. απόδειξη της ιδέας: μεγάλο δίκτυο διαφημίσεων, υποδομή και 200-300 terabyte δεδομένων.
  • Οκτώβριος. Πρώτα δεδομένα παραγωγής.
  • Δεκέμβριος. Πλήρες φορτίο προϊόντος - 10-50 δισεκατομμύρια συμβάντα την ημέρα.
  • Ιούνιος 2017. Επιτυχής μετεγκατάσταση χρηστών σε Κάντε κλικ στο σπίτι, 2,5 petabytes δεδομένων σε ένα σύμπλεγμα 60 διακομιστών.

Καθώς προχωρούσε η μετανάστευση, η κατανόηση μεγάλωνε Κάντε κλικ στο σπίτι είναι ένα καλό σύστημα με το οποίο είναι ευχάριστο να δουλεύεις, αλλά αυτό είναι ένα εσωτερικό έργο της Yandex. Επομένως, υπάρχουν αποχρώσεις: Η Yandex θα ασχοληθεί πρώτα με τους δικούς της εσωτερικούς πελάτες και μόνο στη συνέχεια με την κοινότητα και τις ανάγκες των εξωτερικών χρηστών, ενώ το ClickHouse δεν έφτασε στο εταιρικό επίπεδο σε πολλούς λειτουργικούς τομείς τότε. Έτσι, τον Μάρτιο του 2017, ιδρύσαμε την Altinity για να φτιάξουμε Κάντε κλικ στο σπίτι ακόμα πιο γρήγορο και πιο βολικό όχι μόνο για το Yandex, αλλά και για άλλους χρήστες. Και τώρα εμείς:

  • Εκπαιδευόμαστε και βοηθούμε στη δημιουργία λύσεων με βάση Κάντε κλικ στο σπίτι έτσι ώστε οι πελάτες να μην γεμίζουν ανωμαλίες και για να λειτουργήσει τελικά η λύση.
  • Παρέχουμε υποστήριξη 24/7 Κάντε κλικ στο σπίτι- εγκαταστάσεις·
  • Αναπτύσσουμε τα δικά μας έργα οικοσυστήματος.
  • Δέσμευση ενεργά στον εαυτό μου Κάντε κλικ στο σπίτι, απαντώντας σε αιτήματα χρηστών που θέλουν να δουν ορισμένες λειτουργίες.

Και φυσικά, βοηθάμε στη μετακίνηση προς Κάντε κλικ στο σπίτι с MySQL, Βέρτικα, μαντείο, Greenplum, Redshift και άλλα συστήματα. Έχουμε συμμετάσχει σε μια μεγάλη ποικιλία από μετεγκαταστάσεις και ήταν όλες επιτυχημένες.

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Γιατί ακόμη και να μετακομίσει σε Κάντε κλικ στο σπίτι

Δεν επιβραδύνει! Αυτός είναι ο κύριος λόγος. Κάντε κλικ στο σπίτι - πολύ γρήγορη βάση δεδομένων για διαφορετικά σενάρια:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Τυχαία αποσπάσματα από άτομα που συνεργάζονται με Κάντε κλικ στο σπίτι.

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

Φορητότητα. Δεν υπάρχει προσκόλληση σε ένα πράγμα. Για παράδειγμα, με Amazon RedShift δύσκολο να μετακινηθείς κάπου. ΕΝΑ Κάντε κλικ στο σπίτι μπορείτε να το βάλετε στον φορητό υπολογιστή, στο διακομιστή σας, να το αναπτύξετε στο cloud, να μεταβείτε στο Kubernetes - δεν υπάρχουν περιορισμοί στη λειτουργία της υποδομής. Αυτό είναι βολικό για όλους και αυτό είναι ένα μεγάλο πλεονέκτημα για το οποίο πολλές άλλες παρόμοιες βάσεις δεδομένων δεν μπορούν να καυχηθούν.

Ευκαμψία. Κάντε κλικ στο σπίτι δεν σταματά σε ένα πράγμα, για παράδειγμα, το Yandex.Metrica, αλλά αναπτύσσεται και χρησιμοποιείται σε όλο και περισσότερα διαφορετικά έργα και βιομηχανίες. Μπορεί να επεκταθεί προσθέτοντας νέες δυνατότητες για την επίλυση νέων προβλημάτων. Για παράδειγμα, πιστεύεται ότι η αποθήκευση αρχείων καταγραφής σε μια βάση δεδομένων είναι κακή συμπεριφορά, γι 'αυτό κατέληξαν σε Ελαστική αναζήτηση. Αλλά χάρη στην ευελιξία Κάντε κλικ στο σπίτι, μπορείτε επίσης να αποθηκεύσετε αρχεία καταγραφής σε αυτό, και συχνά είναι ακόμα καλύτερο από το in Ελαστική αναζήτηση - στις Κάντε κλικ στο σπίτι απαιτεί 10 φορές λιγότερο σίδηρο.

Ελεύθερος Open Source. Δεν χρειάζεται να πληρώσετε για τίποτα. Δεν χρειάζεται να διαπραγματευτείτε την άδεια για να τοποθετήσετε το σύστημα στον φορητό υπολογιστή ή τον διακομιστή σας. Δεν υπάρχουν κρυφές χρεώσεις. Ταυτόχρονα, καμία άλλη τεχνολογία βάσης δεδομένων ανοιχτού κώδικα δεν μπορεί να ανταγωνιστεί σε ταχύτητα Κάντε κλικ στο σπίτι. MySQL, MariaDB, Greenplum - όλα είναι πολύ πιο αργά.

Κοινότητα, οδήγηση και διασκέδαση. Έχουν Κάντε κλικ στο σπίτι μεγάλη κοινότητα: συναντήσεις, συνομιλίες και ο Alexey Milovidov, ο οποίος μας χρεώνει όλους με την ενέργεια και την αισιοδοξία του.

Μετακίνηση στο ClickHouse

Για μετάβαση σε Κάντε κλικ στο σπίτι με κάτι, χρειάζεσαι μόνο τρία πράγματα:

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

Το πρόβλημα της μετακίνησης

Υπάρχει μόνο ένα «αλλά»: αν μετακομίσετε σε Κάντε κλικ στο σπίτι με κάτι άλλο, συνήθως κάτι πάει στραβά. Έχουμε συνηθίσει σε κάποιες πρακτικές και πράγματα που λειτουργούν στην αγαπημένη μας βάση δεδομένων. Για παράδειγμα, όποιος συνεργάζεται με SQL-databases, θεωρεί υποχρεωτικό το ακόλουθο σύνολο λειτουργιών:

  • συναλλαγές?
  • περιορισμοί?
  • συνοχή;
  • ευρετήρια;
  • ΕΝΗΜΕΡΩΣΗ/ΔΙΑΓΡΑΦΗ;
  • NULL;
  • χιλιοστά του δευτερολέπτου?
  • αυτόματες μετατροπές τύπου?
  • πολλαπλές ενώσεις?
  • αυθαίρετα χωρίσματα?
  • εργαλεία διαχείρισης συστάδων.

Η πρόσληψη είναι υποχρεωτική, αλλά πριν από τρία χρόνια στο Κάντε κλικ στο σπίτι δεν υπήρχε κανένα από αυτά τα χαρακτηριστικά! Τώρα απομένει λιγότερο από το ήμισυ των μη πραγματοποιηθέντων: συναλλαγές, περιορισμοί, Συνέπεια, χιλιοστά του δευτερολέπτου και χύτευση τύπου.

Και το κυριότερο είναι ότι μέσα Κάντε κλικ στο σπίτι ορισμένες τυπικές πρακτικές και προσεγγίσεις δεν λειτουργούν ή δεν λειτουργούν με τον τρόπο που έχουμε συνηθίσει. Όλα όσα εμφανίζονται σε Κάντε κλικ στο σπίτι, αντιστοιχεί στην "κλικ σπίτι τρόπο», δηλ. οι συναρτήσεις είναι διαφορετικές από άλλες DB. Για παράδειγμα:

  • Τα ευρετήρια δεν επιλέγονται, αλλά παραλείπονται.
  • ΕΝΗΜΕΡΩΣΗ/ΔΙΑΓΡΑΦΗ όχι σύγχρονη, αλλά ασύγχρονη.
  • Υπάρχουν πολλές συνδέσεις, αλλά δεν υπάρχει πρόγραμμα σχεδιασμού ερωτημάτων. Ο τρόπος με τον οποίο εκτελούνται στη συνέχεια δεν είναι γενικά πολύ σαφής σε άτομα από τον κόσμο της βάσης δεδομένων.

Σενάρια ClickHouse

Το 1960, Αμερικανός μαθηματικός ουγγρικής καταγωγής WignerEP έγραψε ένα άρθροΗ παράλογη αποτελεσματικότητα των μαθηματικών στις φυσικές επιστήμες"("Η ακατανόητη αποτελεσματικότητα των μαθηματικών στις φυσικές επιστήμες") ότι ο κόσμος γύρω μας περιγράφεται για κάποιο λόγο καλά από μαθηματικούς νόμους. Τα μαθηματικά είναι μια αφηρημένη επιστήμη και οι φυσικοί νόμοι που εκφράζονται σε μαθηματική μορφή δεν είναι ασήμαντοι, και WignerEP τόνισε ότι αυτό είναι πολύ περίεργο.

Από τη δική μου άποψη, Κάντε κλικ στο σπίτι - το ίδιο παράξενο. Για να επαναδιατυπώσουμε το Wigner, μπορούμε να πούμε το εξής: εκπληκτική είναι η ασύλληπτη αποτελεσματικότητα Κάντε κλικ στο σπίτι σε μεγάλη ποικιλία αναλυτικών εφαρμογών!

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Για παράδειγμα, ας πάρουμε Αποθήκη δεδομένων σε πραγματικό χρόνο, στο οποίο τα δεδομένα φορτώνονται σχεδόν συνεχώς. Θέλουμε να δεχόμαστε αιτήματα από αυτόν με δεύτερη καθυστέρηση. Παρακαλώ χρησιμοποιήστε Κάντε κλικ στο σπίτιγιατί σχεδιάστηκε για αυτό το σενάριο. Κάντε κλικ στο σπίτι έτσι χρησιμοποιείται όχι μόνο στον Ιστό, αλλά και στο μάρκετινγκ και στην οικονομική ανάλυση, AdTech, καθώς και σε Ανίχνευση απάτηςn. ΣΕ Αποθήκη δεδομένων σε πραγματικό χρόνο χρησιμοποιείται ένα σύνθετο δομημένο σχήμα όπως "αστέρι" ή "νιφάδα χιονιού", πολλοί πίνακες με Ενώνω (μερικές φορές πολλαπλά), και τα δεδομένα συνήθως αποθηκεύονται και αλλάζουν σε ορισμένα συστήματα.

Ας πάρουμε ένα άλλο σενάριο - Χρονική σειρά: συσκευές παρακολούθησης, δίκτυα, στατιστικά χρήσης, internet of things. Εδώ συναντάμε αρκετά απλά γεγονότα που έχουν διαταχθεί εγκαίρως. Κάντε κλικ στο σπίτι δεν αναπτύχθηκε αρχικά για αυτό, αλλά έχει αποδειχθεί καλά, έτσι οι μεγάλες εταιρείες χρησιμοποιούν Κάντε κλικ στο σπίτι ως αποθήκη για την παρακολούθηση πληροφοριών. Για να δούμε αν ταιριάζει Κάντε κλικ στο σπίτι για τις χρονοσειρές, κάναμε ένα σημείο αναφοράς με βάση την προσέγγιση και τα αποτελέσματα InfluxDB и TimescaleDB — εξειδικευμένο χρονική σειρά βάσεις δεδομένων. Αποκαλύφθηκε ότιΌτι Κάντε κλικ στο σπίτι, ακόμη και χωρίς βελτιστοποίηση για τέτοιες εργασίες, κερδίζει επίσης σε ξένο πεδίο:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

В χρονική σειρά συνήθως χρησιμοποιείται ένας στενός πίνακας - αρκετές μικρές στήλες. Πολλά δεδομένα μπορούν να προέρχονται από την παρακολούθηση - εκατομμύρια εγγραφές ανά δευτερόλεπτο - και συνήθως έρχονται σε μικρά ένθετα (σε πραγματικό χρόνο ροή). Επομένως, χρειαζόμαστε ένα διαφορετικό σενάριο εισαγωγής και τα ίδια τα ερωτήματα - με κάποιες δικές τους ιδιαιτερότητες.

Διαχείριση αρχείων καταγραφής. Η συλλογή αρχείων καταγραφής στη βάση δεδομένων είναι συνήθως κακή, αλλά μέσα Κάντε κλικ στο σπίτι Αυτό μπορεί να γίνει με ορισμένα σχόλια όπως περιγράφεται παραπάνω. Πολλές εταιρείες χρησιμοποιούν Κάντε κλικ στο σπίτι μόνο για αυτό. Σε αυτήν την περίπτωση, χρησιμοποιείται ένας επίπεδος πλατύς πίνακας, όπου αποθηκεύουμε ολόκληρους κορμούς (για παράδειγμα, στη φόρμα JSON), ή κόψτε σε κομμάτια. Τα δεδομένα συνήθως φορτώνονται σε μεγάλες παρτίδες (αρχεία) και αναζητούμε κάποιο πεδίο.

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

Χρονική σειρά

Αυτό είναι προς το παρόν το κύριο σενάριο για το οποίο Κάντε κλικ στο σπίτι θεωρείται η τυπική λύση. Χρονική σειρά είναι ένα σύνολο γεγονότων με χρονική σειρά που αντιπροσωπεύουν αλλαγές σε κάποια διαδικασία με την πάροδο του χρόνου. Για παράδειγμα, μπορεί να είναι ο καρδιακός ρυθμός ανά ημέρα ή ο αριθμός των διεργασιών στο σύστημα. Ό,τι δίνει χρόνο με κάποιες διαστάσεις είναι χρονική σειρά:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Τα περισσότερα από αυτά τα συμβάντα προέρχονται από την παρακολούθηση. Αυτό μπορεί να είναι όχι μόνο παρακολούθηση Ιστού, αλλά και πραγματικές συσκευές: αυτοκίνητα, βιομηχανικά συστήματα, IoT, βιομηχανίες ή μη επανδρωμένα ταξί, στο πορτμπαγκάζ των οποίων ήδη βάζει η Yandex Κάντε κλικ στο σπίτι-υπηρέτης.

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

Τώρα υπάρχει μια ανάπτυξη εξειδικευμένων βάσεων δεδομένων που μετρούν χρονική σειρά. Σε σύνδεση Κινητήρες DB Κατά κάποιο τρόπο κατατάσσονται διαφορετικές βάσεις δεδομένων και μπορούν να προβληθούν ανά τύπο:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Ο ταχύτερα αναπτυσσόμενος τύπος χρονική σειράμικρό. Οι βάσεις δεδομένων γραφημάτων αυξάνονται επίσης, αλλά χρονική σειράαυξάνονται ταχύτερα τα τελευταία χρόνια. Τυπικοί εκπρόσωποι αυτής της οικογένειας βάσεων δεδομένων είναι InfluxDB, Προμηθέας, KDB, TimescaleDB (χτισμένο σε PostgreSQL), λύσεις από Amazon. Κάντε κλικ στο σπίτι και εδώ μπορεί να χρησιμοποιηθεί, και χρησιμοποιείται. Επιτρέψτε μου να σας δώσω μερικά δημόσια παραδείγματα.

Ένας από τους πρωτοπόρους είναι η εταιρεία Cloudflare (CDNπρομηθευτής). Τους παρακολουθούν CDN μέσω Κάντε κλικ στο σπίτι (DNS-αιτήσεων, HTTP- αιτήματα) με τεράστιο φορτίο - 6 εκατομμύρια συμβάντα ανά δευτερόλεπτο. Όλα περνούν Κάφκα, πηγαίνει στο Κάντε κλικ στο σπίτι, το οποίο παρέχει τη δυνατότητα να βλέπετε πίνακες εργαλείων συμβάντων σε πραγματικό χρόνο στο σύστημα.

Comcast - ένας από τους ηγέτες στις τηλεπικοινωνίες στις Ηνωμένες Πολιτείες: Διαδίκτυο, ψηφιακή τηλεόραση, τηλεφωνία. Δημιούργησαν ένα παρόμοιο σύστημα ελέγχου CDN στα πλαίσια Open Source σχέδιο Έλεγχος κυκλοφορίας Apache να δουλέψουν με τα τεράστια δεδομένα τους. Κάντε κλικ στο σπίτι χρησιμοποιείται ως backend για αναλυτικά στοιχεία.

Περόνα ενσωματωμένο Κάντε κλικ στο σπίτι μέσα σου ΜΜΜνα συνεχίσει να παρακολουθεί διαφορετικά MySQL.

Συγκεκριμένες απαιτήσεις

Οι βάσεις δεδομένων χρονοσειρών έχουν τις δικές τους συγκεκριμένες απαιτήσεις.

  • Γρήγορη εισαγωγή από πολλούς παράγοντες. Πρέπει να εισάγουμε δεδομένα από πολλές ροές πολύ γρήγορα. Κάντε κλικ στο σπίτι το κάνει καλά, γιατί έχει όλα τα ένθετα που δεν εμποδίζουν. Οποιος εισάγετε είναι ένα νέο αρχείο στο δίσκο και τα μικρά ένθετα μπορούν να αποθηκεύονται στην προσωρινή μνήμη με τον ένα ή τον άλλο τρόπο. ΣΕ Κάντε κλικ στο σπίτι Είναι προτιμότερο να εισάγετε δεδομένα σε μεγάλες παρτίδες, παρά σε μία γραμμή τη φορά.
  • Ευέλικτο κύκλωμα. Σε χρονική σειρά συνήθως δεν γνωρίζουμε πλήρως τη δομή των δεδομένων. Είναι δυνατό να κατασκευαστεί ένα σύστημα παρακολούθησης για μια συγκεκριμένη εφαρμογή, αλλά μετά είναι δύσκολο να το χρησιμοποιήσετε για άλλη εφαρμογή. Αυτό απαιτεί ένα πιο ευέλικτο σύστημα. Κάντε κλικ στο σπίτι, σας επιτρέπει να το κάνετε αυτό, παρόλο που πρόκειται για μια έντονα πληκτρολογημένη βάση.
  • Αποτελεσματική αποθήκευση και «λήθη» δεδομένων. Συνήθως σε χρονική σειρά ένας τεράστιος όγκος δεδομένων, επομένως πρέπει να αποθηκευτούν όσο το δυνατόν πιο αποτελεσματικά. Για παράδειγμα, στο InfluxDB Η καλή συμπίεση είναι το κύριο χαρακτηριστικό του. Εκτός όμως από την αποθήκευση, πρέπει επίσης να μπορείτε να «ξεχνάτε» παλιά δεδομένα και να κάνετε μερικά υποδειγματοληψία — αυτόματη καταμέτρηση αδρανών.
  • Γρήγορες ερωτήσεις για συγκεντρωτικά δεδομένα. Μερικές φορές είναι ενδιαφέρον να δούμε τα τελευταία 5 λεπτά με ακρίβεια χιλιοστών του δευτερολέπτου, αλλά σε μηνιαία δεδομένα, μπορεί να μην απαιτείται λεπτομερής ανάλυση λεπτών ή δευτερολέπτων - αρκούν τα γενικά στατιστικά στοιχεία. Η υποστήριξη αυτού του είδους είναι απαραίτητη, διαφορετικά ένα αίτημα για 3 μήνες θα εκτελείται για πολύ μεγάλο χρονικό διάστημα ακόμη και μέσα Κάντε κλικ στο σπίτι.
  • Αιτήματα όπως "τελευταίο σημείο, από». Αυτά είναι τυπικά για χρονική σειρά αιτήματα: δείτε την τελευταία μέτρηση ή την κατάσταση του συστήματος σε μια χρονική στιγμή t. Για τη βάση δεδομένων, αυτά δεν είναι πολύ ευχάριστα ερωτήματα, αλλά πρέπει επίσης να μπορούν να εκτελεστούν.
  • «κόλλημα» χρονοσειρές. Χρονική σειρά είναι μια χρονοσειρά. Εάν υπάρχουν δύο χρονοσειρές, τότε συχνά χρειάζεται να συνδεθούν και να συσχετιστούν. Δεν είναι βολικό να το κάνετε αυτό σε όλες τις βάσεις δεδομένων, ειδικά με μη ευθυγραμμισμένες χρονολογικές σειρές: εδώ είναι μερικά χρονικά σημάδια, υπάρχουν άλλα. Μπορείτε να εξετάσετε τον μέσο όρο, αλλά ξαφνικά θα υπάρχει ακόμα μια τρύπα, οπότε δεν είναι ξεκάθαρο.

Ας δούμε πώς πληρούνται αυτές οι απαιτήσεις Κάντε κλικ στο σπίτι.

Το σχέδιο

В Κάντε κλικ στο σπίτι μηχανορραφώ χρονική σειρά μπορεί να γίνει με διαφορετικούς τρόπους, ανάλογα με τον βαθμό κανονικότητας των δεδομένων. Είναι δυνατό να οικοδομήσουμε ένα σύστημα σε κανονικά δεδομένα όταν γνωρίζουμε όλες τις μετρήσεις εκ των προτέρων. Για παράδειγμα, έκανε Cloudflare με παρακολούθηση CDN είναι ένα καλά βελτιστοποιημένο σύστημα. Μπορείτε να δημιουργήσετε ένα γενικότερο σύστημα που παρακολουθεί ολόκληρη την υποδομή, διαφορετικές υπηρεσίες. Στην περίπτωση των παράτυπων δεδομένων, δεν γνωρίζουμε εκ των προτέρων τι παρακολουθούμε - και αυτή είναι ίσως η πιο συνηθισμένη περίπτωση.

τακτικά δεδομένα. Στήλες. Το σχήμα είναι απλό - στήλες με τους απαραίτητους τύπους:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Αυτός είναι ένας κανονικός πίνακας που παρακολουθεί κάποιο είδος δραστηριότητας εκκίνησης συστήματος (χρήστη, σύστημα, αδράνεια, όμορφη). Απλό και βολικό, αλλά όχι ευέλικτο. Αν θέλουμε ένα πιο ευέλικτο σχήμα, τότε μπορούμε να χρησιμοποιήσουμε πίνακες.

Ακανόνιστα δεδομένα. Πίνακες:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Δομή Ένθετα είναι δύο πίνακες: μετρήσεις.όνομα и μετρήσεις.τιμή. Εδώ μπορείτε να αποθηκεύσετε τέτοια αυθαίρετα δεδομένα παρακολούθησης όπως μια σειρά ονομάτων και μια σειρά μετρήσεων για κάθε συμβάν. Για περαιτέρω βελτιστοποίηση, μπορούν να κατασκευαστούν πολλές τέτοιες δομές αντί για μία. Για παράδειγμα, ένα για φλοτέρ-αξία, άλλο - για int-εννοείται γιατί int Θέλω να αποθηκεύω πιο αποτελεσματικά.

Αλλά μια τέτοια δομή είναι πιο δύσκολη στην πρόσβαση. Θα πρέπει να χρησιμοποιήσετε μια ειδική κατασκευή, χρησιμοποιώντας ειδικές συναρτήσεις για να βγάλετε τις τιμές πρώτα του ευρετηρίου και μετά του πίνακα:

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Αλλά εξακολουθεί να λειτουργεί αρκετά γρήγορα. Ένας άλλος τρόπος αποθήκευσης ακανόνιστων δεδομένων είναι μέσω σειρών.

Ακανόνιστα δεδομένα. Χορδές. Με αυτόν τον παραδοσιακό τρόπο, χωρίς πίνακες, τα ονόματα και οι τιμές αποθηκεύονται ταυτόχρονα. Εάν 5 μετρήσεις προέρχονται από μία συσκευή ταυτόχρονα, δημιουργούνται 000 σειρές στη βάση δεδομένων:

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

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

Ας συγκρίνουμε τρεις προσεγγίσεις:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

λεπτομέρειες

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

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

Σε μια από τις εταιρείες που χρησιμοποιεί αυτήν την προσέγγιση (για παράδειγμα, Uber), οι συστοιχίες κόβονται σε κομμάτια των 128 στοιχείων. Τα δεδομένα πολλών χιλιάδων μετρήσεων με όγκο δεδομένων 200 TB / ημέρα δεν αποθηκεύονται σε μία συστοιχία, αλλά σε 10 ή 30 συστοιχίες με ειδική λογική αποθήκευσης.

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

υβριδικό σύστημα

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

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Όταν επικολληθεί Κάντε κλικ στο σπίτι θα τα μετρήσει αυτόματα. Με αυτόν τον τρόπο μπορείτε να συνδυάσετε τις επιχειρήσεις με την ευχαρίστηση: το σχέδιο είναι ευέλικτο και γενικό, αλλά βγάλαμε τις στήλες που χρησιμοποιούνται πιο συχνά. Σημειώνω ότι αυτό δεν απαιτούσε αλλαγή του ένθετου και ETL, το οποίο συνεχίζει να εισάγει πίνακες στον πίνακα. Μόλις το κάναμε ΠΙΝΑΚΑΣ ΕΝΑΛΛΑΓΗΣ, πρόσθεσε μερικά ηχεία και έλαβε ένα υβριδικό και πιο γρήγορο σχήμα που μπορείτε να αρχίσετε να χρησιμοποιείτε αμέσως.

Κωδικοποιητές και συμπίεση

Για χρονική σειρά Είναι σημαντικό πόσο καλά συσκευάζετε τα δεδομένα, γιατί η σειρά πληροφοριών μπορεί να είναι πολύ μεγάλη. ΣΕ Κάντε κλικ στο σπίτι υπάρχει ένα σύνολο εργαλείων για να επιτευχθεί το αποτέλεσμα της συμπίεσης 1:10, 1:20, και μερικές φορές περισσότερο. Αυτό σημαίνει ότι 1 TB ασυμπίεστων δεδομένων στο δίσκο καταλαμβάνει 50-100 GB. Το μικρότερο μέγεθος είναι καλό, τα δεδομένα διαβάζονται και υποβάλλονται σε επεξεργασία πιο γρήγορα.

Για να επιτευχθεί υψηλό επίπεδο συμπίεσης, Κάντε κλικ στο σπίτι υποστηρίζει τους ακόλουθους κωδικοποιητές:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Παράδειγμα πίνακα:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Εδώ ορίζουμε τον κωδικοποιητή DoubleDelta στη μια περίπτωση, στη δεύτερη Γορίλλας, και φροντίστε να προσθέσετε περισσότερα LZ4 συμπίεση. Ως αποτέλεσμα, το μέγεθος των δεδομένων στο δίσκο μειώνεται σημαντικά:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Αυτό δείχνει πόσο χώρο καταλαμβάνουν τα ίδια δεδομένα, αλλά χρησιμοποιώντας διαφορετικούς κωδικοποιητές και συμπιέσεις:

  • σε ένα αρχείο GZIP στο δίσκο.
  • στο ClickHouse χωρίς κωδικοποιητές, αλλά με συμπίεση ZSTD.
  • στο ClickHouse με κωδικοποιητές LZ4 και ZSTD και συμπίεση.

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

Το μέγεθος έχει σημασία

Όχι λιγότερο σημαντικό выбрать σωστός τύπος δεδομένων:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Σε όλα τα παραπάνω παραδείγματα που χρησιμοποίησα Float64. Αν όμως επιλέξαμε Float32τότε αυτό θα ήταν ακόμα καλύτερο. Αυτό το έδειξαν καλά τα παιδιά από την Περκόνα στο άρθρο στον παραπάνω σύνδεσμο. Είναι σημαντικό να χρησιμοποιείτε τον πιο συμπαγή τύπο που ταιριάζει στην εργασία: ακόμη λιγότερο για μέγεθος στο δίσκο παρά για ταχύτητα ερωτήματος. Κάντε κλικ στο σπίτι πολύ ευαίσθητο σε αυτό.

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

Συνάθροιση και Υλοποιημένες προβολές

Η συγκέντρωση και οι υλοποιημένες προβολές σάς επιτρέπουν να δημιουργείτε συγκεντρωτικά στοιχεία για διαφορετικές περιπτώσεις:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

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

TTL - «Ξέχνα» παλιά δεδομένα

Πώς να «ξεχάσετε» δεδομένα που δεν χρειάζονται πλέον; Κάντε κλικ στο σπίτι ξέρει πώς να το κάνει. Κατά τη δημιουργία πινάκων, μπορείτε να καθορίσετε TTL εκφράσεις: για παράδειγμα, ότι αποθηκεύουμε δεδομένα λεπτών για μία ημέρα, ημερήσια δεδομένα για 30 ημέρες και ποτέ δεν αγγίζουμε εβδομαδιαία ή μηνιαία δεδομένα:

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

Πολυεπίπεδη - Διαμερισμός δεδομένων σε δίσκους

Αναπτύσσοντας αυτήν την ιδέα, τα δεδομένα μπορούν να αποθηκευτούν σε Κάντε κλικ στο σπίτι σε διάφορα μέρη. Ας υποθέσουμε ότι θέλουμε να αποθηκεύσουμε ζεστά δεδομένα για την τελευταία εβδομάδα σε ένα πολύ γρήγορο τοπικό SSD, και προσθέτουμε περισσότερα ιστορικά δεδομένα σε άλλο μέρος. ΣΕ Κάντε κλικ στο σπίτι τώρα είναι δυνατό:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Μπορείτε να διαμορφώσετε την πολιτική διατήρησης (πολιτική αποθήκευσης) Ετσι Κάντε κλικ στο σπίτι θα μεταφέρει αυτόματα δεδομένα σε άλλο χώρο αποθήκευσης όταν πληρούνται ορισμένες προϋποθέσεις.

Αλλά δεν είναι μόνο αυτό. Στο επίπεδο ενός συγκεκριμένου πίνακα, μπορείτε να ορίσετε κανόνες για το πότε ακριβώς τα δεδομένα μεταφέρονται σε ψυχρή αποθήκευση. Για παράδειγμα, δεδομένα 7 ημερών βρίσκονται σε έναν πολύ γρήγορο δίσκο και ό,τι είναι παλαιότερο μεταφέρεται σε έναν αργό δίσκο. Αυτό είναι καλό γιατί επιτρέπει στο σύστημα να διατηρεί τη μέγιστη απόδοση, ενώ ελέγχει το κόστος και δεν ξοδεύει χρήματα σε ψυχρά δεδομένα:

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Μοναδικά χαρακτηριστικά Κάντε κλικ στο σπίτι

Σχεδόν τα πάντα μέσα Κάντε κλικ στο σπίτι υπάρχουν τέτοια "highlights", αλλά ισοπεδώνονται από το αποκλειστικό - αυτό που δεν υπάρχει σε άλλες βάσεις δεδομένων. Για παράδειγμα, εδώ είναι μερικά από τα μοναδικά χαρακτηριστικά Κάντε κλικ στο σπίτι:

  • Πίνακες. Σε Κάντε κλικ στο σπίτι πολύ καλή υποστήριξη για πίνακες, καθώς και δυνατότητα εκτέλεσης πολύπλοκων υπολογισμών σε αυτούς.
  • Συνάθροιση Δομών Δεδομένων. Αυτό είναι ένα από τα "δολοφονικά χαρακτηριστικά" Κάντε κλικ στο σπίτι. Παρά το γεγονός ότι τα παιδιά από το Yandex λένε ότι δεν θέλουμε να συγκεντρώσουμε δεδομένα, όλα συγκεντρώνονται σε Κάντε κλικ στο σπίτιγιατί είναι γρήγορο και βολικό.
  • Υλοποιημένες απόψεις. Μαζί με τη συγκέντρωση δομών δεδομένων, οι υλοποιημένες προβολές σάς επιτρέπουν να κάνετε μια βολική σε πραγματικό χρόνο συσσωμάτωση.
  • ClickHouse SQL. Αυτή είναι μια επέκταση γλώσσας SQL με ορισμένες πρόσθετες και αποκλειστικές λειτουργίες που είναι διαθέσιμες μόνο σε Κάντε κλικ στο σπίτι. Προηγουμένως, ήταν, όπως λέγαμε, μια επέκταση από τη μια πλευρά και ένα μειονέκτημα από την άλλη. Τώρα σχεδόν όλες οι ελλείψεις σε σύγκριση με SQL 92 το αφαιρέσαμε, τώρα είναι απλώς μια επέκταση.
  • Λάμδα-εκφράσεις. Υπάρχουν ακόμα σε κάποια βάση δεδομένων;
  • ML-υποστήριξη. Αυτό είναι σε διαφορετικές βάσεις δεδομένων, άλλες είναι καλύτερες, άλλες είναι χειρότερες.
  • ανοιχτή πηγή. Μπορούμε να επεκταθούμε Κάντε κλικ στο σπίτι μαζί. Τώρα σε Κάντε κλικ στο σπίτι περίπου 500 συνεισφέροντες, και αυτός ο αριθμός αυξάνεται συνεχώς.

Δύσκολα ερωτήματα

В Κάντε κλικ στο σπίτι υπάρχουν πολλοί διαφορετικοί τρόποι να κάνεις το ίδιο πράγμα. Για παράδειγμα, υπάρχουν τρεις διαφορετικοί τρόποι για να επιστρέψετε την τελευταία τιμή από έναν πίνακα για CPU (υπάρχει και τέταρτο, αλλά είναι ακόμα πιο εξωτικό).

Το πρώτο δείχνει πόσο βολικό είναι να το κάνεις Κάντε κλικ στο σπίτι ερωτήματα όταν θέλετε να το ελέγξετε πλειάδα που περιέχεται στο υποερώτημα. Αυτό είναι κάτι που μου έλειψε προσωπικά σε άλλες βάσεις δεδομένων. Εάν θέλω να συγκρίνω κάτι με ένα υποερώτημα, τότε σε άλλες βάσεις δεδομένων μόνο ένα βαθμωτό μπορεί να συγκριθεί με αυτό και για πολλές στήλες πρέπει να γράψω Ενώνω. Σε Κάντε κλικ στο σπίτι μπορείτε να χρησιμοποιήσετε πλειάδα:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

Ο δεύτερος τρόπος κάνει το ίδιο, αλλά χρησιμοποιεί μια αθροιστική συνάρτηση argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В Κάντε κλικ στο σπίτι υπάρχουν αρκετές δεκάδες συγκεντρωτικές συναρτήσεις και αν χρησιμοποιείτε συνδυαστές, τότε σύμφωνα με τους νόμους της συνδυαστικής, λαμβάνετε περίπου χίλιες από αυτές. ArgMax - μία από τις συναρτήσεις που μετράει τη μέγιστη τιμή: το ερώτημα επιστρέφει την τιμή χρήση_χρήστη, στην οποία επιτυγχάνεται η μέγιστη τιμή δημιουργήθηκε_στο:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

ASOF JOIN - «κόλληση» σειρών με διαφορετικούς χρόνους. Αυτή είναι μια μοναδική δυνατότητα για βάσεις δεδομένων και είναι διαθέσιμη μόνο σε kdb+. Εάν υπάρχουν δύο χρονοσειρές με διαφορετικούς χρόνους, ASOF JOIN επιτρέπει τη μετατόπισή τους και τη συγκόλληση σε ένα αίτημα. Για κάθε τιμή σε μια χρονοσειρά, βρίσκεται η πλησιέστερη τιμή σε μια άλλη και επιστρέφονται στην ίδια γραμμή:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Αναλυτικές συναρτήσεις

Στο πρότυπο SQL-2003 μπορείτε να γράψετε έτσι:

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В Κάντε κλικ στο σπίτι αυτό δεν είναι δυνατό - δεν υποστηρίζει το πρότυπο SQL-2003 και μάλλον δεν θα γίνει ποτέ. Αντίθετα, μέσα Κάντε κλικ στο σπίτι συνηθίζεται να γράφουμε ως εξής:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Υποσχέθηκα λάμδα - ορίστε!

Αυτό είναι ένα ανάλογο ενός αναλυτικού ερωτήματος στο πρότυπο SQL-2003: μετράει τη διαφορά μεταξύ δύο χρονική σήμανση, διάρκεια, τακτική - όλα όσα συνήθως θεωρούμε αναλυτικές συναρτήσεις. ΣΕ Κάντε κλικ στο σπίτι τα μετράμε μέσω πινάκων: πρώτα συμπτύσσουμε τα δεδομένα σε έναν πίνακα, μετά κάνουμε ό,τι θέλουμε στον πίνακα και μετά τον επεκτείνουμε ξανά. Δεν είναι πολύ βολικό, απαιτεί αγάπη για τον λειτουργικό προγραμματισμό τουλάχιστον, αλλά είναι πολύ ευέλικτο.

Ειδικά χαρακτηριστικά

Εξάλλου, σε Κάντε κλικ στο σπίτι πολλά εξειδικευμένα χαρακτηριστικά. Για παράδειγμα, πώς να προσδιορίσετε πόσες συνεδρίες εκτελούνται ταυτόχρονα; Μια τυπική εργασία για την παρακολούθηση είναι ο προσδιορισμός του μέγιστου φορτίου σε ένα μόνο αίτημα. ΣΕ Κάντε κλικ στο σπίτι υπάρχει μια ειδική λειτουργία για αυτό το σκοπό:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Γενικά, το ClickHouse έχει ειδικές λειτουργίες για πολλούς σκοπούς:

  • runningDifference, runningAccumulate, γείτονας;
  • sumMap(κλειδί, τιμή);
  • timeSeriesGroupSum(uid, timestamp, value);
  • timeSeriesGroupRateSum(uid, timestamp, value);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • ΜΕ ΓΕΜΙΣΜΑ / ΜΕ ΔΕΜΑΤΑ?
  • απλήΓραμμική παλινδρόμηση, στοχαστική Γραμμική παλινδρόμηση.

Αυτή δεν είναι μια πλήρης λίστα χαρακτηριστικών, υπάρχουν μόνο 500-600 από αυτά. Συμβουλή: όλες οι λειτουργίες σε Κάντε κλικ στο σπίτι βρίσκεται στον πίνακα συστήματος (δεν είναι όλα τεκμηριωμένα, αλλά όλα είναι ενδιαφέροντα):

select * from system.functions order by name

Κάντε κλικ στο σπίτι αποθηκεύει πολλές πληροφορίες για τον εαυτό του, συμπεριλαμβανομένων πίνακες καταγραφής, query_log, αρχείο καταγραφής ιχνών, αρχείο καταγραφής λειτουργίας με μπλοκ δεδομένων (part_log), το αρχείο καταγραφής μετρήσεων και το αρχείο καταγραφής συστήματος, το οποίο συνήθως εγγράφει στο δίσκο. Το αρχείο καταγραφής μετρήσεων είναι χρονική σειρά в Κάντε κλικ στο σπίτι πράγματι Κάντε κλικ στο σπίτι: η ίδια η βάση δεδομένων μπορεί να παίξει κάποιο ρόλο χρονική σειρά βάσεις δεδομένων, «καταβροχθίζοντας» έτσι τον εαυτό του.

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Αυτό είναι επίσης ένα μοναδικό πράγμα - αφού κάνουμε καλή δουλειά για αυτό χρονική σειράγιατί δεν μπορούμε να αποθηκεύσουμε όλα όσα χρειαζόμαστε στον εαυτό μας; Δεν χρειαζόμαστε Προμηθέας, τα κρατάμε όλα μέσα μας. Συνδεδεμένος Γκράφανα και παρακολουθούμε τον εαυτό μας. Ωστόσο, εάν Κάντε κλικ στο σπίτι πέφτει, δεν θα δούμε -γιατί- γι' αυτό συνήθως δεν το κάνουν.

Μεγάλη συστάδα ή πολλά μικρά Κάντε κλικ στο σπίτι

Τι είναι καλύτερο - ένα μεγάλο σύμπλεγμα ή πολλά μικρά ClickHouses; Η παραδοσιακή προσέγγιση για DWH είναι ένα μεγάλο σύμπλεγμα στο οποίο κατανέμονται σχήματα για κάθε εφαρμογή. Ήρθαμε στον διαχειριστή της βάσης δεδομένων - δώστε μας ένα σχήμα και μας δόθηκε:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

В Κάντε κλικ στο σπίτι μπορείς να το κάνεις διαφορετικά. Μπορεί κάθε εφαρμογή να κάνει τη δική της Κάντε κλικ στο σπίτι:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Δεν χρειαζόμαστε πια ένα μεγάλο τέρας DWH και μη συνεργάσιμοι διαχειριστές. Μπορούμε να δώσουμε σε κάθε εφαρμογή το δικό της Κάντε κλικ στο σπίτι, και ο προγραμματιστής μπορεί να το κάνει μόνος του, αφού Κάντε κλικ στο σπίτι πολύ εύκολο στην εγκατάσταση και δεν απαιτεί περίπλοκη διαχείριση:

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Αν όμως έχουμε πολλά Κάντε κλικ στο σπίτι, και πρέπει να το ρυθμίζετε συχνά, τότε θέλετε να αυτοματοποιήσετε αυτή τη διαδικασία. Για αυτό μπορούμε, για παράδειγμα, να χρησιμοποιήσουμε Kubernetes и clickhouse-χειριστής. ΣΕ Kubernetes ClickHouse μπορείτε να βάλετε "on click": Μπορώ να κάνω κλικ σε ένα κουμπί, να εκτελέσω το μανιφέστο και η βάση δεδομένων είναι έτοιμη. Μπορείτε να δημιουργήσετε αμέσως ένα σχήμα, να ξεκινήσετε τη φόρτωση μετρήσεων εκεί και μετά από 5 λεπτά έχω έτοιμο έναν πίνακα ελέγχου Γκράφανα. Είναι τόσο απλό!

Το αποτέλεσμα;

Ετσι, Κάντε κλικ στο σπίτι - Αυτό:

  • Γρήγορα. Όλοι το ξέρουν αυτό.
  • Απλά. Λίγο συζητήσιμο, αλλά νομίζω ότι είναι δύσκολο να το μάθεις, εύκολο να το παλέψεις. Αν καταλαβαίνετε πώς Κάντε κλικ στο σπίτι λειτουργεί, όλα είναι πολύ απλά.
  • Παγκόσμια. Είναι κατάλληλο για διαφορετικά σενάρια: DWH, Time Series, Log Storage. Αλλά δεν είναι OLTP βάση δεδομένων, επομένως μην προσπαθήσετε να κάνετε σύντομα ένθετα και διαβάσματα εκεί.
  • Ενδιαφέρον. Μάλλον αυτός που συνεργάζεται με Κάντε κλικ στο σπίτι, βίωσε πολλά ενδιαφέροντα λεπτά με την καλή και την κακή έννοια. Για παράδειγμα, βγήκε μια νέα κυκλοφορία, όλα σταμάτησαν να λειτουργούν. Ή όταν δυσκολευτήκατε με μια εργασία για δύο ημέρες, αλλά μετά από μια ερώτηση στη συνομιλία του Telegram, η εργασία λύθηκε σε δύο λεπτά. Ή, όπως στη διάσκεψη στην έκθεση της Lesha Milovidov, ένα στιγμιότυπο από Κάντε κλικ στο σπίτι έσπασε την εκπομπή HighLoad++. Τέτοια πράγματα συμβαίνουν συνέχεια και μας κάνουν τη ζωή Κάντε κλικ στο σπίτι φωτεινό και ενδιαφέρον!

Μπορείτε να δείτε την παρουσίαση εδώ.

Μετακίνηση στο ClickHouse: 3 χρόνια αργότερα

Η πολυαναμενόμενη συνάντηση των προγραμματιστών συστημάτων υψηλού φορτίου στο HighLoad++ θα πραγματοποιηθεί στις 9 και 10 Νοεμβρίου στο Σκόλκοβο. Τέλος, θα είναι ένα συνέδριο εκτός σύνδεσης (αν και με όλες τις προφυλάξεις), καθώς η ενέργεια του HighLoad++ δεν μπορεί να συσκευαστεί online.

Για το συνέδριο, βρίσκουμε και σας δείχνουμε περιπτώσεις σχετικά με τις μέγιστες δυνατότητες της τεχνολογίας: Το HighLoad ++ ήταν, είναι και θα είναι το μόνο μέρος όπου μπορείτε να μάθετε σε δύο ημέρες πώς λειτουργούν τα Facebook, Yandex, VKontakte, Google και Amazon.

Έχοντας πραγματοποιήσει τις συναντήσεις μας χωρίς διακοπή από το 2007, φέτος θα συναντηθούμε για 14η φορά. Κατά τη διάρκεια αυτής της περιόδου, το συνέδριο αυξήθηκε 10 φορές, πέρυσι το βασικό γεγονός της βιομηχανίας συγκέντρωσε 3339 συμμετέχοντες, 165 ομιλητές εκθέσεων και συναντήσεων και 16 κομμάτια έπαιζαν ταυτόχρονα.
Πέρυσι υπήρχαν 20 λεωφορεία για εσάς, 5280 λίτρα τσάι και καφές, 1650 λίτρα φρουτοποτά και 10200 μπουκάλια νερό. Και άλλα 2640 κιλά φαγητό, 16 πιάτα και 000 φλιτζάνια. Παρεμπιπτόντως, με τα χρήματα που συγκεντρώθηκαν από ανακυκλωμένο χαρτί, φυτέψαμε 25 δενδρύλλια βελανιδιάς 🙂

Μπορείτε να αγοράσετε εισιτήρια εδώ, λάβετε νέα για το συνέδριο — εδώ, και μιλήστε σε όλα τα κοινωνικά δίκτυα: Telegram, Facebook, Vkontakte и Twitter.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο