Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Php e SQLite, una piccola grande novità

SQLite è un'estensione di Php 4 che permette di avere un database su un unico file
SQLite è un'estensione di Php 4 che permette di avere un database su un unico file
Link copiato negli appunti

Nota: i contenuti di questo articolo sono obsoleti e non saranno più aggiornati. Una versione aggiornata è però disponibile a questo link.

«SQLite è una libreria C che implementa un motore SQL incorporabile all'interno
delle applicazioni. I programmi che si interfacciano a questa libreria possono accedere ad un database SQL senza eseguire un processo RDBMS separato [...] SQLite non è una libreria client utilizzata per collegarsi ad un grande server di database, SQLite è il server. La libreria legge direttamente dai file di database su disco e scrive direttamente in essi...».

Questa è la definizione che l'autore Richard Hipp (http://www.sqlite.org/, http://www.hwaci.com/) dà del piccolo database engine opensource che ha iniziato a sviluppare quasi 3 anni fa: una libreria che utilizza un proprio formato per immagazzinare dati su un database costituito da un unico file e che consente di accedere ad essi attraverso SQL.

Oggi si tratta un progetto maturo, tanto che numerosissimi linguaggi (tra cui C/C++, Java, Perl) hanno a disposizione un wrapper per SQLite.

E per quanto riguarda Php? Già da alcuni mesi esiste un'estensione (http://pear.php.net/package/SQLite) per Php 4 disponibile nel PECL (PHP Extension Code Library) di PEAR (http://www.pear.org ), ma l'entusiasmo degli sviluppatori per SQLite è tale che in Php 5 (ancora in beta release al momento in cui scrivo) non sarà necessaria alcuna installazione.

Come se non bastasse pare che questo diverrà il metodo di default per lo "storage" delle sessioni al posto dei tradizionali file di testo.

Nei prossimi paragrafi ci occuperemo dell'installazione di SQLite con Php 4, successivamente cercheremo di evidenziare quando questo piccolo "database engine" può rivelarsi utile, nel tentativo di ridimensionare alcuni frettolosi entusiasmi.

A chi già non conscesse PEAR (PHP Extension and Application Repository) e PECL consiglio la lettura dell'articolo PEAR: una montagna di codice PHP pubblicato su questo stesso sito alcuni giorni fa.

Nota: i contenuti di questo articolo sono obsoleti e non saranno più aggiornati. Una versione aggiornata è però disponibile a questo link.

Istallazione di SQLite per Php 4

Tutto ciò che ci serve è l'estensione presente in PEAR.

Nei sistemi operativi Unix-like: l'installazione richiede solo un semplice

$ pear install sqlite

In Windows è necessario scaricare la libreria php_sqlite.dll dal "repository" http://snaps.php.net/win32/PECL_STABLE/ e inserirla nella directory "extensions" di Php come qualsiasi altra estensione. Successivamente bisognerà modificare il file di configurazione php.ini alla sezione "Dynamic Extensions" aggiungendo la riga seguente:

extension=php_sqlite.dll

Il gioco è fatto, abbiamo già tutto ciò che ci serve in quanto l'estensione comprende anche la libreria che implementa il database engine.

La lista delle funzioni per SQLite è descritta nell'apposito capitolo del manuale ufficiale di Php.net,
la sintassi risulterà subito abbastanza familiare agli utenti Mysql.

Al momento sembrano garantite la maggior parte delle funzionalità di SQLite, se escludiamo la possibilità di connessioni remote (comunque non troppo utili in un database su file unico) e qualche bug nella gestione dei messaggi d'errore.

Nota: i contenuti di questo articolo sono obsoleti e non saranno più aggiornati. Una versione aggiornata è però disponibile a questo link.

Quale sarà il ruolo di SQLite?

Questo piccolo motore di database supporta un "dialetto" SQL più ampio e più standard rispetto a Mysql (basti pensare ai triggers), inoltre da diversi benchmark riportati in sqlite.org risulta in modo evidente che in fase di lettura le sue performance sono imbattibili (ancor più se paragonato a Postgres).

Allora SQLite è destinato a sostituirsi a Mysql nell'idilliaco rapporto che lo lega a Php?
Decisamente no: le prestazioni scadenti in fase di scrittura ci forniscono diversi indizi per leggere quei benchmark in modo più obiettivo.

SQLite non è un RDBMS (Relational Database Management System), non abbiamo a che fare con un server di database, ma con qualcosa di simile al "JET engine" di Microsoft (più noto come Access). Un server di database è un robusto sistema di gestione che rimane in esecuzione permanente in background, supervisiona gli accessi e inoltra le richieste ai database che si trovano sotto il suo controllo.

Non è questo il caso di SQLite, che utilizza un unico file: così quando un processo tenta di accedere in scrittura, il motore deve predisporre un blocco, mettere eventuali altri processi in coda, e farli passare necessariamente uno alla volta, pena la corruzione dei dati. Questo significa che una query insert/update/delete comporta di fatto il lock dell'intero database.

SQLite è un database di "sola lettura", nel senso che non è adatto a situazioni di multiutenza pesante in cui concorrano processi di lettura e scrittura: chi ha davvero bisogno di Mysql o Postgres per le proprie applicazioni rimarrà impassibile dinanzi a questa novità.
Il vero ruolo che SQLite assumerà è di sostituto dei file di testo e dei I file DBM e le funzioni dba_* (con quest'ultimi ha molto in comune), infatti l'enorme comodità di poter accedere ai dati attraverso SQL e di avere un intero database su un unico file fa passare in secondo piano un minimo peggioramento delle prestazioni.

Nota: i contenuti di questo articolo sono obsoleti e non saranno più aggiornati. Una versione aggiornata è però disponibile a questo link.

SQLite e sessioni

Abbiamo già accennato al fatto che in Php 5, SQLite potrebbe sostituire i file di testo come mezzo per immagazzinare i dati di sessione, la questione delle reali prestazioni di SQLite ha dato luogo a qualche perplessità proprio in questo caso; infatti con il sistema attuale ogni sessione scrive in un proprio file "dedicato" mentre con SQLite dovrebbero tutte accedere ad un unico file.

Da alcuni benchmark sembra che in questo ruolo SQLite sia in grado di sostenere circa 150 request al secondo: non si tratta affatto di un cattivo risultato ma, grazie al sistema dei file distinti, i file di testo gestiscono intorno a 400 request al secondo.
Potete seguire l'interessante dibattito nella mailing list PHP Developer.

La cosa lascerà abbastanza indifferente chi ha l'abitudine di memorizzare le sessioni su RDBMS.

Conclusioni

SQLite è un'interessante novità, un database su file unico che si presenta come un comoda alternativa ai file di testo o DBM, e può rimpiazzare Mysql o Postgres in progetti di piccole dimensioni che non necessitano di un vero RDBMS. In un prossimo articolo affronteremo nel dettaglio tutte le sue funzionalità.

Ti consigliamo anche