PRD-022 - Database NoSQL

13
Amazon Web Services cloud-aws.com Introduzione ai database NoSQL Hangout 22 del 11.08.2014 Davide Riboldi Massimo Della Rovere Oggi vediamo le caratteristiche di un database NoSQL come introduzione utile al servizio DynamoDB #cloudaws

Transcript of PRD-022 - Database NoSQL

Amazon Web Services

cloud-aws.com

Introduzione ai database NoSQL

Hangout 22 del 11.08.2014

● Davide Riboldi● Massimo Della Rovere

Oggi vediamo le caratteristiche di un database NoSQL come introduzione utile al servizio DynamoDB

#cloudaws

● Ormai è diverso tempo che si parla di database NoSQL (not only SQL), i quali vengono indicati come alternativa ai classici database relazionali RDBMS.

● In realtà come vedremo non sono una sostituzione ai database SQL, ma sono una cosa molto diversa che può essere utilizzata in ambienti ad alta scalabilità.

● Il fattore che ha portato questa tecnologia alla sua attuale popolarità è il fatto che oggi siamo passati da una scalabilità verticale ad una orizzontale.

● Quando parliamo di scalabilità verticale intendiamo l’aumento di potenza nell’ambito dello stesso server, quindi aumentiamo i processori, i dischi, la RAM etc.

● Mentre per scalabilità orizzontale si intende quando aggiungiamo più server per un’elaborazione parallela di un’applicazione suddivisa in diverse richieste.

● Nella prima soluzione abbiamo un limite che è legato alla potenza massima che un singolo computer può raggiungere, mentre in quella orizzontale in linea di principio possiamo aggiungere server all’infinito :)

DO

WN

< S

CA

LE >

UP

IN < SCALE > OUT

● Anche se la scalabilità verticale ha un limite di crescita è comunque la tecnologia che ha portato avanti fino adesso la maggior parte dei computer.

● Con l’avvento di internet è cambiato tutto e il numero di connessioni che si potrebbe ricevere non solo è molto più alto ma è anche imprevedibile.

● In questo nuovo scenario i database SQL hanno incominciato ad avere problemi di performance che sono stati risolti in parte dai database NoSQL.

● Attualmente ci sono diverse soluzioni NoSQL, però usano tutte dei protocolli proprietari che non hanno ancora raggiunto degli ottimi standard come SQL.

● CouchDB: è un database document-oriented dove il documento è il soggetto unico di memorizzazione, in questo database non esistono tabelle ma i documenti vengono salvati direttamente nel database tramite una struttura JSON, questa soluzione è pensata e indicata per le applicazioni web con cui condivide parecchi aspetti comuni.

● MongoDB: è un database document-oriented molto performante che mantiene alcuni aspetti simili ai database SQL, questo aspetto lo rende molto interessante per chi vuole passare a questa tecnologia venendo da quella relazionale. Vi consiglio di leggere la documentazione ufficiale in quanto le funzioni interessanti sono veramente tante.

● Redis: questo database open source è di tipo key-value store e offre una struttura dati server per chiave, la quale può contenere strings, hashes, lists, sets e sorted sets. Redis è scritto in linguaggio C ed è adatto a tutti i sistemi Unix like anche se esiste una versione in beta per gli ambienti windows. La documentazione in italiano è molto scarsa.

● DynamoDB: è un database NoSQL presente negli Amazon Web Services, viene definito un database ultra scalabile che gestisce diverse zone di disponibilità ed è integrabile con Elastic MapReduce e Amazon S3 per il backup su storage online. La sua caratteristica principale è legata alla semplicità di configurazione in ambienti complessi.

● Google Big Table: è un database sviluppato da Google ed è basato su dati compressi, al momento anche se è molto performante rimane limitato dal fatto che è utilizzabile solo in ambiente Google App Engine. In questo momento è utilizzato in molti prodotti di google stessa come ad esempio Google Maps, Gmail, Youtube, etc, etc

● Esistono moltissime altre soluzioni NoSQL che potete trovare a questo indirizzo http://nosql-database.org/

● Esistono molte soluzioni NoSQL e con caratteristiche diverse, però hanno in comune di non avere una struttura rigida come nei database relazionali.

● In ambito relazionale dobbiamo prima definire lo schema con i campi, le chiavi etc, e solo dopo possiamo eseguire le operazioni di lettura, etc.

● In NoSQL questo processo non è necessario e la memorizzazione può prevedere strutture diverse che possono cambiare senza averle prima definite.

Fontehttp://www.internetpost.it/

RDBMS

NOSQL

● Column Family: le informazioni sono suddivise in righe e colonne come gli schemi, però il numero di colonne non è prestabilito è può variare tra una riga e un’altra. Esistono due tipi di soluzioni, una chiamata standard column e l’altra super column.

● Graph: questi database memorizzano le informazioni con strutture a grafi, rendendo più performante l’accesso con linguaggi e applicazioni orientate agli oggetti. Alcuni database presenti in questo gruppo sono Neo4j, FlockDB, AllegroGraph e GraphDB.

● Key/Value: in questo caso i dati vengono memorizzati in un elemento che contiene una chiave assieme ai valori, questo metodo è il più semplice da implementare, ma anche il più inefficiente se le operazioni riguardano soltanto una parte di un elemento.

● Document store: è l’evoluzione del metodo key/value, rispetto ai database relazionali che memorizzano i dati in tabelle con dei campi fissi, questi vengono messi in un documento che può contenere una struttura con diversi campi e diverse lunghezze.

● Come tutte le cose, anche nei database NoSQL non esistono solo vantaggi, ad esempio se da una parte questa tecnologia risolve il problema di performance, dall’altra rende le lettura dei dati più complessa.

● Ci sono strutture che usano MongoDB per delle applicazione web e poi convertono alcune informazioni su MySQL proprio per analizzarlo con più semplicità.

● Un’altro svantaggio dei database NoSQL è la consistenza che in ambiente relazionale è gestita dal database mentre in NoSQL dall’applicazione.

Cloud Computing

Amazon Web Service 1

AmazonSNS

AmazonMFA

AmazonCloudFront

AmazonFree Trial

AmazonS3

AmazonGlacier

Amazon Web Service 2

ElasticTranscoder

Storagegateway

AmazonSES

AmazonCloudTrial

AmazonCloudWatch

AmazonSQS

AmazonIAM Top 10

AmazonRDS

AmazonRDS/MYSQL

AmazonIAM