NoSQL è più evolutivo che rivoluzionario. Combina essenzialmente le idee esistenti di "archiviazione di database esterni" con "l'utilizzo di strutture di dati familiari, non di tabelle relazionali".
Esistono più tipi di database rispetto a quelli relazionali, ad esempio database gerarchici . Sebbene arcaico per gli standard odierni, si integrava molto bene con le strutture dei dati dei suoi dati (ad esempio i record COBOL ). Il punto è che i dati nel database sono stati modellati da vicino al modo in cui i record sono stati disposti nei linguaggi di programmazione che li hanno utilizzati.
Avanti rapidamente all'invenzione dei database relazionali , dove alla fine il database ha separato le preoccupazioni e, se correttamente normalizzato, è un ottimo modo per visualizzare la maggior parte dei tipi di dati e le relazioni tra i dati. È davvero facile da capire rispetto ad altri tipi di database. Ciò in cui fallisce completamente, tuttavia, è la memorizzazione dei dati in un modo che rispecchia oggetti e classi in un programma. Quindi, l'invenzione della mappatura relazionale oggetto . In altre parole, la progettazione del database è in realtà un ostacolo alla progettazione del programma che lo utilizza, motivo per cui abbiamo bisogno di librerie ORM come Hibernate. Mentre pulito e coerente, c'è sempre quel fastidioso dubbio nella parte posteriore della mia mente che qualcosa non è proprio lì.
Ciò ha dato origine ad altri due tipi di database, database di oggetti e NoSQL .
Entrambi tentano di risolvere i problemi introdotti dai database relazionali senza esponerci agli orrori sconvolgenti dei database gerarchici. I dati sono ancora disposti in repository che assomigliano vagamente alle tabelle, ma in realtà sono più simili alla programmazione delle strutture di dati che alle tabelle relazionali. Mentre i database degli oggetti seguono regole per lo più ben definite, la mia comprensione è che NoSQL è piuttosto arbitrario. Ad esempio, una tabella potrebbe essere visualizzata come una tabella hash o un array. Non esiste un modo semplice e ben definito per interrogarli utilizzando uno strumento arbitrario analogo a Oracle SQL Developer o SQL Server Management Studio .
L'idea è che si possano definire strutture di dati facilmente ricercabili nel codice, piuttosto che mettere insieme query SQL più adatte a un motore di database SQL anziché esprimere la query desiderata. Ad esempio, le corrispondenze fuzzy o parziali sono più difficili e peggiorano in un database relazionale, mentre un database NoSQL può avere una struttura ottimizzata per tale ricerca e completata in una frazione del tempo.
Esistono lingue per l'interrogazione di NoSQL. Tuttavia, non esiste un linguaggio universale come quello che è SQL per i database relazionali.
Modifica tardiva:
Mentre ho abbastanza familiarità con i database NoSQL, questa domanda è stata la spinta per me ad acquistare un libro di qualità sull'argomento e iniziare a leggerlo con l'obiettivo finale di essere un vero esperto sull'argomento. I restanti commenti si basano su NoSQL Distilled: una breve guida al mondo emergente della persistenza poliglotta di Pramod Sadalage e Martin Fowler .
Gli autori affermano che i database relazionali non si adattano bene ai cluster in grado di servire i dati necessari per siti come Amazon e Google: NoSQL è stato sviluppato per adattarsi a questa nicchia, rilassando la concorrenza e la durata in ACID al fine di server un gran numero di query che utilizzano ampiamente dati statici (quindi, le transazioni ACID non sono così importanti).
Inoltre, ritengono che i database NoSQL funzionino senza uno schema (pagina 10) che consente ai database NoSQL di modificare più facilmente la struttura dei dati. Non sono sicuro che la presenza o l'assenza di uno schema formale sia importante al riguardo, poiché anche i database SQL consentono di modificare gli schemi. Indipendentemente da ciò, i due rinomati autori sostengono l'affermazione, quindi vale la pena esaminarli.
Credo che entrambi questi punti principali servano solo a rafforzare il mio punto principale che NoSQL è evolutivo, non rivoluzionario. Conservano ancora i dati e apportano miglioramenti incrementali alla scala e alla modificabilità. Sottolineano inoltre che NoSQL non cerca di usurpare i database relazionali come re dello storage dei dati, ma solo di fornire un mezzo alternativo di archiviazione dei dati per i tipi di dati che devono ridimensionare e trasformarsi in un modo che (credono) relazionale i database non supportano abbastanza bene.