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

Η έκδοση DuckDB 0.6.0 DBMS είναι διαθέσιμη, συνδυάζοντας ιδιότητες 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.
  • Για τη συμπίεση αριθμών κινητής υποδιαστολής (DOUBLE και FLOAT), προτείνονται οι αλγόριθμοι Chimp και Patas. Σε σύγκριση με τον προηγούμενο αλγόριθμο 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)".
  • Η υποστήριξη για τον τύπο UNION έχει προστεθεί στην SQL, η οποία επιτρέπει τη δέσμευση πολλών τύπων στο ίδιο στοιχείο (για παράδειγμα, "UNION(αριθμός INT, σφάλμα VARCHAR))".
  • Η SQL παρέχει τη δυνατότητα δημιουργίας ερωτημάτων που ξεκινούν με τη λέξη "FROM" αντί για "SELECT". Σε αυτήν την περίπτωση, υποτίθεται ότι το ερώτημα ξεκινά με "ΕΠΙΛΟΓΗ *".
  • Προστέθηκε υποστήριξη για την έκφραση "COLUMNS" στην SQL, επιτρέποντάς σας να εκτελέσετε μια λειτουργία σε πολλές στήλες χωρίς να αντιγράψετε την έκφραση. Για παράδειγμα, "SELECT MIN(COLUMNS(*)) from obs;" θα προκαλέσει την εκτέλεση της συνάρτησης MIN για κάθε στήλη στον πίνακα obs και "SELECT COLUMNS('val[0-9]+') from obs;" για στήλες με όνομα που αποτελείται από "val" και αριθμούς.
  • Προστέθηκε υποστήριξη για λειτουργίες λίστας, όπως "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
  • Βελτιστοποιημένη κατανάλωση μνήμης. Από προεπιλογή στην πλατφόρμα Linux, η βιβλιοθήκη jemalloc χρησιμοποιείται για διαχείριση μνήμης. Βελτιώθηκε σημαντικά η απόδοση των λειτουργιών συγχώνευσης κατακερματισμού όταν η μνήμη είναι περιορισμένη.
  • Προστέθηκε η λειτουργία εξόδου ".mode duckbox" στο CLI, απορρίπτοντας τις μεσαίες στήλες με βάση τις γραμμές πλάτους παραθύρου τερματικού). Χρησιμοποιώντας την παράμετρο ".maxrows X", μπορείτε επιπλέον να περιορίσετε τον αριθμό των σειρών εξόδου.
  • Το CLI παρέχει αυτόματη συμπλήρωση εισόδου λαμβάνοντας υπόψη το πλαίσιο (η εισαγωγή λέξεων-κλειδιών, ονομάτων πινάκων, συναρτήσεων, ονομάτων στηλών και ονομάτων αρχείων έχει ολοκληρωθεί).
  • Το CLI είναι ενεργοποιημένο από προεπιλογή για να εμφανίζει μια ένδειξη προόδου ερωτήματος.

Πηγή: opennet.ru

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