Οι προγραμματιστές του έργου SQLite έχουν αρχίσει να δοκιμάζουν ένα πειραματικό backend HCtree που υποστηρίζει κλείδωμα σε επίπεδο γραμμής και παρέχει υψηλό επίπεδο παραλληλισμού κατά την επεξεργασία ερωτημάτων. Το νέο backend στοχεύει στη βελτίωση της αποτελεσματικότητας της χρήσης του SQLite σε συστήματα πελάτη-διακομιστή που πρέπει να επεξεργαστούν μεγάλο αριθμό ταυτόχρονων αιτημάτων εγγραφής στη βάση δεδομένων.
Οι δομές b-tree που χρησιμοποιούνται εγγενώς στο SQLite για την αποθήκευση δεδομένων δεν έχουν σχεδιαστεί για αυτόν τον τύπο φόρτωσης, γεγονός που περιορίζει το SQLite να γράφει μόνο σε ένα νήμα. Ως πείραμα, οι προγραμματιστές άρχισαν να αναπτύσσουν μια εναλλακτική λύση που χρησιμοποιεί δομές HC-tree για αποθήκευση, οι οποίες είναι πιο κατάλληλες για τον παραλληλισμό λειτουργιών εγγραφής.
Για να επιτραπεί η ταυτόχρονη εκτέλεση πολλών λειτουργιών, μια εγγραφή HCtree χρησιμοποιεί έναν μηχανισμό διαμερισμάτων συναλλαγών που χρησιμοποιεί κλείδωμα σε επίπεδο σελίδας και είναι παρόμοιος με το MVCC (Multi-Version Concurrency Control), αλλά χρησιμοποιεί ελέγχους συναλλαγών με βάση κλειδιά και εύρη κλειδιών αντί για σύνολα σελίδων. Οι λειτουργίες ανάγνωσης και εγγραφής εκτελούνται σε σχέση με ένα στιγμιότυπο βάσης δεδομένων, οι αλλαγές στο οποίο γίνονται ορατές στην κύρια βάση δεδομένων μόνο μετά την ολοκλήρωση της συναλλαγής.
Οι πελάτες μπορούν να χρησιμοποιήσουν τρεις λειτουργίες ανοιχτής συναλλαγής:
- "BEGIN"—οι συναλλαγές δεν λαμβάνουν υπόψη δεδομένα πρόσβασης άλλων πελατών. Εάν εκτελούνται λειτουργίες εγγραφής σε μια συναλλαγή, η συναλλαγή μπορεί να δεσμευτεί μόνο εάν κατά την εκτέλεσή της δεν υπήρχαν άλλες λειτουργίες εγγραφής στη βάση δεδομένων.
- "BEGIN CONCURRENT" - οι συναλλαγές συλλέγουν πληροφορίες σχετικά με την πρόσβαση άλλων πελατών. Εάν εκτελούνται λειτουργίες εγγραφής σε μια συναλλαγή, η συναλλαγή μπορεί να δεσμευτεί εάν έχουν δεσμευτεί άλλες συναλλαγές στη βάση δεδομένων από τη δημιουργία του στιγμιότυπου.
- “BEGIN EXCLUSIVE” - μετά το άνοιγμα μιας συναλλαγής, αποκλείει λειτουργίες από άλλες συναλλαγές μέχρι να ολοκληρωθεί.
Το HCtree υποστηρίζει την αναπαραγωγή master-slave, η οποία σας επιτρέπει να μετεγκαταστήσετε τις συναλλαγές σε άλλη βάση δεδομένων και να διατηρήσετε τις δευτερεύουσες βάσεις δεδομένων σε συγχρονισμό με την κύρια βάση δεδομένων. Το HCtree καταργεί επίσης τον περιορισμό στο μέγεθος της βάσης δεδομένων - αντί για αναγνωριστικά σελίδας δεδομένων 32 bit, το HCtree χρησιμοποιεί 48 bit, γεγονός που αυξάνει το μέγιστο μέγεθος βάσης δεδομένων από 16 tebibyte σε 1 exbibyte (εκατομμύρια tebibyte). Αναμένεται ότι η απόδοση του SQLite με το backend HCtree δεν θα είναι χαμηλότερη από το κλασικό backend ενός νήματος. Οι πελάτες SQLite με υποστήριξη HCtree θα έχουν πρόσβαση τόσο σε βάσεις δεδομένων που βασίζονται σε δέντρο HC όσο και σε βάσεις δεδομένων SQLite παλαιού τύπου.
Πηγή: opennet.ru