Come spiegare a mia nonna la differenza tra SQL e NoSQL

Come spiegare a mia nonna la differenza tra SQL e NoSQL

Una delle decisioni più importanti che un sviluppatore deve prendere riguarda quale database utilizzare. Per molti anni, le opzioni erano limitate a varianti di database relazionali che supportavano il linguaggio di query strutturato (SQL). Questi includevano MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 e molti altri.

Negli ultimi 15 anni, sono comparsi sul mercato molti nuovi database nell'ambito dell'approccio No-SQL. Questi includono archivi chiave-valore come Redis e Amazon DynamoDB, database a colonne larghe come Cassandra e HBase, archivi di documenti come MongoDB e Couchbase, oltre a database grafici e motori di ricerca come Elasticsearch e Solr.

In questo articolo cercheremo di capire SQL e NoSQL, senza addentrarci nelle loro funzionalità.
Inoltre, ci divertiremo un po' durante il processo.

Spieghiamo a nonna SQL

Nonna, immagina che io non sia l'unico tuo nipote. Invece, mamma e papà si amavano come conigli e hanno avuto 100 figli, poi hanno adottato altri 50.

Quindi, ami tutti noi e non vuoi dimenticare i nostri nomi, date di nascita, gusti del gelato preferito, taglie dei vestiti, hobby, nomi dei coniugi, nomi dei figli e altri fatti super importanti. Ma guardiamo in faccia la realtà. Hai 85 anni e la tua memoria di un tempo non riesce più a farcela.

Fortunatamente, io, essendo il più intelligente dei tuoi nipoti, posso aiutarti. Quindi vengo a casa tua, prendo 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 è registrato con alcune informazioni significative su di lui, incluso un numero unico che ora rappresenterà quale nipote è. Inoltre, per organizzazione, scriviamo gli attributi nominati nella parte superiore della lista, in modo da sapere sempre quali informazioni contiene.

id
name
data di nascita
ultima visita
taglia dei vestiti
gelato preferito
adottato

1
Jimmy
09-22-1992
09-01-2019
L
Cioccolato alla menta
false

2
Jessica
07-21-1992
02-22-2018
M
Strada Rocky
true

…continuiamo la lista!

Lista dei nipoti

Dopo un po' inizi a capire tutto e siamo quasi alla fine della lista! Tuttavia, ti giri verso di me e dici: «Abbiamo dimenticato di aggiungere uno spazio per i coniugi, hobby, nipoti!» Ma no, non abbiamo dimenticato! Questo viene dopo e richiede un nuovo foglio di carta.

Quindi tiro fuori un altro foglio di carta, e su di esso chiamiamo l'elenco Coniugi. Aggiungiamo di nuovo gli attributi che ci interessano all'inizio dell'elenco e iniziamo ad aggiungere nelle righe.

id
grandchild_id
name
data di nascita

1
2
Giovanni
06-01-1988

2
9
Fernanda
03-05-1985

…più coniugi!

Elenco dei coniugi

A questo punto spiego a nonna che se vuole sapere chi è sposato con chi, deve solo confrontare id nell'elenco dei nipoti con grandchild_id nell'elenco dei coniugi.

Dopo un paio di decine di biscotti ho bisogno di un pisolino. "Puoi continuare, nonna?" Vado a fare un pisolino.

Torno dopo alcune ore. E sei fantastica, nonna! Tutto sembra ottimo, tranne l'elenco hobby. Nell'elenco ci sono circa 1000 hobby. La maggior parte di essi si ripete; cosa è successo?

grandchild_id
hobby

1
bici

4
bici

3
bici

7
in esecuzione

11
bici

…continuiamo!

Scusa, mi sono completamente dimenticato di dirlo! Usando un elenco, possiamo tenere traccia solo di hobby. Poi in un altro elenco dobbiamo tenere traccia dei nipoti, che praticano questo hobby. Chiameremo questo "Elenco generale". Visto che questo non ti piace, comincio a preoccuparmi e torno in modalità elenco.

id
hobby

1
bici

2
in esecuzione

3
nuoto

…più hobby!

Elenco hobby

Appena abbiamo il nostro elenco di hobby, creiamo il nostro secondo elenco e lo chiamiamo "Passioni dei nipoti».

grandchild_id
hobby_id

4
1

3
1

7
2

…di più!

Elenco generale hobby nipoti

Dopo tutto questo lavoro, ora nonna ha un fantastico sistema di memorizzazione per tenere traccia di tutta la sua incredibilmente grande famiglia. E poi — per tenermi occupato più a lungo — fa la magica domanda: "Dove hai imparato a fare tutto questo?"

Database relazionali

Un database relazionale è un insieme di tabelle formalmente descritte (nel nostro esempio sono fogli) da cui è possibile accedere dati o raccoglierli in vari modi senza dover riorganizzare le tabelle database. Ci sono molti diversi tipi di database relazionali, ma purtroppo l'elenco su un foglio di carta non è uno di essi.

Una caratteristica distintiva dei database relazionali più popolari è il linguaggio di query SQL (Structured Query Language). Grazie a questo, se nonna trasferisce il suo sistema di memorizzazione nel computer, potrà ottenere rapidamente risposte a domande come: "Chi non mi ha visitato l'anno scorso, è sposato e non ha hobby?"

Uno dei sistemi di gestione di database SQL più popolari è MySQL, un software open source. È implementato principalmente come sistema di gestione di database relazionali (RDBMS) per applicazioni software basate su tecnologie web.

Alcune caratteristiche chiave di MySQL:

  • È abbastanza conosciuto, ampiamente usato e ampiamente testato.
  • Ci sono molti sviluppatori qualificati con esperienza in SQL e database relazionali.
  • I dati sono archiviati 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 piccoli business.
  • Il codice sorgente è disponibile sotto licenza GNU General Public License.

Ora dimentica TUTTO.

Spieghiamo a nonna NoSQL

Nonna, abbiamo una famiglia enorme. Abbiamo 150 nipoti! Molti di loro sono sposati, hanno figli, si dedicano a varie attività e altro ancora. Alla tua età è impossibile ricordare tutto su di noi. Quello di cui hai bisogno è un sistema di memorizzazione!

Fortunatamente, io, non volendo che tu dimenticassi il mio compleanno e il mio gusto di gelato preferito, posso aiutarti. Così corro al negozio più vicino, prendo un quaderno e torno a casa con te.

Il primo passo che faccio è scrivere "Nipoti" in caratteri grandi e in grassetto sulla copertina del quaderno. Poi sfoglio la prima pagina e inizio a scrivere tutto ciò che devi ricordare su di me. Dopo pochi minuti 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":[ 
     "video games",
     "computers",
     "cooking"
  ],
  "spouse":null,
  "kids":[ 

  ],
  "favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
  "misc_notes":"Preferisce torte di gelato per il compleanno invece di torte al cioccolato!"
}

Io: “Sembra che sia tutto pronto!”
Nonna: “Aspetta, e gli altri nipoti?”
Io: “Già, esatto. Allora dedichiamo una pagina a ciascuno.”
Nonna: “E dovrò annotare tutte le stesse informazioni per tutti, come ho fatto per te?”
Io: “No, solo se lo vuoi. Lascia che ti mostri.”
Prendendo una penna dalla nonna, giro pagina e scrivo rapidamente le informazioni riguardanti il mio cugino che mi piace di meno.

{ 
  "_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 la nonna deve 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ò modificare e aggiornare rapidamente.

Quando tutto è fatto, pone la domanda magica: «Dove hai imparato a fare tutto questo?»

Le basi di dati NoSQL

Esistono molte banche dati NoSQL («non solo SQL»). Nei nostri esempi abbiamo mostrato una banca dati di documenti. Le banche dati NoSQL modellano i dati in modi che escludono le relazioni tabulari utilizzate nelle banche dati relazionali. Queste banche dati sono diventate popolari all'inizio degli anni 2000 tra le aziende che necessitavano di una clusterizzazione cloud delle banche dati a causa delle loro esplicite esigenze di scalabilità (ad esempio, Facebook). In queste applicazioni, la coerenza dei dati era molto meno importante rispetto alle prestazioni e alla scalabilità.

All'inizio, le banche dati NoSQL venivano spesso utilizzate per compiti di gestione dei dati di nicchia. Principalmente, quando si trattava di applicazioni web e cloud, le banche dati NoSQL gestivano e distribuite volumi significativi di dati. Gli ingegneri che lavorano con NoSQL apprezzavano anche lo schema dei dati flessibile (o la sua completa assenza), in modo che modifiche rapide fossero possibili nelle applicazioni aggiornate.

Caratteristiche chiave di NoSQL:

  • Un modo di memorizzare i dati molto flessibile
  • Scalabilità orizzontale a cluster
  • Possibile sequenza su persistenza / distribuzione
  • Documenti identificabili usando chiavi uniche

Confronto dettagliato

MySQL richiede uno schema definito e strutturato.
NoSQL permette di memorizzare qualunque dato in un «documento».

MySQL supporta una vasta comunità.
NoSQL ha una comunità piccola e in rapida crescita.

NoSQL si distingue per la sua facilità di scalabilità.
MySQL richiede maggiore gestibilità.

MySQL utilizza SQL, che è applicato in molti tipi di banche dati.
NoSQL è una banca dati basata su design con implementazioni popolari.

MySQL utilizza un linguaggio standard per le query (SQL).
NoSQL non utilizza un linguaggio standard per le query.

MySQL ha molti ottimi strumenti di reporting.
In NoSQL ci sono pochi strumenti di reporting che sono difficili da standardizzare.

MySQL può presentare problemi di prestazioni con grandi quantità di dati.
NoSQL offre ottime prestazioni con grandi quantità di dati.

Pensieri di 8base

Nell'azienda 8base, in cui lavoro, forniamo un'area di lavoro per ogni progetto con un database relazionale Aurora MySQL ospitato su AWS. Sebbene NoSQL sia una scelta logica quando le esigenze della tua applicazione richiedono elevate prestazioni e scalabilità, riteniamo che la rigida coerenza dei dati fornita dai DBMS sia necessaria per lo sviluppo di applicazioni SaaS e altro software aziendale.

Per startup e sviluppatori che creano applicazioni aziendali che necessitano di reporting, integrità delle transazioni e modelli di dati ben definiti, investire nel lavoro con database relazionali è, a nostro avviso, la scelta giusta.

Scopri di più sullo sviluppo con Aurora, Serverless e GraphQL su 8base.com qui.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster