Ασύγχρονο I/O και βελτιστοποίηση δικτύου

Η σημαντικότερη αρχιτεκτονική αλλαγή στο DuckDB 2.0 είναι η εισαγωγή του ασύγχρονου I/O. Στις προηγούμενες εκδόσεις, οι workers εκτελούσαν σειριακά τη λήψη και την αποσυμπίεση των δεδομένων, προκαλώντας σημεία συμφόρησης (bottlenecks) λόγω του idle χρόνου της CPU κατά την αναμονή του δικτύου. Με το νέο μοντέλο, ένα ξεχωριστό pool νημάτων (threads) αναλαμβάνει αποκλειστικά το downloading, διατηρώντας τα δεδομένα έτοιμα για τους workers, γεγονός που εκτοξεύει το throughput σε S3 workloads.

Αναδρομικά CTEs και ιεραρχικά δεδομένα

Η μηχανή αναδρομικών CTEs ανακατασκευάστηκε πλήρως. Πλέον, αντί για την επανεξέταση ολόκληρου του πίνακα σε κάθε επανάληψη, το σύστημα εκτελεί ένα lookup βασισμένο σε ευρετήρια, περιορίζοντας το κόστος της αναζήτησης μόνο στις σειρές που επηρεάζονται. Αυτό καθιστά το DuckDB ικανό να διαχειρίζεται deep parent/child chains (όπως git history ή lineage) με ταχύτητες που προηγουμένως απαιτούσαν εξειδικευμένες graph βάσεις δεδομένων.

Ο τύπος VARIANT και το JSON shredding

Το VARIANT αποτελεί πλέον τύπο δεδομένων πρώτης κατηγορίας. Η καινοτομία έγκειται στο "shredding", όπου το DuckDB αναλύει το JSON και εξάγει τα σταθερά πεδία σε αυτόνομες στήλες κατά την εγγραφή στο δίσκο. Αυτή η προσέγγιση προσφέρει:

  • Δραστική μείωση του αποθηκευτικού χώρου (έως και 3x σε σύγκριση με raw JSON).
  • Ταχύτητα ανάκτησης δεδομένων που πλησιάζει εκείνη των typed στηλών.
  • Διατήρηση της ευελιξίας του JSON για τα μη δομημένα τμήματα των δεδομένων.

Επιπλέον λειτουργικότητες

Η έκδοση 2.0 φέρνει επίσης:

  • Triggers: Δυνατότητα εκτέλεσης SQL logic κατά την τροποποίηση δεδομένων.
  • DML in CTEs: Υποστήριξη για DELETE ... RETURNING εντός WITH clauses, διευκολύνοντας τα ατομικά (atomic) pipelines μεταφοράς δεδομένων.
  • Compatibility mode: Ρυθμίσεις για συμβατότητα με Spark SQL, διευκολύνοντας τη μετάβαση legacy pipelines.