Che cos'è un database NoSQL e a cosa servono?

0
165

Un database NoSQL è qualsiasi tipo di database che si discosta dal design tradizionale di SQL. I database NoSQL come MongoDB basato su documenti sono diventati più popolari negli ultimi anni. Di cosa si tratta?

Il limite di SQL: scalabilità

SQL è in circolazione da sempre— 45 anni. Regge sorprendentemente bene e le moderne implementazioni di SQL sono molto veloci. Tuttavia, con la crescita del Web, è aumentata anche la necessità di database potenti in grado di soddisfare la domanda.

Il modo più semplice per ridimensionare un database SQL è eseguirlo su un computer più potente. I database SQL possono essere replicati per ridurre il carico regionale su una singola istanza, ma la suddivisione di una tabella (spesso chiamata sharding) è molto più difficile per SQL.

I database NoSQL basati su documenti risolvono questo problema in base alla progettazione. Ogni documento è indipendente dagli altri documenti della raccolta, quindi le raccolte possono essere suddivise su più server molto più facilmente. Molti database di documenti includeranno strumenti integrati per la condivisione dei dati su server diversi.

Ma il problema della scalabilità non è davvero un problema finché non si hanno molti dati. Puoi facilmente eseguire un database SQL con centinaia di migliaia di utenti e non avere problemi, supponendo che la tua struttura sia solida e le tue query siano veloci.

Pubblicità

Sia MySQL che MongoDB probabilmente svolgeranno il lavoro per la tua applicazione, quindi la scelta tra i due dipende dalla struttura e dalla sintassi che preferisci. La facilità di sviluppo è importante e potresti scoprire che il modello di documento e la sintassi del MongoDB molto più recente è più facile da lavorare rispetto a SQL.

NoSQL vs. .Struttura SQL

I database SQL tradizionali sono spesso chiamati database relazionali a causa del modo in cui sono strutturati. In un database SQL, avrai più tabelle, ciascuna contenente più righe (chiamate record), che a loro volta hanno più colonne o attributi diversi. Ogni tabella separata è collegata all'altra tramite una chiave primaria, che forma una relazione.

Ad esempio, immagina di avere una tabella con ogni record che rappresenta un post creato da un utente. La chiave primaria qui è il nome utente, che può essere utilizzato per collegare la tabella dei post alla tabella degli utenti. Se si desidera trovare l'e-mail di chi ha pubblicato il post, eseguire una ricerca per “Jon1996” nella tabella degli utenti e seleziona “Email” campo.

Ma questa struttura dati potrebbe non funzionare per tutti . I database SQL hanno uno schema rigidamente definito, che può intralciare se è necessario apportare modifiche o semplicemente si preferisce avere un layout diverso. Con set di dati complessi, le relazioni tra tutto possono diventare più complicate dei dati stessi.

Il tipo principale di database NoSQL è un database di documenti JSON, come MongoDB. Invece di archiviare righe e colonne, tutti i dati vengono archiviati in singoli documenti. Questi documenti sono archiviati in raccolte (ad esempio, un documento “utente” verrebbe archiviato in una raccolta di “tutti gli utenti”) e non devono avere la stessa struttura degli altri documenti nella raccolta.

Ad esempio, un “utente” il documento potrebbe essere simile a questo:

{ “username”:”Jon1996″, “email”:”jon1996@gmail.com”, “posts”: [ {“id”:1}, {“id”:2}, {“id”:3}, ] } Annuncio

I campi nome utente e email sono solo coppie chiave-valore, simili alle colonne in SQL, ma i “post” contiene un array, che non è qualcosa che troverai nei database SQL. Ora supponiamo di avere una raccolta di post con documenti come:

{ “id”:1, “title”:”First Post”, “content”:”Hello, World!”, “madeby”:”Jon1996″ }

Ora, quando qualcuno visita la pagina di Jon, la tua applicazione può recuperare tre post con gli ID 1, 2 e 3, che di solito è una query veloce. Rispetto a SQL, dove potrebbe essere necessario recuperare tutti i post che corrispondono all'ID utente di Jon. Ancora abbastanza veloce, ma la query MongoDB è più diretta e ha più senso.

A cosa servono i database NoSQL?

NoSQL è una categoria ampia e include molti tipi diversi di database creati con obiettivi diversi. Ogni database è uno strumento e il tuo lavoro potrebbe richiedere un tipo specifico di strumento o anche più strumenti diversi.

Database SQL come MySQL, Oracle e PostgreSQL sono in circolazione da allora prima di internet. Sono molto stabili, hanno molto supporto e generalmente possono fare il lavoro per la maggior parte delle persone. Se i tuoi dati sono preziosi per te e desideri una soluzione consolidata e coerente, utilizza SQL.

Database di documenti JSON, come MongoDB e Couchbase, sono popolari per le applicazioni web con modelli di dati mutevoli e per l'archiviazione di documenti complessi. Ad esempio, un sito come Amazon potrebbe dover spesso modificare il modello di dati per l'archiviazione dei prodotti sul sito, quindi un database basato su documenti potrebbe funzionare bene per loro.

I database di documenti sono pensati per essere la sostituzione generica di SQL e sono probabilmente ciò a cui pensi quando senti “NoSQL.” Sono anche più intuitivi da imparare rispetto a SQL, poiché non dovrai gestire relazioni tra tabelle o query complesse.

Pubblicità

RethinkDBè un database di documenti JSON creato per applicazioni in tempo reale. In un database come MongoDB, è necessario eseguire il polling per gli aggiornamenti ogni pochi secondi o implementare alcune API per tenere traccia degli aggiornamenti in tempo reale, che diventa rapidamente pesante. RethinkDB risolve questo problema inviando automaticamente gli aggiornamenti sui flussi websocket a cui i client possono connettersi.

Redisè un database chiave-valore estremamente performante che memorizza piccole chiavi e stringhe interamente nella RAM, che è molto più veloce da leggere e scrivere rispetto anche agli SSD più veloci. Viene spesso utilizzato insieme ad altri database come cache in memoria per piccoli dati che vengono scritti e letti spesso. Ad esempio, un'app di messaggistica potrebbe voler utilizzare Redis per archiviare i messaggi dell'utente (e persino inviare aggiornamenti in tempo reale con i propri metodi Pub/Sub). L'archiviazione di molti piccoli messaggi in questo modo potrebbe causare problemi di prestazioni con altri tipi di database.

Database graficisono costruiti per memorizzare le connessioni tra i dati. Un caso d'uso comune sono i social network, in cui gli utenti sono connessi tra loro e interagiscono con altri dati, come i post che hanno creato.

In questo esempio, George è amico di due persone, Jon e Jane. Se un altro tipo di database volesse capire la connessione di George con Sarah, dovrebbe interrogare tutti gli amici di Jon e tutti gli amici di Jane. Ma i database a grafo comprendono questa connessione in modo intuitivo; per la query degli amici degli amici, il popolare database grafico Neo4J è il 60% più veloce di MySQL. Per gli amici di amici di amici (3 livelli di profondità) Neo4J è 180 volte più veloce.

Database a colonne larghe come Cassandra e Hbase, vengono utilizzati per archiviare enormi quantità di dati. Sono progettati per set di dati così grandi che sono necessari più computer per archiviarli tutti e sono molto più veloci di SQL e altri database NoSQL se distribuiti su più nodi.