Storie di database: l'elefante, il delfino e la piuma
Di recente si è verificata una curiosa successione di avvenimenti: la Sun ha comprato MySQL e a distanza di circa un anno Oracle ha comprato Sun. Questo vuol dire che un mostro dei DB commerciali ora possiede e controlla il più usato dei DB open source. E già si ventilano in giro fork e contro-fork che manco il PCI dopo la caduta del Muro.
La questione è interessante e sarà interessante vedere come la comunità reagirà al controllo di un prodotto molto usato e amato da parte di un'entità commerciale che non ha una grande storia di supporto al Software Libero, ma che ha appena acquistato una società che al Software Libero ha contribuito in maniera enorme.
Starò a vedere come va a finire, augurando agli sviluppatori, agli utenti e al prodotto di non subire grossi danni, ma per i miei progetti la cosa non mi riguarderà. E' un po' di tempo che sono giunto alla conclusione che MySQL occupa una posizione di mezzo che, piuttosto che essere virtuosa, è di imperfetto compromesso. PostgreSQL è un prodotto più maturo, con funzionalità più avanzate per quello che riguarda transazioni, integrità dei dati e supporto di costrutti SQL più complessi. L'amministrazione non mi pare più ardua di quella di MySQL (questione di gusti, forse, ma la differenza se c'è è minima) e se voglio che i miei dati siano gestiti correttamente e che il DB mi fornisca buone garanzie di integrità la mia scelta ricade senza dubbio su PostgreSQL.
Ci sono volte in cui farebbe comodo avere un DB, perché le nostre strutture dati si sono complicate o sono cresciute e non stanno più in memoria, ma non vogliamo sobbarcarci la gestione di un server DB. Ad esempio, stiamo scrivendo uno script da far girare su più server una sola volta e non vogliamo installare software aggiuntivi o gestire utenze e password. E in questi casi è SQLite a fare al caso nostro. E' un sistema di gestione DB embedded, costituito da una libreria che viene utilizzata dal nostro programma e gli permette di effettuare operazioni SQL usando come supporto un file. Nessun programma server in esecuzione, nessuna gestione degli utenti, nessuna installazione e configurazione di software aggiuntivi. Il supporto dei costrutti SQL è incompleto, ma comprende abbastanza da soddisfare il 95% degli usi standard (numero ricavato durante un ispirato colpo di sonno).
Visto che è supportato dai driver generici di connessione a DB (ODBC, DBI & co.), usare SQLite nelle fasi iniziali di un progetto permette un passaggio quasi indolore dalla fase di prototipo a un prodotto più completo e stabile. Basta creare un DB (PostgreSQL, per i motivi esposti sopra, o MySQL per gli afiocinados) con la stessa struttura, cambiare i parametri di connessione e il driver usato e salvo qualche modifica qua e là il gioco è fatto.