# Cloud database

Quella dei cloud database è una tipologia di basi di dati che viene ospitata su una piattaforma di cloud computing. Nelle versioni più evolute la maggior parte del sistema database è gestito dalla piattaforma cloud, lasciando al proprietario solo compiti amministrativi di alto livello. Si parla in questo caso di Database-as-a-Service (DBaaS).

## Modelli di Distribuzione

Ci sono due metodi primari per gestire un database in ambiente cloud:

### Virtual machine Image

    Le piattaforme cloud permettono agli utenti di acquistare istanze di macchine virtuali per un tempo limitato, ed è possibile gestire un database in tali macchine virtuali. Gli utenti possono anche caricare le proprie machine image con all'interno il database già installato, oppure utilizzare una macchina già pronta che contiene una versione ottimizzata di un database. Per esempio, Oracle fornisce macchine già pronte con installato Oracle Database 11g Enterprise Edition su Amazon EC2 e su Microsoft Azure.

### Database-as-a-service (DBaaS)

    Con un database erogato come servizio, i proprietari delle applicazioni non devono installare a manutenere il database. Invece, il fornitore del servizio si prende la responsabilità di installare e manutenere il database, e ai proprietari delle applicazioni viene fatto pagare un importo proporzionale all'uso del servizio. Per esempio, Amazon Web Services fornisce tre database come servizi offrendoli come parte del suo portfolio cloud: SimpleDB, un database NoSQL chiave-valore; Amazon RDS, un servizio di database relazionale che include il supporto per MySQL, Oracle, etc.; e DynamoDB. Microsoft offre il suo servizio Azure SQL Database nella sua piattaforma cloud Azure.
La piattaforma di cloud computing Rackspace offre database come servizio per MySQL and MongoDB. I fornitori dei servizi hanno anche lanciato il loro servizio sotto questo modello. Oracle fornisce il proprio database come servizio, permettendo agli utenti di accedere a Oracle Database 11g and 12c come servizio cloud. MongoDB ha recentemente lanciato il proprio MongoDB come servizio, MongoDB Atlas.

### Architetture e caratteristiche comuni

* Molti servizi di database offrono una console web, che l'utente finale può utilizzare per fornire e configurare le istanze del database. Per esempio, la console web di Amazon Web Services abilita gli utenti a lanciare le istanze del database, creando snapshots (analoghi ai backups) del database, e monitorando le sue statistiche
* Il servizio di database consiste di una componente di gestione, che controlla gli strati sottostanti delle istanze usando una service API. La service API è esposta all'utente finale, e gli permette di eseguire operazioni di manutenzione e scalabilità sulle proprie istanze del database. Per esempio la service API di Amazon Relational Database Service abilita alla creazione di istanze di database, modificando le risorse disponibili sull'istanza, cancellando istanze di database, creando snapshot (cioè dei backup) del database, e ripristinando un database da uno snapshot.
* Lo strato software sottostante include tipicamente il sistema operativo, il database e software di terzi parti usati per gestirlo. Il fornitore del servizio (ad esempio MongoLab o ObjectRocket) è responsabile dell'installazione, dell'aggiustamento e dell'aggiornamento del software sottostante e garantendo complessivamente il funzionamento e le prestazioni del database.
* La scalabilità differisce tra i diversi venditori - molti offrono una scalabilità automatizzata, altri abilitano l'utente nel gestirla mediante l'uso di un'API. C'è tipicamente un affidamento per un certo livello di alta disponibilità (ad esempio 99.9% or 99.99%).

## Modello dei dati

Nella progettazione e nello sviluppo di sistemi tipicamente si utilizzano la gestione dei data e i database relazionali come loro chiave di costruzione. Interrogazioni avanzate espresse in SQL lavorano bene con relazioni precise che sono imposte sulle informazioni dai database relazionali. Tuttavia, la tecnologia dei database relazionali non era inizialmente disegnata o sviluppata per usi su sistemi distribuiti. Questo problema è stato indirizzato con l'aggiunta di miglioramenti nella creazione dei cluster con i database relazionali, sebbene molti compiti di base richiedano complessi e costosi protocolli, ad esempio la sincronizzazione dei dati.
I moderni database relazionali hanno mostrati scarse prestazioni su sistemi data-intensive, perciò, l'idea di NoSQL è stata usato all'interno dei sistemi di gestione dei database basati sul cloud. All'interno di database NoSQL implementati, non ci sono requisiti per schemi fissati nelle tabelle, e l'uso dell'operazione di join è vietato. "The NoSQL databases have proven to provide efficient horizontal scalability, good performance, and ease of assembly into cloud applications."
È anche importante una distinzione tra i cloud database che sono relazionali rispetto a quelli non relazionali o NoSQL:

### SQL database

    Ad esempio PostgreSQL, EDB Postgres Advanced Server, NuoDB, Oracle Database, Microsoft SQL Server, MariaDB e MySQL, rappresentano un tipo di database che possono girare in una piattaforma cloud, sia in una macchina virtuale sia erogati come servizio, in base al fornitore. Mentre i database SQL sono facilmente scalabili verticalmente, la scalabilità orizzontale viene posta come sfida, che i servizi dei cloud database hanno iniziato a indirizzare.

### NoSQL database

    Ad esempio Apache Cassandra, CouchDB e MongoDB, sono un altro tipo di database che possono girare nel cloud. I database NoSQL sono costruiti per servire pesanti carichi di lettura/scrittura e possono scalare su e giù facilmente, e perciò sono molto più adatti per essere eseguiti in una piattaforma cloud.
    Tuttavia, la maggior parte delle applicazioni contemporanee sono costruite intorno ad un modello dei dati relazionale, quindi lavorare con database NoSQL spesso richiede una riscrittura del codice delle applicazioni.
    Molti database relazionali hanno inglobato funzionalità usate nei NoSQL tra cui risultano il formato JSON, il formato JSON binario, e database chiave-valore. Questi database multi-modello includono PostgreSQL e EDB Postgres Advanced Server.
    Un database multi-modello con funzionalità relazionali e non, fornisce un'interfaccia SQL standard agli utenti e alle applicazioni, e così facilita l'uso di tali database per applicazioni contemporanee costruite intorno ad un modello dati SQL.

## Principali venditori

Le seguente tabelle elenca i venditori di database maggiormente degni di nota con offerte di cloud database, classificate dal loro modello di distribuzione - immagini di macchine virtuali vs. database come servizi - e modello dei dati, SQL vs. NoSQL.
Venditori di Cloud database in base alla distribuzione e al modello dei dati :
| | Distribuzione su Macchina Virtuale | Database come servizio |
| Modello Dati SQL | EDB Postgres Advanced Server IBM DB2 Ingres (database) MariaDB MySQL NuoDB Oracle Database PostgreSQL SAP HANA | Amazon Relational Database Service Clustrix Database as a Service EnterpriseDB Postgres Plus Cloud Database Google Cloud SQL Heroku PostgreSQL as a Service (shared and dedicated database options) Microsoft Azure SQL Database (MS SQL) Xeround Cloud Database* - MySQL front-end (*service no longer available) |
| Modello dati NoSQL | Apache Cassandra on Amazon EC2 or Google Compute Engine Clusterpoint Database Virtual Box VM CouchDB on Amazon EC2 or Google Cloud Platform EDB Postgres Advanced Server Hadoop on Amazon EC2, Google Cloud Platform, or Rackspace MarkLogic on Amazon EC2 or Google Cloud Platform MongoDB on Amazon EC2, Google Compute Engine, Microsoft Azure, or Rackspace Neo4J on Amazon EC2 or Microsoft Azure | Amazon DynamoDB Amazon SimpleDB Azure DocumentDB Cloudant Data Layer (CouchDB) EnterpriseDB Postgres Plus Cloud Database Google Cloud Bigtable Google Cloud Datastore MongoDB Database as a Service (several options) |