19

Click here to load reader

PRD-026 - Amazon DynamoDB

Embed Size (px)

Citation preview

Page 1: PRD-026 - Amazon DynamoDB

Amazon Web Services

cloud-aws.com

Amazon DynamoDB

Hangout 26 del 01.09.2014

● Davide Riboldi● Massimo Della Rovere

Oggi vediamo le caratteristiche generali del servizio DynamoDB per la gestione di un database NoSQL.

#cloudaws

Page 2: PRD-026 - Amazon DynamoDB

● Il servizio DynamoDB appartiene al gruppo dei servizi dedicati ai database. La volta precedente abbiamo visto RDS per i database relazionali, questa volta invece vediamo un database NoSQL.

● Abbiamo pubblicato anche un’articolo chiamato Database NoSQL introduzione, per chiarire le differenze e le caratteristiche principali senza doverle riportare in questa presentazione.

https://otherplus.com/tech/database-nosql/

Page 3: PRD-026 - Amazon DynamoDB

● Amazon DynamoDB mette a disposizione degli sviluppatori un servizio di database NoSQL che gestisce in maniera automatica tutti gli aspetti legati alle performance e alla scalabilità.

● È possibile creare diverse tabelle su cui memorizzare e leggere dati ad un velocità desiderata. Sarà il servizio di Amazon che gestirà automaticamente il numero dei server necessari alla nostra richiesta.

⇒ Throughput Capacity

Page 4: PRD-026 - Amazon DynamoDB

● Tutti i dati vengono memorizzati su dischi (SSD) e duplicati automaticamente tra le diverse zone di disponibilità presenti nella regione geografica, così ottenendo high availability e data durability.

● È possibile aumentare la capacità di richiesta del database senza tempi di downtime e senza degradi nelle performance. Sarà anche possibile controllare tutte le risorse utilizzate tramite la management console o tramite il servizio Amazon CloudWatch.

SSD

Page 5: PRD-026 - Amazon DynamoDB

Security

Integrazione Redshift

EMR

Efficient Indexing

Flessibility&

Cost

Easy Admin

Fault Tolerance

High performance

SSD

Automated Storage Scaling

Provisioned Throughput

Page 6: PRD-026 - Amazon DynamoDB

● Provisioned Throughput: quando si crea una tabella bisogna specificare quante richieste al secondo abbiamo necessità di gestire, su tutto il resto che riguarda i server necessari, la quantità di RAM, CPU, etc, viene gestito in automatico dal servizio. Usando le API o la management console potremmo cambiare queste caratteristiche quando lo desideriamo e il servizio DynamoDB applicherà le modifiche senza nessun downtime.

● Automated Storage Scaling: la quantità di storage necessaria alla memorizzazione dei dati nelle tabelle viene gestita direttamente dal servizio, non dobbiamo preoccuparci di allocare spazio anticipatamente, ma abbiamo a disposizione uno spazio concettualmente infinito che il servizio gestisce in automatico.

● High performance: la latenza media del servizio DynamoDB viene espressa in pochissimi millisecondi. Per garantire la massima velocità vengono utilizzate solo unità disco SSD a stato solido. In questa maniera viene garantito un rapporto coerente di bassa latenza su qualsiasi scala di dati.

Page 7: PRD-026 - Amazon DynamoDB

● Easy Administration: non vengono mai richieste operazioni complesse per operare con questo servizio, lo sviluppatore deve solo creare le tabelle che gli interessano e scrivere le procedure di lettura e scrittura. Tutta la parte che riguarda configurazioni, patching, clustering e partitioning viene gestito in maniera del tutto trasparente dal servizio.

● Built-in Fault Tolerance: il servizio DynamoDB prevede al suo interno delle procedure di fault tolerance che sincronizzano e replicano le informazioni delle nostre tabelle in diverse zone di disponibilità presenti nella regione geografica selezionata. Tutto questo rendendo trasparenti eventuali guasti di macchine assegnate al nostro database.

● Flessibile: essendo un sistema di database NoSQL non si ha a disposizione uno schema fisso, come ad esempio in un database MySQL, ma ogni elemento memorizzato nella tabella può avere differenti attributi. Sono permessi diversi tipi di dati, come (stringhe, numeri, dati binari e sets) che hanno comunque dei limiti massimi di dimensione.

Page 8: PRD-026 - Amazon DynamoDB

● Efficient Indexing: ogni elemento (item) presente in una tabella di DynamoDB viene identificato con una chiave primaria, questo permette sempre un’accesso efficiente e molto veloce. È possibile definire anche un’indice secondario su un’elemento che non ha chiave ed eseguire una ricerca (query) usando la chiave alternativa.

● Costo efficiente: il servizio è studiato per mantenere sempre un costo molto efficiente rispetto al workload necessario. È possibile anche usare il servizio in modalità free tier che permette di ottenere quasi 40 milioni di operazioni al mese gratuitamente. Rispetto ad un workload di un database relazionale il costo si abbassa in modo significativo.

● Sicurezza: il servizio di DynamoDB mette a disposizione molte funzioni di sicurezza sia per quanto riguarda la crittografia che il metodo di autenticazione. È possibile usare il servizio di Amazon IAM e utilizzare gli accessi tramite organizzazione, ad esempio è possibile utilizzare gli account di Amazon, Google e Facebook.

Page 9: PRD-026 - Amazon DynamoDB

● Monitoraggio: è possibile tenere sotto controllo le risorse utilizzate dal servizio per le nostre tabelle sia tramite la management console che con le API. Possiamo definire delle metriche CloudWatch per tenere sotto controllo diverse misurazioni.

● Integrazione Redshift: il servizio permette il caricamento dei dati presenti nelle nostre tabelle direttamente in Amazon Redshift, un gestore completo di warehouse. In questa maniera è possibile utilizzare un client SQL o uno strumento di business intelligence ed elaborare complesse query di analisi per i nostri dati.

● Amazon Elastic MaReduce: il database di DynamoDB è integrato anche con il servizio di Elastic MapReduce che permette l'elaborazione di complesse analisi su una grande mole di dati, usando un framework come quello di Hadoop. Amazon EMR può essere utilizzato anche per leggere un'ambiente misto di database relazionali e NoSQL.

Page 10: PRD-026 - Amazon DynamoDB
Page 11: PRD-026 - Amazon DynamoDB

● Il servizio di database Amazon DynamoDB include i concetti di tabelle, items e attributi, un database è una collezione di tabelle, una tabella è una collezione di items e un item è una collezione di attributi.

● In DynamoDB, eccetto per la chiave primaria, ogni elemento può avere uno schema proprio e può avere una lista di attributi differenti. Ogni elemento può occupare al massimo 64KB e il formato dei dati deve essere binario codificato in formato UTF-8.

Page 12: PRD-026 - Amazon DynamoDB

⇒ Due Items con attributi diversi e stessa chiave

Page 13: PRD-026 - Amazon DynamoDB

● In DynamoDB quando viene creata una tabella bisogna indicare una chiave primaria. Il servizio supporta due tipologie di chiavi: la Hash Key che viene associata ad un’attributo e creata in modo non-ordinato e la Hash Range Key la quale è composta da un’attributo Hash e uno Range, il primo è di tipo non-ordinato mentre il secondo è di tipo ordinato rispetto alla chiave primaria. Vediamo una tabella d’esempio:

Table Name Primary Key Hash attribute Range attribute

Forum ( Name, … ) Hash Name -

Thread (Forum, Subject, … ) Hash/Range Forum Subject

Reply ( Id, ReplyDate, … ) Hash/Range Id ReplyDate

Page 14: PRD-026 - Amazon DynamoDB

● Il servizio mette a disposizione le operazioni classiche di creazione, modifica e cancellazione. Ad esempio è possibile usare UpdateTable per aumentare e diminuire le performance del db secondo le nuove esigenze.

● Possiamo usare DescribeTable per ottenere informazioni sullo stato della tabella, le caratteristiche della chiave primaria e le informazioni sulla creazione.

● È possibile anche utilizzare l’operazione ListTables per ottenere l’elenco di tutte le tabelle associate al nostro account AWS e controllare le caratteristiche.

Page 15: PRD-026 - Amazon DynamoDB

● Tramite le operazioni degli items possiamo aggiungere, modificare e rimuovere gli elementi da una tabella. Ad esempio UpdateItem permette di modificare il valore di un’attributo, aggiungerne uno nuovo o cancellarlo.

● È possibile anche elaborare una condizione per la modifica, ad esempio modificare solo gli elementi che hanno un prezzo di 20$. (conditional update)

● DynamoDB mette a disposizione anche GetItem per leggere un singolo elemento e l’operazione chiamata BatchGetItem per leggere degli elementi multipli.

Page 16: PRD-026 - Amazon DynamoDB

● Data Read and Consistency: il servizio DynamoDB mantiene più copie di ogni elemento per garantire la durabilità del dato. Quando si riceve la risposta di “operazione riuscita” durante una richiesta di scrittura, DynamoDB si assicura che il dato venga memorizzato su più server. Tuttavia, dato che ci vuole comunque del tempo affinché l’aggiornamento si propaghi a tutte le copie, questo può portare ai cosiddetti problemi di consistenza.

● Conditional Updates: DynamoDB supporta una “condizione di scrittura” che è possibile specificare quando viene aggiornato un’elemento della tabella. Il servizio a fronte di una richiesta di modifica eseguirà l’operazione solo se viene soddisfatta la condizione, in caso contrario viene generato un messaggio di errore. Il servizio di DynamoDB supporta anche la funzione di “atomic counter” che serve per incrementare o decrementare un valore evitando la possibilità e la condizione di sovrapposizione simultanea.

Page 17: PRD-026 - Amazon DynamoDB

● Colleghiamoci alla management console e selezioniamo il servizio di Amazon DynamoDB (controllare anche la regione geografica), una volta visualizzata la dashboard del servizio eseguiamo il comando “create table” e inseriamo i parametri che ci vengono richiesti:

Primary Key Add Indexes Throughput Capacity Alarms Summary

1 2 3 4 5

Page 18: PRD-026 - Amazon DynamoDB

● Una volta conclusa la creazione della tabella è possibile eseguire diverse operazioni dalla console senza dover scrivere alcun programma, possiamo vedere il contenuto, eseguire funzioni di import/export, eseguire delle query e cambiare la configurazione generale.

● Ovviamente per sfruttare il database bisognerà integrarlo nel proprio applicativo tramite i vari SDK messi a disposizione da Amazon. Per questo Amazon mette a disposizione una buona documentazione, ad esempio su PHP potete vedere: Amazon SDK PHP.

Page 19: PRD-026 - Amazon DynamoDB

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

AmazonIAM

AmazonRoute 53

AmazonCloudSearch