Negli ultimi anni, gli strumenti di database NoSQL o non relazionali hanno guadagnato molta popolarità in termini di archiviazione di enormi quantità di dati e di ridimensionamento semplice. Si discute se i database non relazionali sostituiranno i database relazionali in futuro. Con il numero crescente di dati sociali e altri dati non strutturati, le seguenti sono alcune delle domande sollevate sui database relazionali.
I database relazionali sono in grado di gestire i big data?
I database relazionali sono in grado di scalare in modo massiccio quantità di dati?
I database relazionali sono adatti per i dati dell'età moderna?
Prima di rispondere a queste domande, facci sapere alcune nozioni di base sui database relazionali e non relazionali.
Nozioni di base sui database relazionali e non relazionali
Banca dati relazionali: Il concetto di Database Relazionale è stato sviluppato negli anni '70. La caratteristica più importante di tutti i database relazionali è il supporto delle proprietà ACID (Automicity, Consistency, Isolation and Durability) che assicurano che tutte le transazioni vengano elaborate in modo affidabile.
Automaticità: Ogni transazione è unica e fa in modo che se una parte logica di una transazione fallisce, tutto viene ripristinato in modo che i dati rimangano invariati.
Coerenza: Tutti i dati scritti nel database sono soggetti alle regole definite (vincoli, trigger, ecc.)
Isolamento: Le modifiche apportate a una transazione non sono visibili alle altre transazioni finché non vengono confermate.
Durata: Le modifiche apportate in una transazione vengono archiviate e disponibili nel database anche se si verifica un'interruzione di corrente o il database va offline all'improvviso.
Rigorosamente strutturato: Gli oggetti nei database relazionali sono rigorosamente strutturati. Tutti i dati nella tabella sono archiviati in righe e colonne. Ogni colonna ha un tipo di dati. È per lo più normalizzato. Structured Query Language (SQL) è adatto ai database relazionali per archiviare e recuperare dati in modo strutturato. Le query sono comandi in inglese semplice. C'è sempre un numero fisso di colonne anche se è possibile aggiungere colonne aggiuntive in un secondo momento. La maggior parte delle tabelle sono correlate tra loro con chiavi primarie ed esterne fornendo così "integrità referenziale" tra gli oggetti. I principali fornitori sono ORACLE, SQL Server, MySQL, PostgreSQL, ecc.
Database non relazionali: Il concetto di database non relazionali è emerso per gestire la rapida crescita di dati non strutturati e scalarli facilmente. Ciò fornisce uno schema flessibile, quindi non esiste una cosa chiamata "Integrità referenziale" come vediamo nei database relazionali. I dati sono altamente denormalizzati e non richiedono JOIN tra oggetti. Questo rilassa la proprietà ACID dei database relazionali e supporta CAP (Consistency, Availability, and Partitioning). Ma di questi tre solo due sono garantiti in qualsiasi momento. Quindi, al contrario di ACID, supporterà solo BASE (stato soft basicamente disponibile, consistenza finale). I database iniziali creati sulla base di questi concetti sono BigTable di Google, HBase di Yahoo, Cassandra di Facebook, ecc.
Categorie di database non relazionali: I database non relazionali possono essere classificati in quattro categorie principali come il database dei valori-chiave, il database delle colonne, il database dei documenti e il database dei grafi.
Database dei valori-chiave: Questa è la forma più semplice di database NoSQL in cui ogni valore è associato alla chiave univoca.(ex Redis)
Database di colonne: Questo database è in grado di archiviare ed elaborare una grande quantità di dati utilizzando un puntatore che punta a molte colonne distribuite su un cluster. (ex HBase)
Database documenti: Questo database può contenere molti documenti chiave-valore con molti livelli nidificati. Con questo database è possibile eseguire query efficienti. I documenti sono archiviati in formato JSON.(ex MongoDB)
Database grafico: Invece delle tradizionali righe e colonne, questo database utilizza nodi e bordi per rappresentare le strutture dei grafi e archiviare i dati. (ex Neo4J)