Database MySQL contro tuttiL'impero
Microsoft è ed è quasi sempre stato anche in passato un fornitore di ottimi prodotti all'avanguardia in tutti i settori compreso quello dei Database. Il suo prodotto di punta infatti in questo campo è l'ormai noto
SQL Server giunto alla versione
2000.
A livello entry-level esiste invece
Access che molti non considerano un vero e proprio Database ed in effetti è così, un po' per i suoi limiti intrinseci che non permettono lo sviluppo di applicazioni molto scalabili, un po' per alcune mancanze di funzionalità quali
Triggers, Stored Procedures e via di seguito. Questo viene anche dal fatto che il prezzo è molto abbordabile. Nonostante tutto con Access si possono realizzare applicazioni e soluzioni molto rapidamente, senza molte difficoltà ed efficienti.
Dall'altra parte della sponda c'è il gigante dei Database,
Oracle con il suo ultimo
Oracle 10g che ha battuto tutti i record di performance.
In passato Oracle è sempre stato un
RDBMS (Relational Database Management System) non molto avvicinabile visti i suoi costi astronomici.
Recentemente però è stato deciso dal management un cambio di politica da questo punto di vista abbassando i costi di
Oracle Standard Edition fino a circa 5.000 $ per CPU. L'
Oracle Enterprise Edition invece è ancora inchiodato all'assurda cifra di circa 40.000 $ ! :)
Vicino a questi due colossi è nato diversi anni fa in Svezia un piccolo Database Open-Source, chiamato
MySQL. Fondata da due svedesi e un finlandese,
MySQL (il nome della omonima società) si è fatta strada durante gli anni e release dopo release ha raggiunto traguardi eccezionali, facendo rientrare
MySQL nella lista dei Database più utilizzati al mondo con oltre
4 milioni di installazioni. Certo non è all'altezza di Oracle o SQL Server ma si ritaglia un ottimo spazio nel settore, grazie anche ai suoi costi decisamente bassi, si parla di circa 220 ? per la versione
Standard e circa il doppio 440 ? per la versione
Pro.
Vorrei aggiungere che
MySQL ha al suo attivo grossi clienti del calibro di
Yahoo.com che usa il Database
MySQL addirittura nella sezione
Yahoo! Finance. Gli ultimi dati parlavano di un database di circa 40 giga, questo per farvi capire che carico riesce a sostenere questo database !
MySQL è multipiattaformaQuesto database è stato progettato per essere multipiattaforma. Era nato come
Database per Linux ma successivamente è stato portato anche su
Windows.
Questa decisione nonostante abbia portato dei costi più elevati dal punto di vista dello sviluppo ha aumentato però il target degli utenti calcolando che 9 computer su 10 utilizzano
Windows.
I bassi costi di licenza di
MySQL l'hanno fatto diventare negli anni il Database più usato sui siti Web di medio-basso livello ed infatti grazie all'unione con
PHP (anch'esso multipiattaforma) può diventare uno straordinario pacchetto per produrre applicazioni Web.
Infatti ci sono aziende che offrono Hosting sia su Windows sia su Linux e offrono come Database
MySQL associato a
PHP o ASP.
MySQL e .NETFatto questo discorso, vien da sè che
MySQL si può utilizzare anche per lo sviluppo di applicazioni
.NET in genere, quindi
ASP.NET o
WinForms con il linguaggio preferito
C# o
VB.NET o altri eventuali.
Visto che sui
Newsgroups e sul
Forum è un tema molto dibattuto quello relativo a
MySQL ho deciso appunto di scrivere qualcosa per mettere in grado tutti di programmare in .NET usando
MySQL come Database principale proprio perchè molte aziende così come molti privati non possono sostenere ed accolarsi costi di licenze e di gestione quali quelli di Oracle e SQL Server.
I limiti di MySQLTutto sembra piacevole fino a qui, ma non tutto è rose e fiori. Dobbiamo anche però segnalare che
MySQL ha dei limiti in alcuni casi rilevanti infatti mancano il supporto a:
-
Stored Procedures-
Triggers-
Unicode (per applicazioni multilingua internazionali)
-
Views-
Subquery-
AltroLa versione di
MySQL che ho scaricato è una
stable cioè è quella rilasciata per la produzione che dovrebbe essere "esente" da bug ed è numerata
4.0.18.
C'è disponibile sul sito un'altra versione la
4.1.1 che è quella in sviluppo che però già pare supporti due delle features mancanti che ho elencato qui sopra e cioè
Subquery e
Unicode. Nella versione
5.0 invece è previsto lo sviluppo del supporto alle
Stored Procedures.
Cosa mi serve per sviluppare con .NET usando MySQL ?Database Server Per prima cosa bjsogna installare il
Database Server vero e proprio. Lo potete trovere sul sito dedicato agli sviluppatori che trovate a questo indirizzo:
http://dev.mysql.com/ ">MySQL Developers
La versione che ho scaricato ed utilizzato è coem già detto la
4.0.18, cliccando su questo link giungerete direttamente alla pagina dei
Downloads dove ci saranno disponibili tutte le versioni, per
Windows,
Linux,
Mac, ecc.
http://dev.mysql.com/downloads/mysql/4.0.html ">Download MySQL 4.0.x
.NET Data ProviderCome ormai ben sapete il
.NET Framework 1.1 offre molte classi a disposizione per la connessione ai Database più disparati,
SQL Server (SqlConnection) in testa, ma anche
Oracle (OracleConnection) oppure le classi più generiche per collegarsi utilizzando drivers
OleDB o via ODBC (OleDbConnection/OdbcConnection).
Molto di quelli che ho sentito sui Newsgroups o sul Forum si ostinano a voler utilizzare queste ultime due classi per connettersi a MySQL con il risultato che poi si ha sempre qualche problemino.
Io consiglio sempre di scaricarsi un
.NET Data Provider per
MySQL quindi progettato ed ottimizzato per funzionare per questo Database.
Di
.NET Data Provider per MySQL ce ne sono diversi, sia
Freeware che
Commerciali. Naturalmente noi vogliamo spendere sempre meno e quindi mi sono dotato di uno
Freeware e fra l'altro anche
Open Source. Per completezza vi segnalo tre link che vi portano ad altrettanti Data Provider:
-
http://sourceforge.net/projects/mysqldrivercs/ ">MySQLDriverCS (free)
-
http://www.bytefx.com/ ">ByteFX (free)
-
http://crlab.com/mysqlnet/ ">MySQLDirect .NET Data Provider (commerciale)
Molti mi chiedono,
"ma qual è il migliore ?" Beh, la risposta non è così facile. Chiedendo agli autori di questi software ognuno tirerà l'acqua al suo mulino dicendo che il suo è il migliore.
In realtà bisognerebbe prendere tutti i Data Providers ed effettuare dei
Benchmarks dei test, e misurare le prestazioni così come fanno per esempio le riviste di settore nel testare i nuovi PC disponibili sul mercato.
Un client di amministrazioneMa non è finita qui. Come si fa a gestire poi il Database ? O si può fare tramite linea di comando con un client apposito o bisogna scaricare degli altri tools decisamente più comodi, molto più simili per chi la conosce alla
Microsoft Management Console per la gestione di molti prodotti Microsoft. Sempre sul sito
MySQL.com ho trovato due
Tools interessanti eccoli.
MySql Control Center 0.9.4Ancora in versione
Beta rappresenta uno strumento molto utile per la gestione di
MySQL dal punto di vista dei dati. Quindi vi permette di aggiungere alla TreeView i Server da amministrare, vi permette la gestione delle Tables, quindi creazione, modifica, inserimento dati, eliminazione ecc. Comprende un client per l'esecuzione delle query molto comodo. Inoltre si può amministrare il Server vedendo le sessioni e le statistiche, e per finire c'è la gestione della sicurezza con la creazione e la gestione degli utenti.
Diciamo che questo strumento a differenza del secondo è
più orientato agli sviluppatori.
Control Center
MySql Administrator 1.0.3Quest'altro Tool invece è
più orientato al sistemista. Anch'esso è molto semplice da utilizzare. Sulla sinistra c'è un menù molto gradevole grazie alle icone con stile XP che vi permette di accedere alle varie sotto aree.
Anche con questo Tool potete gestire la sicurezza e quindi gli utenti del Database, vedere le sessioni attive, modificare le impostazioni generali del Database, vedere lo stato di salute
Health grazie a grafici aggiornati in tempo reale molto simili a quelli del
Task Manager di Windows, leggere i
Logs e addirittura fare i
Backup e i
Restore dei
Cataloghi.
Administrator
I Grafici dell'Health del Database
C'è da sottolineare che
l'installazione di questi prodotti è molto lineare e semplice. Per ognuna c'è il pacchetto di setup con il classico setup.exe, l'intervento dell'utente è minimo e quindi non dovreste avere molti problemi.
Una volta giunti qui la parte più difficile è stata superata. Tutto quello che viene dopo sarà una passeggiata.
N.B. Vi ricordo che se vi connettete al Database con i client di amministrazione dovrete usare come nome utente
root e password vuota. Vi raccomando, se siete esposti su Internet, di modificare immediatamente la password e creare un nuovo utente di test per lo sviluppo.
N.B. La porta su cui è in ascolto il listener di MySQL è la
3306Visual Studio .NET e MySQLPer cominciare a lavorare con
.NET usando
MySQL si devono seguire alcuni passi obbligati che descriverò qui di seguito. Questa procedura vale sia che stiate sviluppando applicazioni Web (WebForms) sia applicazioni Windows (WinForms). In poche parole è necessario referenziare nel progetto l'
Assembly (libreria) del
.NET Data Provider, vi ricordo la libreria che vi permette di accedere al Database e quindi in definitiva ai dati.
La procedura è la solita, è necessario fare click con il tasto destro su
References nel
Solution Explorer e selezionare la voce
Add Reference.
Apparirà la classica finestra con i vari Assemblies registrati. Visto che il nostro
MySQLDriverCS non ci sarà, sarà necessario premere
Browser e andare a cercarlo. Nel mio caso il percorso era
C:\Program Files\MySQLDriverCS\dll\MySQLDriverCS.dll.
A questo punto è possibile operare con il Database.
N.B. Prima di poter effettivamente fare dei test vi consiglio, così come ho fatto io, di creare una tabella di Test sul Database utilizzando magari lo strumento indicato poco fa (
Control Center). Io ho creato una Tabella semplicissima chiamata
Employees contenente tre campi,
Name, Surname e RegistrationDate.
MySQL con WinFormsSe ora, avete una buona conoscenza di
ADO.NET e conoscete che cosa sono i
DataSet, i
DataAdapter e via di seguito, allora sarà tutto una passeggiata.
Vediamo subito un breve esempio in C#.
Ricordiamo come al solito che oltre ad aver referenziato l'Assembly è necessario referenzie il
namespace via codice con il classico
using (in C#) e
Imports in VB.NET.
using MySQLDriverCS;
Successivamente sulla mia
Form aggiungo una
DataGrid a cui assocerò dati provenienti dal Database
MySQL.
Il codice necessario è molto semplice, molto simile a quello che useremmo se ci connettessimo a un Database SQL o Access proprio perchè
ADO.NET aumenta l'
astrazione e fa si che noi ci troviamo a scrivere codice che è quasi sempre uguale, non tenendo conto della base dati sottostante.
Facendo un esempio pratico è come quando una decina d'anni fa, nel campo dello sviluppo dei Videogames non c'erano le
DirectX e il programmatore doveva sviluppare il supporto per le varie schede video. Ora il programmatore si occupa solo di scrivere il codice del suo gioco, e le DirectX fanno tutto il resto, cioè si interfacciano con i Drivers sottostanti. Allo stesso modo
ADO.NET e i
Data Provider fanno la stessa cosa con i Database.
Dicevamo, ecco il codice da inserire nell'evento
Load della Form:
DataSet ds=new DataSet();
MySQLConnection mysqlconn=new MySQLConnection("Server=Localhost;Data Source=test;UID=root;PWD=");
mysqlconn.Open();
MySQLDataAdapter da=new MySQLDataAdapter("SELECT * FROM EMPLOYEES",mysqlconn);
da.Fill(ds,"Employees");
dataGrid1.DataSource=ds.Tables["Employees"];
mysqlconn.Close();
ed ecco il risultato:
Una Datagrid riempita con dati di MySQL
MySQL e ASP.NETCon lo stesso procedimento possiamo andare a realizzare una applicazione Web. Questa volta però invece di fare un semplice
Binding ad una DataGrid andremo ad utilizzare un
MySQLDataReader e andremo a riempire l'oggetto
<asp:Literal (che renderizza il testo che andiamo ad assegnare alla proprietà
.Text) con i nomi delle tabelle contenute nel nostro Database di Test.
In altri Database come per esempio SQL Server c'è una Query particolare (es.
select * from sysobjects) da utilizzare per elencare gli oggetti del Database. In
MySQL è diversa ed è la seguente:
show tablesQuindi dopo aver iniziato una nuova applicazione
ASP.NET e aver creato una pagina ASP andiamo ad aggiungere il controllo Literal in questo modo:
<asp:Literal ID="Tables" runat="Server" />Il codice server-side in C# nell'evento
Load della pagina sarà il seguente:
if (!Page.IsPostBack)
{
MySQLConnection mysqlconn=new MySQLConnection("Server=localhost;Data Source=test;User ID=root;Password=;");
mysqlconn.Open();
MySQLCommand cmd=new MySQLCommand("show tables",mysqlconn);
MySQLDataReader dr=cmd.ExecuteReaderEx();
while (dr.Read())
Tables.Text+=dr[0].ToString() + "
";
mysqlconn.Close();
}
e dopo aver lanciato l'applicazione Web il risultato sarà questo:
La pagina Web mostra le tabelle del Database
ConclusioniCome abbiamo mostrato con pochi e semplici passi e grazie a un .NET Data Provider è possibile interfacciarsi e recuperare i dati da un Database
MySQL. Per molte aziende come già detto in precedenza una soluzione basata su Database più grossi come Oracle o SQL Server è impensabile/improponibile e quindi
MySQL costituisce effettivamente un'alternativa valida e molto economica da prendere seriamente in considerazione. Le sue mancanze e i suoi limiti vengono controbilanciati da elevate prestazioni e prezzi di licenza molto contenuti. Aggiungo infine che
MySQL supporta anche le transazioni e quindi grazie alla classe
MySQLTransaction potrete sfruttare anche questa potenzialità.