Δημοσιεύτηκε DuckDB 0.6.0, παραλλαγή SQLite για αναλυτικά ερωτήματα

Το DuckDB 0.6.0 είναι πλέον διαθέσιμο, συνδυάζοντας χαρακτηριστικά SQLite όπως η συμπύκνωση, η δυνατότητα σύνδεσης ως ενσωματωμένη βιβλιοθήκη, η αποθήκευση της βάσης δεδομένων σε ένα μόνο αρχείο και μια βολική διεπαφή CLI, με εργαλεία και βελτιστοποιήσεις για την εκτέλεση αναλυτικών ερωτημάτων που καλύπτουν ένα σημαντικό μέρος των αποθηκευμένων δεδομένων, όπως η συγκέντρωση ολόκληρου του περιεχομένου πινάκων ή η συγχώνευση αρκετών μεγάλων πινάκων. Ο κώδικας του έργου διανέμεται με την άδεια MIT. Η ανάπτυξη βρίσκεται ακόμη στο στάδιο της διαμόρφωσης πειραματικών εκδόσεων, καθώς η μορφή αποθήκευσης δεν έχει ακόμη σταθεροποιηθεί και αλλάζει από έκδοση σε έκδοση.

Το DuckDB παρέχει μια εκτεταμένη διάλεκτο της γλώσσας SQL που περιλαμβάνει πρόσθετες δυνατότητες για το χειρισμό πολύ περίπλοκων και μακροχρόνιων ερωτημάτων. Υποστηρίζει τη χρήση πολύπλοκων τύπων (πίνακες, δομές, ενώσεις) και τη δυνατότητα εκτέλεσης αυθαίρετων και ένθετων συσχετισμένων υποερωτημάτων. Υποστηρίζει ταυτόχρονη εκτέλεση πολλαπλών ερωτημάτων, εκτέλεση ερωτημάτων απευθείας από αρχεία σε μορφή CSV και Parquet. Είναι δυνατή η εισαγωγή από PostgreSQL DBMS.

Εκτός από τον κώδικα φλοιού από το SQLite, το έργο χρησιμοποιεί έναν αναλυτή από την PostgreSQL, μεταφέρθηκε σε ξεχωριστή βιβλιοθήκη, το στοιχείο Date Math από το MonetDB, τη δική του υλοποίηση συναρτήσεων παραθύρου (με βάση τον αλγόριθμο συνάθροισης δένδρων τμημάτων), έναν επεξεργαστή κανονικών εκφράσεων βασισμένο στη βιβλιοθήκη RE2, το δικό του εργαλείο βελτιστοποίησης ερωτημάτων, τον μηχανισμό ελέγχου MVCC ταυτόχρονη εκτέλεση εργασιών (Multi-Version Concurrency Control), καθώς και έναν διανυσματικό μηχανισμό εκτέλεσης ερωτημάτων που βασίζεται στον αλγόριθμο Hyper-Pipelining Query Execution, ο οποίος επιτρέπει την επεξεργασία μεγάλων συνόλων τιμές ταυτόχρονα σε μία πράξη.

Μεταξύ των αλλαγών στη νέα έκδοση:

  • Συνεχίστηκαν οι εργασίες για τη βελτίωση της μορφής αποθήκευσης. Έχει εφαρμοστεί μια αισιόδοξη λειτουργία εγγραφής δίσκου, στην οποία κατά τη φόρτωση ενός μεγάλου συνόλου δεδομένων σε μία συναλλαγή, τα δεδομένα συμπιέζονται και εγγράφονται στο αρχείο βάσης δεδομένων σε λειτουργία ροής, χωρίς να περιμένει η συναλλαγή να επιβεβαιωθεί από την εντολή COMMIT. Όταν λαμβάνεται η εντολή COMMIT, τα δεδομένα έχουν ήδη εγγραφεί στον δίσκο και όταν εκτελείται η εντολή ROLLBACK, απορρίπτονται. Προηγουμένως, τα δεδομένα αποθηκεύονταν πρώτα πλήρως στη μνήμη και κατά την ολοκλήρωση, αποθηκεύονταν στον δίσκο.
  • Προστέθηκε υποστήριξη για παράλληλη φόρτωση δεδομένων σε μεμονωμένους πίνακες, η οποία επιτρέπει τη σημαντική αύξηση της ταχύτητας φόρτωσης σε συστήματα πολλαπλών πυρήνων. Για παράδειγμα, στην προηγούμενη έκδοση, η φόρτωση μιας βάσης δεδομένων με 150 εκατομμύρια γραμμές σε μια CPU 10 πυρήνων διαρκούσε 91 δευτερόλεπτα, ενώ στη νέα έκδοση αυτή η λειτουργία εκτελείται σε 17 δευτερόλεπτα. Υπάρχουν δύο λειτουργίες παράλληλης φόρτωσης - με διατήρηση της σειράς των εγγραφών και χωρίς διατήρηση της σειράς.
  • Ο αλγόριθμος FSST (Fast Static Symbol Table - Πίνακας Γρήγορων Στατικών Συμβόλων) χρησιμοποιείται για τη συμπίεση δεδομένων, επιτρέποντας τη συσκευασία των δεδομένων μέσα σε συμβολοσειρές χρησιμοποιώντας ένα κοινό λεξικό τυπικών αντιστοιχίσεων. Η χρήση του νέου αλγορίθμου επέτρεψε τη μείωση του μεγέθους της βάσης δεδομένων δοκιμών από 761MB σε 251MB.
  • Οι αλγόριθμοι Chimp και Patas προτείνονται για τη συμπίεση αριθμών κινητής υποδιαστολής (DOUBLE και FLOAT). Σε σύγκριση με τον προηγουμένως χρησιμοποιούμενο αλγόριθμο Gorillas, ο Chimp παρέχει υψηλότερο επίπεδο συμπίεσης και ταχύτερη αποσυμπίεση. Ο αλγόριθμος Patas υστερεί σε σχέση με τον Chimp στη συμπίεση, αλλά είναι σημαντικά ταχύτερος στην ταχύτητα αποσυμπίεσης, η οποία είναι σχεδόν η ίδια με την ανάγνωση μη συμπιεσμένων δεδομένων.
  • Προστέθηκε μια πειραματική λειτουργία για τη φόρτωση δεδομένων από αρχεία CSV σε πολλά παράλληλα νήματα (SET experimental_parallel_csv=true), η οποία μειώνει σημαντικά τον χρόνο φόρτωσης μεγάλων αρχείων CSV. Για παράδειγμα, κατά την ενεργοποίηση αυτής της επιλογής, ο χρόνος φόρτωσης ενός αρχείου CSV 720 MB μειώθηκε από 3.5 σε 0.6 δευτερόλεπτα.
  • Έχει υλοποιηθεί η δυνατότητα παράλληλης εκτέλεσης λειτουργιών δημιουργίας και διαχείρισης ευρετηρίου. Για παράδειγμα, η εκτέλεση της λειτουργίας CREATE INDEX για μια στήλη με 16 εκατομμύρια εγγραφές έχει μειωθεί από 5.92 σε 1.38 δευτερόλεπτα.
  • Παρέχεται παραλληλοποίηση των λειτουργιών συνάθροισης σε ερωτήματα που περιέχουν την έκφραση "COUNT(DISTINCT col)".
  • Η SQL υποστηρίζει πλέον τον τύπο UNION, ο οποίος επιτρέπει τη σύνδεση πολλαπλών τύπων σε ένα μόνο στοιχείο (π.χ. "UNION(num INT, error VARCHAR))").
  • Η SQL παρέχει τη δυνατότητα δημιουργίας ερωτημάτων που ξεκινούν με τη λέξη "FROM" αντί για "SELECT". Σε αυτήν την περίπτωση, θεωρείται ότι το ερώτημα ξεκινά με "SELECT *".
  • Η SQL υποστηρίζει πλέον την έκφραση "COLUMNS", η οποία σας επιτρέπει να εκτελέσετε μια λειτουργία σε πολλές στήλες χωρίς να αντιγράψετε την έκφραση. Για παράδειγμα, η συνάρτηση "SELECT MIN(COLUMNS(*)) from obs;" θα εκτελέσει τη συνάρτηση MIN για κάθε στήλη στον πίνακα obs, ενώ η συνάρτηση "SELECT COLUMNS('val[0-9]+') from obs;" θα εκτελέσει τη συνάρτηση MIN για στήλες που ονομάζονται με "val" και ψηφία.
  • Προστέθηκε υποστήριξη για λειτουργίες λίστας, όπως "SELECT [x + 1 για x σε [1, 2, 3]] AS l;".
  • Η κατανάλωση μνήμης έχει βελτιστοποιηθεί. Από προεπιλογή στην πλατφόρμα Linux Η βιβλιοθήκη jemalloc χρησιμοποιείται για τη διαχείριση μνήμης. Η απόδοση των λειτουργιών συγχώνευσης κατακερματισμού υπό συνθήκες περιορισμένης μνήμης έχει βελτιωθεί σημαντικά.
  • Η διεπαφή γραμμής εντολών διαθέτει πλέον μια λειτουργία εξόδου ".mode duckbox" που απορρίπτει τις μεσαίες στήλες με βάση το πλάτος του παραθύρου τερματικού (κατάλληλη για γρήγορη οπτική αξιολόγηση των αποτελεσμάτων ερωτημάτων με μεγάλο αριθμό στηλών, όπως "SELECT * FROM tbl", τα οποία κανονικά εκτείνονται σε πολλές γραμμές). Η παράμετρος ".maxrows X" μπορεί επίσης να χρησιμοποιηθεί για τον περιορισμό του αριθμού των γραμμών εξόδου.
  • Το CLI παρέχει συμπλήρωση εισόδου με επίγνωση του περιβάλλοντος (ολοκληρώνονται λέξεις-κλειδιά, ονόματα πινάκων, συναρτήσεις, ονόματα στηλών και ονόματα αρχείων).
  • Το CLI έχει ενεργοποιημένη από προεπιλογή μια ένδειξη προόδου ερωτήματος.

Πηγή: opennet.ru

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster