sabato 28 novembre 2009

Un DBMS piccolo piccolo:SQLite


Oggi vi presento SQLIte, una libreria software scritta in C che implementa un RDBMS SQL. Essendo una libreria è incorporabile in altri programmi scritti non solamente in C/C++: esistono infatti molti language bindings tra cui quelli per Python,PHP e Tlc.
Ma bando alle ciance,ecco le sue caratteristiche principali(tratte da Wikipedia) che lo rendono un vero gioiellino utilissimo in una miriade di situazioni:
  • È molto piccolo (meno di 500KB per l'intera libreria alla versione 3.6.14).
  • È molto veloce; in molti casi più di MySQL e PostgreSQL.
  • Il codice sorgente è liberamente disponibile, chiaro e ben commentato
  • È in grado di interpretare stringhe SQL e a differenza di altre librerie simili; supporta buona parte dello standard SQL92.
  • L'API è semplice da utilizzare
  • Ha transazioni atomiche, consistenti, isolate e durabili (ACID), anche in caso di crash di sistema o blackout.
  • È multipiattaforma.
  • Contiene un programma di utilità che permette l'accesso al database anche manualmente (come su MySQL, Postgresql e tanti altri DB) o tramite scripting.
  • Supporta database che possono essere anche molto grandi; attualmente il limite è 2TB (241 byte).
  • Il database consiste di un unico file il cui formato interno è indipendente dalla piattaforma e dal relativo Ordine dei byte.
  • Non ha dipendenze esterne.
  • Normalmente non richiede alcun lavoro di amministrazione, ma supporta il comando SQL VACUUM nel caso si renda necessario comprimere il database.
Ovviamente ha anche dei limiti:
  • Non possiede le stored procedure.
  • Non prevede la gestione dei permessi, demandata al software con cui si interagisce con il database o al File System.
  • Non ha una vera gestione della concorrenza: le applicazioni che lo utilizzano, se necessario, devono implementarla.
  • Per garantire la coerenza del file del database si appoggia al lock del File System e quindi può dare problemi qualora quest'ultimo non lo implementi correttamente ad esempio per risorse in rete (come NFS).
  • Non offre alcuna cache per le query (e non ne ha la possibilità, non esistendo un processo server centrale).
  • Non ha protocolli di rete, non essendo utilizzabile come programma standalone; è possibile utilizzare un database in remoto, ma solo servendosi del File system del sistema operativo, con prestazioni difficilmente accettabili.
  • Non è in grado di gestire dati binari in modo sicuro.
  • Non supporta alcuni importanti comandi SQL quali RIGHT e FULL OUTER JOIN.
  • Non supporta le sottoquery variabili.
  • Non supporta la scrittura nelle viste
  • Non consente di modificare, cancellare o rinominare le colonne di una tabella: il comando ALTER TABLE è infatti limitato alla modifica del nome della tabella e all'aggiunta di colonne in coda alla stessa. Molti frontend di terze parti aggirano comunque il limite rigenerando in modo trasparente la tabella (perdendo però trigger e indici ad essa correlati).
  • Non supporta i trigger di tipo "FOR EACH STATEMENT".
  • Il supporto ai trigger ricorsivi ed ai vincoli sulle chiavi esterne, introdotto rispettivamente nelle versioni 3.6.18 e 3.6.19, deve essere attivato dal programmatore. Tale comportamento, dovuto alla compatibilità con le versioni precedenti, sarà modificato a partire dalla 3.7.
Come al solito concludo postando il link al sito ufficiale: www.sqlite.org

Nessun commento:

Posta un commento