Di recente abbiamo parlato degli aspetti da prendere in considerazione quando si sceglie un database per il proprio progetto. Oggi vogliamo focalizzarci maggiormente su due database in particolare: MongoDB e MySQL, per evidenziarne pregi, difetti e differenze. Entrambi sono progetti open source tuttavia il primo è un DBMS (Database management system) non relazionale mentre il secondo è un classico RDBMS (Relational database management system).
Rispetto a MySQL, MongoDB non sfrutta una struttura tradizionale basata su tabelle dei database relazionali ma si basa sui documenti in stile JSON con schema dinamico, su MongoDB vengono chiamati BSON, rendendo l'integrazione di dati di alcuni tipi di applicazioni più facile e performante. Ma andiamo ad esaminare i vari ambiti in cui i due database si differenziano.
Data Modelling
Con un database SQL tradizionale come MySQL, abbiamo bisogno di una struttura dati fissa. Si creano quindi le tabelle richieste, le colonne e si specifica il tipo di dati per ogni colonna. Invece su MongoDB gli sviluppatori non sono obbligati a creare un database manualmente, questo perché MongoDB compie automaticamente la maggior parte delle operazioni iniziali. MongoDB lavora sull'idea delle collezioni, raccolte di dati paragonabili alle tabelle, ma senza un numero fisso di colonne.
Ogni documento (l'equivalente di un record MySQL) in una raccolta può presentare una struttura diversa e avere o meno lo stesso numero di campi (l'equivalente delle colonne di MySQL). Quindi si può dire che MySQL lavora con uno schema fisso, mentre MongoDB con uno schema flessibile.
Ricerca dei dati
Ricercare i dati in un database MySQL è un'operazione relativamente semplice. Il supporto delle join aiuta a combinare dati da più tabelle e le foreign key consentono di creare relazioni tra dataset mantenendone l'integrità. Tuttavia per una ricerca efficace è richiesta una conoscenza approfondita del modello dei dati di riferimento.
Le join non sono invece disponibili in MongoBD. Grazie al supporto per la nidificazione ci si aspetta infatti che tutti i dati siano presenti in un solo documento.
Vincoli e integrità dei dati
MySQL non accetta alcun tipo di dato che non rispetti gli standard imposti dal creatore del database. Tuttavia vincoli come foreign key, o chiavi primarie con indici univoci, richiedono una particolare attenzione da parte degli sviluppatori.
MongoDB offre diversi tipi di indici basati sull'integrità, incluso l'indice univoco, ma non esiste un vincolo sul tipo di dato. Ecco perché gli sviluppatori che lavorano da tempo su MongoDB sfruttano in modo intensivo gli ORM (Object Relationship Mapper).
Scalabilità
Quando una'applicazione o un servizio inizia ad avere successo, il carico di lavoro aumenta e bisogna incrementare il numero di server dedicati. In questo contesto la capacità di scalare per un database diventa vitale. I DBMS come MySQL sono stati creati per scalare verticalmente, ad esempio si scala incrementando l'hardware sulla stessa macchina.
MongoDB, al contrario, è stato progettato per scalare orizzontalmente, è infatti possibile configurare più nodi che si replicano automaticamente senza un singolo punto di errore, cosi da evitare che il collasso di un server porti all'interruzione del servizio.
Malgrado in questi anni gli sviluppatori di MySQL abbiamo apportato diversi miglioramenti in questo senso, grazie a MySQL Cluster, le sue performance di scalabilità non sono paragonabili a quelle di MongoDB.
Via Linuxandubuntu