
Una delle decisioni più importanti che un sviluppatore deve prendere è quale database utilizzare. Negli ultimi anni, le opzioni sono state limitate a diverse varianti di database relazionali che supportano il linguaggio SQL (Structured Query Language). Questi includono MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 e molti altri.
Negli ultimi 15 anni, sono emersi molti nuovi database con l'approccio No-SQL. Tra questi ci sono archivi chiave-valore come Redis e Amazon DynamoDB, database a colonne larghe come Cassandra e HBase, archivi di documenti come MongoDB e Couchbase, così come database grafici e motori di ricerca come Elasticsearch e Solr.
In questo articolo cercheremo di capire SQL e NoSQL, senza entrare troppo nel loro funzionamento.
Inoltre, ci divertiremo un po' nel processo.
Spieghiamo SQL a nonna
Nonna, immagina che io non sia l'unico tuo nipote. Invece, mamma e papà si amavano come conigli, avevano 100 figli e poi ne hanno adottati altri 50.
Quindi, ami tutti noi e non vuoi dimenticare neanche uno dei nostri nomi, compleanni, gusti del gelato preferito, taglie dei vestiti, hobby, nomi dei coniugi, nomi dei discendenti e altri fatti super importanti. Ma affrontiamo la realtà. Hai 85 anni e la tua vecchia memoria semplicemente non ce la fa.
Fortunatamente, io, essendo il nipote più intelligente, posso aiutarti. Quindi vengo a casa tua, tiro fuori alcuni fogli di carta e ti chiedo di cuocere dei biscotti prima di iniziare.
Su un foglio di carta facciamo una lista intitolata «Nipoti». Ogni nipote è elencato con alcune informazioni essenziali su di lui, incluso un numero unico che ora indicherà quale nipote è. Inoltre, per essere organizzati, annotiamo gli attributi nominali nella parte superiore della lista, così sappiamo sempre quali informazioni contiene questa lista.
id
name
compleanno
ultima visita
taglia dei vestiti
gelato preferito
adottato
1
Jimmy
09-22-1992
09-01-2019
L
Menta cioccolato
false
2
Jessica
07-21-1992
02-22-2018
M
Strada rocciosa
true
…continuiamo la lista!
Lista dei nipoti
Dopo un po' inizi a capire tutto e siamo quasi alla fine della lista! Ma ti giri verso di me e dici: «Ci siamo dimenticati di aggiungere spazi per i coniugi, gli hobby, i nipoti!» Ma no, non ci siamo dimenticati! Questo viene dopo e richiede un nuovo foglio di carta.
Quindi tiro fuori un altro foglio di carta, e su di esso denominiamo la lista Coniugi. Aggiungiamo di nuovo gli attributi che ci interessano all'inizio della lista e iniziamo ad aggiungere nelle righe.
id
grandchild_id
name
compleanno
1
2
John
06-01-1988
2
9
Fernanda
03-05-1985
…più coniugi!
Lista dei coniugi
A questo punto spiego alla nonna che se vuole sapere chi è sposato con chi, deve solo abbinare id nella lista dei nipoti con grandchild_id nella lista dei coniugi.
Dopo un paio di decine di biscotti ho bisogno di schiacciare un pisolino. «Puoi continuare, nonna?» Vado a schiacciare un pisolino.
Torno dopo alcune ore. E sei grandiosa, nonna! Tutto sembra ottimo, tranne la lista degli hobby. Nella lista ci sono circa 1000 hobby. La maggior parte di essi si ripete; cosa è successo?
grandchild_id
hobby
1
andare in bicicletta
4
andare in bicicletta
3
andare in bicicletta
7
correre
11
andare in bicicletta
…continuiamo!
Scusa, mi ero completamente dimenticato di dirlo! Usando una lista, possiamo tenere traccia solo di degli hobby. Poi in un'altra lista dobbiamo tenere traccia di dei nipoti, che si dedicano a questo degli hobby. Stiamo per chiamarlo «Lista generale». Vedendo che non ti piace, inizio a preoccuparmi e torno in modalità lista.
id
hobby
1
andare in bicicletta
2
correre
3
nuoto
…hobby in più!
Lista degli hobby
Una volta che abbiamo la nostra lista di hobby, creiamo la nostra seconda lista e la chiamiamo «Passioni dei nipoti».
grandchild_id
hobby_id
4
1
3
1
7
2
…di più!
Lista generale degli hobby dei nipoti
Dopo tutto questo lavoro, la nonna ora ha un ottimo sistema di memorizzazione per tenere traccia della sua famiglia straordinariamente grande. E poi — per farmi rimanere più a lungo — mi fa una domanda magica: «Dove hai imparato a fare tutto questo?»
Basi di dati relazionali
Una base di dati relazionale è un insieme di tabelle formalmente descritte (nel nostro esempio, queste sono le liste) da cui è possibile accedere i dati o raccoglierle in vari modi senza la necessità di riorganizzare le tabelle basi di dati. Esistono molti tipi diversi di basi di dati relazionali, ma purtroppo la lista su un foglio di carta non è una di esse.
Una caratteristica distintiva dei database relazionali più popolari è il linguaggio di query SQL (Structured Query Language). Grazie a quest'ultimo, se la nonna trasferirà il suo sistema di memorizzazione su computer, potrà ottenere rapidamente risposte a domande come: «Chi non mi ha visitato lo scorso anno, è sposato e non ha hobby?»
Uno dei sistemi di gestione dei database SQL più popolari è MySQL, con codice sorgente aperto. È implementato principalmente come sistema di gestione di database relazionali (RDBMS) per applicazioni software basate su tecnologie web.
Alcune delle caratteristiche chiave di MySQL:
- È abbastanza conosciuto, ampiamente utilizzato e accuratamente testato.
- Ci sono molti sviluppatori qualificati con esperienza in SQL e database relazionali.
- I dati sono memorizzati in diverse tabelle, il che consente di stabilire facilmente relazioni utilizzando chiavi primarie e chiavi esterne (identificatori).
- È facile da usare ed efficiente, rendendolo ideale per grandi e piccole imprese.
- Il codice sorgente è disponibile con licenza GNU General Public License.
Ora dimentica TUTTO.
Spieghiamo a nonna NoSQL
Nonna, abbiamo una grande famiglia. Ci sono 150 nipoti! Molti di loro sono sposati, hanno figli, hanno hobby e così via. A tua età è impossibile ricordare tutto su di noi. Quello di cui hai bisogno è un sistema di memorizzazione!
Fortunatamente, io, non desiderando che tu dimenticassi il mio compleanno e il mio gusto preferito di gelato, posso aiutarti. Quindi corro al negozio più vicino, prendo un quaderno e torno a casa da te.
Il primo passo che faccio è scrivere "Nipoti" in caratteri grandi e in grassetto sulla copertina del quaderno. Poi sfoglio la prima pagina e comincio a scrivere tutto ciò che devi ricordare su di me. Dopo qualche minuto, la pagina appare più o meno così.
{
"_id":"dkdigiye82gd87gd99dg87gd",
"name":"Cody",
"birthday":"09-12-2006",
"last_visit":"09-02-2019",
"clothing_size":"XL",
"favorite_ice_cream":"Fudge caramel",
"adopted":false,
"hobbies":[
"videogiochi",
"computer",
"cucina"
],
"spouse":null,
"kids":[
],
"favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
"misc_notes":"Preferisce la torta di gelato per il compleanno invece della torta al cioccolato!"
} Io: “Sembra che sia tutto pronto!”
Nonna: “Aspetta, e gli altri nipoti?”
Io: “Giusto. Allora dedichiamo una pagina per ciascuno.”
Nonna: “Dovrò scrivere tutte le stesse informazioni per tutti, come ho fatto per te?”
Io: “No, solo se vuoi. Lasciami mostrare.”
Prendendo la penna da mia nonna, sfoglio la pagina e scrivo rapidamente informazioni sul mio cugino meno preferito.
{
"_id":"dh97dhs9b39397ss001",
"name":"Tanner",
"birthday":"09-12-2008",
"clothing_size":"S",
"friend_count":0,
"favorite_picture":null,
"remember":"Nato lo stesso giorno di Cody, ma non è così importante"
}Ogni volta che a mia nonna serve ricordare qualcosa su uno dei nipoti, le basta andare alla pagina giusta nel quaderno dei nipoti. Tutte le informazioni su di loro saranno conservate proprio lì, sulla loro pagina, che può aggiornare e modificare rapidamente.
Quando tutto è fatto, lei fa la fatidica domanda: «Dove hai imparato a fare tutto questo?»
Database NoSQL
Esistono molti database NoSQL (“non solo SQL”). Nei nostri esempi abbiamo mostrato un database di documenti. I database NoSQL modellano i dati in modi che escludono le relazioni tabellari utilizzate nei database relazionali. Questi database sono diventati popolari all'inizio degli anni 2000 tra le aziende che necessitavano di clustering di database cloud a causa delle loro evidenti esigenze di scalabilità (ad esempio, Facebook). In tali applicazioni, la coerenza dei dati era molto meno importante rispetto alle performance e alla scalabilità.
Inizialmente, i database NoSQL venivano spesso utilizzati per compiti di gestione dei dati di nicchia. Principalmente, quando si trattava di applicazioni web e cloud, i database NoSQL gestivano e distribuivano ingenti volumi di dati. Gli ingegneri che lavoravano con NoSQL apprezzavano anche lo schema dati flessibile (o la sua totale assenza), consentendo così rapide modifiche nelle applicazioni aggiornate.
Caratteristiche principali di NoSQL:
- Modo di archiviazione dei dati molto flessibile
- Scalabilità orizzontale fino ai cluster
- Possibile coerenza sulla permanenza / distribuzione
- Documenti identificati tramite chiavi uniche
Confronto dettagliato
MySQL richiede uno schema specifico e strutturato.
NoSQL consente di salvare qualsiasi dato in un "documento".
MySQL ha una vasta comunità di supporto.
NoSQL ha una comunità piccola ma in rapida crescita.
NoSQL si distingue per la sua facilità di scalabilità.
MySQL richiede una maggiore gestione.
MySQL utilizza SQL, impiegato in molti tipi di database.
NoSQL è un database progettato con implementazioni popolari.
MySQL utilizza un linguaggio di query standard (SQL).
NoSQL non utilizza un linguaggio di query standard.
MySQL offre molti ottimi strumenti di reportistica.
NoSQL dispone di alcuni strumenti di reportistica che sono difficili da standardizzare.
MySQL può presentare problemi di prestazioni con grandi dati.
NoSQL offre ottime prestazioni con grandi dati.
Pensieri 8base
In azienda , in cui lavoro, forniamo a ogni progetto un'area di lavoro con un database relazionale Aurora MySQL, ospitato su AWS. Sebbene NoSQL sia una scelta logica quando le esigenze della tua applicazione richiedono alte prestazioni e scalabilità, riteniamo che una rigorosa coerenza dei dati fornita dal DBMS sia essenziale nella creazione di applicazioni SaaS e di altro software per le aziende.
Per startup e sviluppatori che creano applicazioni aziendali che necessitano di reportistica, integrità delle transazioni e modelli di dati chiaramente definiti, investire nel lavoro con i database relazionali è, a nostro avviso, la scelta giusta.
Scopri di più sullo sviluppo con Aurora, Serverless e GraphQL su 8base.com .
Fonte: habr.com
