Από in-process σε client-server: Η επιστροφή του Quack

Η DuckDB 2.0.0 LTS αναβαθμίζει την αρχιτεκτονική της βάσης δεδομένων από αυστηρά in-process σε ένα πλήρες client-server μοντέλο. Το πρωτόκολλο Quack, που παρουσιάστηκε επίσημα στην εκδοση 1.5.3, προσφέρει ένα εγγενές πρωτόκολλο που επιτρέπει σε οποιαδήποτε διεύκολυνση DuckDB να ξεκινήσει έναν διακομιστή. Η νέα εντολή CONNECT επιτρέπει την προσάρτηση και την αλλαγή σε απομακρυσμένη βάση δεδομένων σε μία εντολή, υποστηρτίζοντας όχι μόνο το Quack αλλά και PostgreSQL και MySQL με έναν remote pushdown optimizer που μεταφέρει τις ερωτήσεις στον απομακρυσμένο διακομιστή.

Η υλοποίηση είναι απλή: ο διακομιστής ξεκινά με CALL quack_serve(token = 'my_token'), ενώ ο πελάτης συνδέεται με ATTACH 'quack:localhost' AS qk (TOKEN 'my_token') και CONNECT qk. Για παραγωγή, συνιστάται η χρήση ενός TLS-terminating reverse proxy αντί για την άμεση έκθεση του διακομιστή.

Απόδοση και ημιδομημένα δεδομένα: Ασύγχρονη I/O και VARIANT

Η ασύγχρονη I/O αποτελεί έναν σημαντικό βελτιστοποιητή απόδοσης, επιτρέποντας στην DuckDB να ζητά δεδομένα στο παρασκήνιο και να διατηρεί πολλές αιτήσεις σε πτήξη. Αυτό οδηγεί σε σημαντική αύξηση του throughput σε απομακρυσμένες πηγές δεδομένων όπως το S3, μειώνοντας τον χρόνο εκτέλεσης ερωτήσεων που διαβείβασαν αρχεία Parquet και CSV.

Παράλληλα, ο τύπος VARIANT γίνεται πρώτος πολίτης, προσφέροντας μια αποτελεσματική αναπαράσταση ημιδομημένων δεδομένων όπως JSON. Σε αντίθεση με το κείμενο JSON, το VARIANT αποθηκεύει τα δεδομένα σε δυαδική μορφή, επιτρέποντας στην DuckDB να «σπάσει» τη δομή τους και να τα συμπιέσει αποτελεσματικά. Η υποστήριξη είναι πλήρης, από την αποθήκευση μέχρι την ανάγνωση/εγγραφή σε Parquet, με μια οικογένεια συναρτήσεων variant_*.

Επεκτασιμότητα και SQL χαρακτηριστικά: Περισσότερος έλεγχος και ευελιξία

Ο νέος PEG-based parser αντικαθιστά τον παλιό YACC/Bison parser, επιλύοντας τα προβλήματα συγκρούσεων shift/reduce που προέκυπταν με την επέκταση της γραμματικής. Οι επεκτάσεις μπορούν τώρα να προσθέτουν νέες συνταξιακές δομές στο SQL, ενώ τα μηνύματα σφαλμάτων περιλαμβάνουν ακριβείς θέσεις στο πηγαίο κώδικα.

Οι triggers προσφέρουν υποστήριξη για BEFORE/AFTER, FOR EACH ROW/STATEMENT, transition tables μέσω REFERENCING OLD/NEW TABLE, και RETURNING. Μπορούν να χρησιμοποιηθούν για audit tables ή για τη συντήρηση materialized views με αυξημένη ακρίβεια.

Τέλος, ο agent mode στο CLI εντοπίζει όταν εκτελείται από έναν AI agent (π.χ. Claude Code, Codex, Cursor) και προσαρμόζει την έξοδο: εκτυπώνει συμπαγείς πίνακες Markdown, διακόπτει τρέχουσες ερωτήσεις, και αναφέρει σφάλματα ως JSON. Στις δοκιμές TPC-H, μειώνει την ποσότητα της εξόδου που ο μοντήλο πρέπει να διαβάσει κατά 59%.