SQLite

Σχεδιασμός

Αντίθετα με τα συστήματα διαχείρισης βάσεων δεδομένων μορφής Μοντέλο πελάτη-διακομιστή, η μηχανή SQLite δεν έχει αυτόνομες διεργασίες με τις οποίες επικοινωνεί το πρόγραμμα της εφαρμογής. Αντίθετα, η βιβλιοθήκη SQLite είναι συνδεμένη και έτσι γίνεται ένα ενσωματωμένο μέρος του προγράμματος εφαρμογής.  (Σε αυτό, το SQLite ακολουθεί το προηγούμενο του Informix SE του c. 1984)  Η βιβλιοθήκη μπορεί επίσης να κληθεί δυναμικά. Το πρόγραμμα της εφαρμογής χρησιμοποιεί τη λειτουργικότητα του SQLite μέσα από απλές κλήσεις συνάρτησης, που μειώνουν την καθυστέρηση στην πρόσβαση της βάσης δεδομένων: οι κλήσεις της συνάρτησης μέσα από μια απλή διεργασία είναι πιο αποτελεσματικές από την Διαδιεργασική επικοινωνία. Το SQLite αποθηκεύει την συνολική βάση δεδομένων (ορισμούς, πίνακες, δείκτες και τα ίδια τα δεδομένα) ως ένα μοναδικό διαλειτουργικό αρχείο στη μηχανή ενός οικοδεσπότη. Υλοποιεί αυτόν τον απλό σχεδιασμό με κλείδωμα όλου του αρχείου της βάσης δεδομένων κατά τη διάρκεια της εγγραφής. Το SQLite διαβάζει λειτουργίες που μπορεί να είναι πολυλειτουργικές, αν και οι εγγραφές μπορούν να γίνουν μόνο με τη σειρά.

Ιστορικό

Ο D. Richard Hipp σχεδίασε το SQLite την άνοιξη του 2000 ενώ δούλευε στη General Dynamics σε συμβόλαιο με το Ναυτικό των Ηνωμένων Πολιτειών. Ο Hipp σχεδίαζε λογισμικό για ενσωματωμένη χρήση σε καθοδηγούμενους καταστροφείς πυραύλων, που αρχικά βασίστηκε σε HP-UX με μια βάση δεδομένων IBM Informix παρασκηνίου. Οι σκοποί σχεδίασης του SQLite ήταν να επιτρέπει στο πρόγραμμα να λειτουργήσει χωρίς εγκατάσταση ενός συστήματος διαχείρισης βάσης δεδομένων ή χωρίς να απαιτείται  ένας διαχειριστής βάσης δεδομένων. Τον Αύγουστο του 2000, εκδόθηκε το SQLite 1.0, με βάση το gdbm (Διαχειριστής βάσης δεδομένων GNU). Το SQLite 2.0 αντικατέστησε το gdbm με μια προσαρμοσμένη εφαρμογή B-tree, προσθέτοντας υποστήριξη για συναλλαγές. Στο SQLite 3.0, που χρηματοδοτήθηκε μερικώς από την America Online, προστέθηκε διεθνοποίηση και τοπικοποίηση, manifest typing και άλλες σημαντικές βελτιώσεις.
Το 2011 ο Hipp ανακοίνωσε τα σχέδια του να προσθέσει μια διεπαφή UnQL στις βάσεις δεδομένων SQLite και να αναπτύξει το UnQLite, μια ενσωματώσιμη κειμενοστραφή βάση δεδομένων. Ο Howard Chu μετέφερε το SQLite 3.7.7.1 για να χρησιμοποιεί Openldap MDB αντί για τον αρχικό κώδικα Btree και το απεκάλεσε προσαρμογή στο SQLite. Σε μια δοκιμή εισαγωγής 1000 εγγραφών ήταν 20 φορές πιο γρήγορο.

Χαρακτηριστικά

Το SQLite υλοποιεί το μεγαλύτερο μέρος του προτύπου SQL-92 για το SQL, αλλά του λείπουν κάποια χαρακτηριστικά. Για παράδειγμα, έχει μερική υποστήριξη για εναύσματα βάσης δεδομένων και δεν μπορεί να γράψει σε προβολή (βάσης δεδομένων) (υποστηρίζει όμως ΣΤΗ ΘΕΣΗ τους εναύσματα που παρέχουν αυτή τη λειτουργία). Αν και υποστηρίζει σύνθετα ερωτήματα, έχει ακόμα περιορισμένη υποστήριξη για ALTER TABLE, καθώς δεν μπορεί να τροποποιήσει ή να διαγράψει στήλες.
Το SQLite χρησιμοποιεί ένα ασυνήθιστο Σύστημα τύπων για μια συμβατή με SQL DBMS· αντί της απόδοσης ενός τύπου σε μια στήλη όπως συμβαίνει στα περισσότερα συστήματα βάσεων δεδομένων SQL, οι τύποι αποδίδονται σε ατομικές τιμές· με όρους γλώσσας είναι έχει δυναμικό τύπο. Επιπλέον, έχει αδύναμο τύπο σε μερικούς από τους ίδιους τρόπους που έχει η Perl: κάποιος μπορεί να εισάγει μια Συμβολοσειρά σε μια στήλη ακεραίων (αν και το SQLite θα προσπαθήσει αρχικά να μετατρέψει τη συμβολοσειρά σε ακέραιο, αν ο προτιμώμενος  τύπος της στήλης είναι ακέραιος). Αυτό προσθέτει ευκινησία στις στήλες, ειδικά όταν συνδέεται σε έναν δυναμικό τύπο γλώσσας σεναρίου. Όμως, η τεχνική δεν μεταφέρεται σε άλλα προϊόντα SQL. Μια συνηθισμένη κριτική είναι ότι σε ένα σύστημα τύπου SQLite λείπει ο μηχανισμός ολοκληρωμένων δεδομένων που παρέχεται από από στήλες με δυναμικό τύπο σε άλλα προϊόντα. Ο ιστότοπος του SQLite περιγράφει  μια κατάσταση "αυστηρής συγγένειας", αλλά αυτό το χαρακτηριστικό δεν έχει ακόμα προστεθεί Όμως, μπορεί να υλοποιηθεί με περιορισμούς όπως CHECK(typeof(x)='integer').
Πολλές διεργασίες υπολογιστή ή νήματα μπορεί να προσπελάζουν την ίδια βάση δεδομένων ταυτόχρονα. Πολλές προσπελάσεις ανάγνωσης μπορούν να ικανοποιηθούν παράλληλα. Μια πρόσβαση εγγραφής μπορεί να ικανοποιηθεί μόνο αν καμιά άλλη πρόσβαση δεν εξυπηρετείται την ίδια στιγμή. Αλλιώς, η πρόσβαση εγγραφής αποτυγχάνει με ένα κωδικό σφάλματος (ή μπορεί να ξαναγίνει αυτόματη προσπάθεια μέχρι τη λήξη χρόνου). Αυτή η ταυτόχρονη κατάσταση πρόσβασης μπορεί να αλλάξει όταν αντιμετωπίζονται προσωρινοί πίνακες. Αυτός ο περιορισμός χαλάρωσε στην έκδοση 3.7 όταν η write-ahead logging (WAL) ενεργοποιήθηκε ενεργοποιώντας ταυτόχρονες αναγνώσεις και εγγραφές.
Ένα αυτόνομο πρόγραμμα που λέγεται sqlite3 παρέχεται που μπορεί να χρησιμοποιηθεί για να δημιουργήσει μια βάση δεδομένων, να ορίσει τους πίνακες μέσα της, να εισάγει και να αλλάξει γραμμές, να εκτελέσει ερωτήματα και να διαχειριστεί ένα αρχείο βάσης δεδομένων SQLite. Αυτό το πρόγραμμα είναι ένα μοναδικό εκτελέσιμο αρχείο στη μηχανή οικοδεσπότη. Εξυπηρετεί επίσης ως παράδειγμα για εγγραφή εφαρμογών που χρησιμοποιούν τη βιβλιοθήκη SQLite.
Η πλήρης υποστήριξη Unicode του SQLite είναι προαιρετική.
Το SQLite έχει αυτόματη δοκιμή οπισθοχώρησης πριν από κάθε έκδοση. Πάνω από 2 εκατομμύρια δοκιμές εκτελούνται ως μέρος της της επαλήθευσης της έκδοσης. Ξεκινώντας στις 10 Αυγούστου 2009 με την έκδοση SQLite 3.6.17, οι εκδόσεις του SQLite έχουν 100% κάλυψη των δοκιμών κλάδου, ένα από τα συστατικά της κάλυψης κώδικα.
Από την έκδοση 3.8.2 μπορείτε να δημιουργήσετε πίνακες χωρίς rowid.

Ανάπτυξη

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