SQLite

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση
SQLite
SQLite370.svg
Ανάπτυξη D. Richard Hipp
Αρχική έκδοση Αύγουστος 2000
Γραμμένο σε C
Λειτουργικό σύστημα Διαλειτουργικό
Μέγεθος 658 KiB
Είδος RDBMS (ενσωματωμένη)
Άδεια Δημόσιος τομέας[1]
Ιστότοπος sqlite.org

Το SQLite (ɛskjuːɛlˈlaɪt/[2] ή /ˈsiːkwəl.laɪt/[3]) είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων που περιέχεται σε μια C προγραμματιστική βιβλιοθήκη. Σε αντίθεση με άλλα συστήματα διαχείρισης βάσης δεδομένων, το SQLite δεν είναι μια ξεχωριστή διεργασία που προσπελάζεται από μια εφαρμογή πελάτη, αλλά ένα ενσωματωμένο μέρος της.

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

Το SQLite είναι μια δημοφιλής επιλογή ως ενσωματωμένη βάση δεδομένων για τοπική αποθήκευση ή αποθήκευση πελάτη σε λογισμικό εφαρμογής όπως ως φυλλομετρητής. Είναι η πιο πλατιά αναπτυσσόμενη μηχανή βάσης δεδομένων και χρησιμοποιείται σήμερα από πολλούς φυλλομετρητές ευρείας χρήσης , από λειτουργικά συστήματα και από ενσωματωμένα συστήματα, μεταξύ άλλων.[4] Το SQLite έχει συνδέσεις με πολλές γλώσσες προγραμματισμού.

Η πηγαία γλώσσα για το SQLite είναι κοινό κτήμα.[1][5]

Σχεδιασμός[Επεξεργασία | επεξεργασία κώδικα]

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

Ιστορικό[Επεξεργασία | επεξεργασία κώδικα]

Ο D. Richard Hipp σχεδίασε το SQLite την άνοιξη του 2000 ενώ δούλευε στη General Dynamics σε συμβόλαιο με το Ναυτικό των Ηνωμένων Πολιτειών.[6] Ο 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, μια ενσωματώσιμη κειμενοστραφή βάση δεδομένων.[7] Ο Howard Chu μετέφερε το SQLite 3.7.7.1 για να χρησιμοποιεί Openldap MDB αντί για τον αρχικό κώδικα Btree και το απεκάλεσε προσαρμογή στο SQLite. Σε μια δοκιμή εισαγωγής 1000 εγγραφών ήταν 20 φορές πιο γρήγορο.[8][9]

Χαρακτηριστικά[Επεξεργασία | επεξεργασία κώδικα]

Το SQLite υλοποιεί το μεγαλύτερο μέρος του προτύπου SQL-92 για το SQL, αλλά του λείπουν κάποια χαρακτηριστικά. Για παράδειγμα, έχει μερική υποστήριξη για εναύσματα βάσης δεδομένων και δεν μπορεί να γράψει σε προβολή (βάσης δεδομένων) (υποστηρίζει όμως ΣΤΗ ΘΕΣΗ τους εναύσματα που παρέχουν αυτή τη λειτουργία). Αν και υποστηρίζει σύνθετα ερωτήματα, έχει ακόμα περιορισμένη υποστήριξη για ALTER TABLE, καθώς δεν μπορεί να τροποποιήσει ή να διαγράψει στήλες.[10]

Το SQLite χρησιμοποιεί ένα ασυνήθιστο Σύστημα τύπων για μια συμβατή με SQL DBMS· αντί της απόδοσης ενός τύπου σε μια στήλη όπως συμβαίνει στα περισσότερα συστήματα βάσεων δεδομένων SQL, οι τύποι αποδίδονται σε ατομικές τιμές· με όρους γλώσσας είναι έχει δυναμικό τύπο. Επιπλέον, έχει αδύναμο τύπο σε μερικούς από τους ίδιους τρόπους που έχει η Perl: κάποιος μπορεί να εισάγει μια Συμβολοσειρά σε μια στήλη ακεραίων (αν και το SQLite θα προσπαθήσει αρχικά να μετατρέψει τη συμβολοσειρά σε ακέραιο, αν ο προτιμώμενος τύπος της στήλης είναι ακέραιος). Αυτό προσθέτει ευκινησία στις στήλες, ειδικά όταν συνδέεται σε έναν δυναμικό τύπο γλώσσας σεναρίου. Όμως, η τεχνική δεν μεταφέρεται σε άλλα προϊόντα SQL. Μια συνηθισμένη κριτική είναι ότι σε ένα σύστημα τύπου SQLite λείπει ο μηχανισμός ολοκληρωμένων δεδομένων που παρέχεται από από στήλες με δυναμικό τύπο σε άλλα προϊόντα. Ο ιστότοπος του SQLite περιγράφει μια κατάσταση "αυστηρής συγγένειας", αλλά αυτό το χαρακτηριστικό δεν έχει ακόμα προστεθεί[11] Όμως, μπορεί να υλοποιηθεί με περιορισμούς όπως CHECK(typeof(x)='integer').[6]

Πολλές διεργασίες υπολογιστή ή νήματα μπορεί να προσπελάζουν την ίδια βάση δεδομένων ταυτόχρονα. Πολλές προσπελάσεις ανάγνωσης μπορούν να ικανοποιηθούν παράλληλα. Μια πρόσβαση εγγραφής μπορεί να ικανοποιηθεί μόνο αν καμιά άλλη πρόσβαση δεν εξυπηρετείται την ίδια στιγμή. Αλλιώς, η πρόσβαση εγγραφής αποτυγχάνει με ένα κωδικό σφάλματος (ή μπορεί να ξαναγίνει αυτόματη προσπάθεια μέχρι τη λήξη χρόνου). Αυτή η ταυτόχρονη κατάσταση πρόσβασης μπορεί να αλλάξει όταν αντιμετωπίζονται προσωρινοί πίνακες. Αυτός ο περιορισμός χαλάρωσε στην έκδοση 3.7 όταν η write-ahead logging (WAL) ενεργοποιήθηκε ενεργοποιώντας ταυτόχρονες αναγνώσεις και εγγραφές.[12]

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

Η πλήρης υποστήριξη Unicode του SQLite είναι προαιρετική.[13]

Το SQLite έχει αυτόματη δοκιμή οπισθοχώρησης πριν από κάθε έκδοση.[14] Πάνω από 2 εκατομμύρια δοκιμές εκτελούνται ως μέρος της της επαλήθευσης της έκδοσης. Ξεκινώντας στις 10 Αυγούστου 2009 με την έκδοση SQLite 3.6.17, οι εκδόσεις του SQLite έχουν 100% κάλυψη των δοκιμών κλάδου, ένα από τα συστατικά της κάλυψης κώδικα.

Από την έκδοση 3.8.2 μπορείτε να δημιουργήσετε πίνακες χωρίς rowid.[15]

Ανάπτυξη[Επεξεργασία | επεξεργασία κώδικα]

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

Αποδοχή[Επεξεργασία | επεξεργασία κώδικα]

Γλώσσες προγραμματισμού[Επεξεργασία | επεξεργασία κώδικα]

Το SQLite έχει συνδέσεις για έναν μεγάλο αριθμό γλωσσών προγραμματισμού, που συμπεριλαμβάνουν :

Ενδιάμεσο λογισμικό[Επεξεργασία | επεξεργασία κώδικα]

  • Η προσαρμογή ADO.NET, αναπτύχθηκε αρχικά από τον Robert Simpson, διατηρείται από κοινού με τους προγραμματιστές του SQLite από τον Απρίλιο του 2010.[21]
  • Ο οδηγός ODBC έχει αναπτυχθεί και συντηρείται ξεχωριστά από τον Christian Werner.[22] Ο οδηγός ODBC του Werner αποτελεί τη συνιστώμενη μέθοδο σύνδεση για πρόσβαση της SQLite από το OpenOffice.org.[23]
  • Το πρόγραμμα COM (ActiveX) κάνει προσβάσιμο το SQLite στα Windows σε γλώσσες σεναρίου όπως JScript and VBScript. Αυτό προσθέτει δυνατότητες βάσης δεδομένων στις εφαρμογές HTML (HTA).[24]
  • Το XULRunner χρησιμοποιεί SQLite

Φυλλομετρητές ιστού[Επεξεργασία | επεξεργασία κώδικα]

  • Οι φυλλομετρητές Google Chrome, Opera, Safari και ο Android Browser επιτρέπουν την αποθήκευση πληροφοριών καθώς και την ανάκτησή τους από μια βάση δεδομένων SQLite μέσα από τον φυλλομετρητή, χρησιμοποιώντας την τεχνολογία Web SQL Database.
  • Τα Mozilla Firefox και Mozilla Thunderbird αποθηκεύουν πολλά δεδομένα διαμόρφωσης (σελιδοδείκτες, μπισκότα, επαφές κ.λ.π.) σε εσωτερικά διαχειριζόμενες βάσεις δεδομένων SQLite και προσφέρουν ακόμα ένα πρόσθετο για να διαχειριστείτε βάσεις δεδομένων SQLite.

Πλαίσια εφαρμογών ιστών[Επεξεργασία | επεξεργασία κώδικα]

  • Το Bugzilla, η βάση δεδομένων σφαλμάτων του Mozilla γραμμένη σε Perl μπορεί να χρησιμοποιήσει το SQLite για να αποθηκεύσει δεδομένα και ρυθμίσεις.
  • Το Django, ένα πλαίσιο ιστού Python, υποστηρίζει το SQLite3 από προεπιλογή.[25]
  • Από την έκδοση 7, το Drupal, ένα Σύστημα διαχείρισης περιεχομένου με βάση το PHP για τη δημιουργία ιστότοπων και ιστολογίων, έχει μια επιλογή για εγκατάσταση χρησιμοποιώντας SQLite.[26]
  • Το προεπιλεγμένο σύστημα διαχείρισης βάσεων δεδομένων του Ruby on Rails είναι επίσης SQLite.
  • Το web2py, ένα πλαίσιο ιστού Python, έχει ως προεπιλεγμένο σύστημα διαχείρισης βάσεων δεδομένων το SQLite.

Διάφορα[Επεξεργασία | επεξεργασία κώδικα]

  • Το Skype είναι μια ευρέως αναπτυσσόμενη εφαρμογή που χρησιμοποιεί το SQLite.[27]
  • Τα Συστήματα Adobe χρησιμοποιούν το SQLite ως μορφή των αρχείων τους στο Adobe Photoshop Lightroom, μια πρότυπη βάση δεδομένων στο Adobe AIR και εσωτερικά στο Adobe Reader.[28]
  • Οι εγκαταστάσεις διαχείρισης υπηρεσιών που χρησιμοποιούνται για διαχείριση υπηρεσιών στο Solaris και τα λειτουργικά συστήματα OpenSolaris, χρησιμοποιούν εσωτερικά SQLite.
  • Το Flame, ένα πρόγραμμα για κακόβουλο λογισμικό που χρησιμοποιείται για κυβερνοκατασκοπία, χρησιμοποιεί το SQLite για την αποθήκευση των δεδομένων που συλλέγει.
  • Η γλώσσα προγραμματισμού Xojo έχει ενσωματωμένη υποστήριξη του SQLite και στην επιφάνεια εργασίας και στα web frameworks.

Λειτουργικά συστήματα[Επεξεργασία | επεξεργασία κώδικα]

Λόγω του μικρού του μεγέθους, το SQLite είναι καλά προσαρμοσμένο σε ενσωματωμένα συστήματα και περιλαμβάνεται επίσης στα:

Όμως, είναι επίσης κατάλληλο για λειτουργικά συστήματα επιφάνειας εργασίας· η Apple το υιοθέτησε ως μια επιλογή στο API δεδομένων πυρήνα του OS X από την αρχική υλοποίηση σε Mac OS X 10.4 και πέρα καθώς και για τη διαχείριση βίντεο και τραγουδιών στο iPhone.

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Αναφορές[Επεξεργασία | επεξεργασία κώδικα]

  1. 1,0 1,1 «SQLite Copyright». sqlite.org. http://www.sqlite.org/copyright.html. Ανακτήθηκε στις May 17, 2010. 
  2. An Introduction to SQLite >00:01:14< Google Inc. (video) (May 31, 2006) (ανακτήθηκε March 23, 2010)
  3. An Introduction to SQLite >00:48:15< Google Inc. (May 31, 2006) (ανακτήθηκε March 23, 2010)
  4. «Most Widely Deployed SQL Database Estimates». Sqlite.org. http://sqlite.org/mostdeployed.html. Ανακτήθηκε στις May 11, 2011. 
  5. «The source code for SQLite is in the public domain». Sqlite.org. http://www.sqlite.org/. Ανακτήθηκε στις May 11, 2011. 
  6. 6,0 6,1 Owens, Michael (2006). The Definitive Guide to SQLite. Apress. doi:10.1007/978-1-4302-0172-4_1. ISBN 978-1-59059-673-9. 
  7. «Interview: Richard Hipp on UnQL, a New Query Language for Document Databases». InfoQ. August 4, 2011. http://www.infoq.com/news/2011/08/UnQL. Ανακτήθηκε στις October 5, 2011. 
  8. MDB: A Memory-Mapped Database and Backend for OpenLDAP, Howard Chu, [MDB: A Memory-Mapped Database and Backend for OpenLDAP LDAPCon 2011].
  9. sqlightning source code.
  10. «SQL Features That SQLite Does Not Implement». SQLite. January 1, 2009. http://www.sqlite.org/omitted.html. Ανακτήθηκε στις October 14, 2009. 
  11. «Frequently Asked Questions». SQLite. January 26, 2009. http://www.sqlite.org/faq.html. Ανακτήθηκε στις February 7, 2009. 
  12. «Write Ahead Logging in SQLite 3.7». SQLite. http://www.sqlite.org/wal.html. Ανακτήθηκε στις September 3, 2011. «WAL provides more concurrency as readers do not block writers and a writer does not block readers. Reading and writing can proceed concurrently» 
  13. «Case-insensitive matching of Unicode characters does not work». SQLite Frequently Asked Questions. Sqlite.org. http://www.sqlite.org/faq.html#q18. Ανακτήθηκε στις May 11, 2011. 
  14. «How SQLite Is Tested». SQLite. http://www.sqlite.org/testing.html. Ανακτήθηκε στις September 12, 2009. 
  15. ReleaseLog SQLite.org, visited 8th December 2013
  16. «Fossil: Fossil Performance». Fossil-scm.org. August 23, 2009. http://www.fossil-scm.org/index.html/doc/tip/www/stats.wiki. Ανακτήθηκε στις September 12, 2009. 
  17. JSPDO JavaScript database access abstraction API
  18. DBD::SQLite: Perl DBI Interface to SQLite
  19. PySQLite: Python bindings for SQLite
  20. SQLite/Ruby: Ruby bindings for SQLite
  21. http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
  22. http://www.ch-werner.de/sqliteodbc/
  23. http://documentation.openoffice.org/HOW_TO/data_source/SQLite.pdf
  24. «sqlite — Sqlite Wrappers». SQLite. February 7, 2009. http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers. Ανακτήθηκε στις February 7, 2009. 
  25. «Databases». Django Documentation. Django Software Foundation. https://docs.djangoproject.com/en/dev/ref/databases/#sqlite-notes. Ανακτήθηκε στις 13 November 2012. 
  26. «Drupal 7». http://drupal.org/drupal-7.0/. 
  27. «Skype client using SQLite?». Mail-archive.com. August 28, 2007. http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27326.html. Ανακτήθηκε στις June 14, 2010. 
  28. «Well-Known Users of SQLite». Sqlite.org. http://sqlite.org/famous.html. Ανακτήθηκε στις June 14, 2010. 
  29. «Well-known Users of SQLite». Sqlite.org. http://www.sqlite.org/famous.html. Ανακτήθηκε στις June 14, 2010. 

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

Εξωτερικοί σύνδεσμοι[Επεξεργασία | επεξεργασία κώδικα]

Commons logo
Τα Wikimedia Commons έχουν πολυμέσα σχετικά με το θέμα