NoSQL non esiste!
NoSQL è una parola d'ordine.
Per decenni, quando le persone parlavano di database, intendevano database relazionali. E quando le persone parlavano di database relazionali, intendevano quelli che controlli con il linguaggio strutturato per le query di Edgar F. Codd. Archiviazione dei dati in qualche altro modo? Follia! Nient'altro è solo file flat.
Ma negli ultimi anni, la gente ha iniziato a mettere in discussione questo dogma. Le persone si chiedevano se le tabelle con righe e colonne fossero davvero l'unico modo per rappresentare i dati. Le persone hanno iniziato a pensare e programmare, e hanno escogitato molti nuovi concetti su come organizzare i dati. E hanno iniziato a creare nuovi sistemi di database progettati per questi nuovi modi di lavorare con i dati.
Le filosofie di tutti questi database erano diverse. Ma una cosa che tutti questi database avevano in comune era che il Structured Query Language non era più adatto per usarli. Quindi ogni database ha sostituito SQL con i propri linguaggi di query. E così è nato il termine NoSQL, come etichetta per tutte le tecnologie di database che sfidano il classico modello di database relazionale.
Quindi cosa hanno in comune i database NoSQL?
In realtà, non molto.
Senti spesso frasi come:
- NoSQL è scalabile!
- NoSQL è per BigData!
- NoSQL viola ACID!
- NoSQL è un archivio chiave / valore glorificato!
È vero? Bene, alcune di queste affermazioni potrebbero essere vere per alcuni database comunemente chiamati NoSQL, ma ognuno è falso anche per almeno un altro. In realtà, l'unica cosa che i database NoSQL hanno in comune è che sono database che non usano SQL. Questo è tutto. L'unica cosa che li definisce è ciò che li distingue l'uno dall'altro.
Quindi cosa distingue i database NoSQL?
Quindi abbiamo chiarito che tutti quei database comunemente indicati come NoSQL sono troppo diversi per valutarli insieme. Ognuno di essi deve essere valutato separatamente per decidere se sono adatti per risolvere un problema specifico. Ma da dove iniziamo? Per fortuna, i database NoSQL possono essere raggruppati in determinate categorie, che sono adatte a diversi casi d'uso:
Documento orientato
Esempi: MongoDB, CouchDB
Punti di forza: dati eterogenei, lavoro orientato agli oggetti, sviluppo agile
Il loro vantaggio è che non richiedono una struttura dati coerente. Sono utili quando le tue esigenze e quindi il layout del tuo database cambiano costantemente o quando hai a che fare con set di dati che si uniscono ma che sembrano ancora molto diversi. Quando hai molte tabelle con due colonne chiamate "chiave" e "valore", allora vale la pena esaminarle.
Database grafici
Esempi: Neo4j, GiraffeDB.
Punti di forza: Data mining
Mentre la maggior parte dei database NoSQL abbandona il concetto di gestione delle relazioni dati, questi database lo abbracciano ancora di più rispetto ai cosiddetti database relazionali.
Il loro obiettivo è quello di definire i dati dalla sua relazione con altri dati. Quando hai molte tabelle con chiavi primarie che sono le chiavi primarie di altre due tabelle (e forse alcuni dati che descrivono la relazione tra loro), allora queste potrebbero essere qualcosa per te.
Negozi con valori-chiave
Esempi: Redis, Cassandra, MemcacheDB
Punti di forza: ricerca rapida dei valori tramite chiavi conosciute
Sono molto semplicistici, ma ciò li rende veloci e facili da usare. Quando non hai bisogno di stored procedure, vincoli, trigger e tutte quelle funzionalità di database avanzate e desideri solo una memorizzazione e un recupero rapidi dei tuoi dati, allora quelli sono per te.
Purtroppo presumono che tu sappia esattamente cosa stai cercando. Hai bisogno del profilo dell'utente157641? Nessun problema, richiederà solo microsecondi. Ma cosa succede quando si desidera che i nomi di tutti gli utenti di età compresa tra 16 e 24 anni abbiano "waffle" come cibo preferito e abbiano effettuato l'accesso nelle ultime 24 ore? Buona fortuna Quando non si dispone di una chiave definita e unica per un risultato specifico, non è possibile estrarla facilmente dal proprio negozio KV.
SQL è obsoleto?
Alcuni sostenitori di NoSQL affermano che il loro database NoSQL preferito è il nuovo modo di fare le cose, e SQL è un ricordo del passato.
Hanno ragione?
No, certo che non lo sono. Sebbene ci siano problemi per i quali SQL non è adatto, ha comunque i suoi punti di forza. Molti modelli di dati sono semplicemente meglio rappresentati come una raccolta di tabelle che si riferiscono a vicenda. Soprattutto perché la maggior parte dei programmatori di database è stata addestrata per decenni a pensare ai dati in modo relazionale e cercando di spingere questa mentalità su una nuova tecnologia che non è stata creata per questo raramente finisce bene.
I database NoSQL non sostituiscono SQL, ma rappresentano un'alternativa.
La maggior parte degli ecosistemi software nei diversi database NoSQL non sono ancora così maturi. Mentre ci sono progressi, non hai ancora strumenti supplementari che sono così maturi e potenti come quelli disponibili per i database SQL più diffusi.
Inoltre, c'è molto più know-how per SQL in giro. Generazioni di informatici hanno trascorso decenni della loro carriera nella ricerca focalizzandosi su database relazionali, e mostra: la letteratura scritta sui database SQL e la modellazione dei dati relazionali, sia pratici che teorici, potrebbe riempire più librerie piene di libri. Come costruire un database relazionale per i tuoi dati è un argomento così ben studiato che è difficile trovare un caso angolare in cui non esiste una best practice generalmente accettata dal libro.
La maggior parte dei database NoSQL, invece, è ancora agli inizi. Stiamo ancora cercando il modo migliore per usarli.