# Base de dados na nuvem

Uma base de dados na nuvem é uma base de dados que normalmente é executada em uma plataforma de computação na nuvem e o acesso à base de dados é fornecido como um serviço. Existem dois modelos comuns de implantação: os utilizadores podem executar a base de dados na nuvem de forma independente, usando uma imagem de máquina virtual, ou podem adquirir acesso a um serviço de base de dados, mantido por um provedor de base de dados na nuvem. Das base de dados disponíveis na nuvem, algumas são baseadas em SQL e outras usam um modelo de dados NoSQL.
Os serviços de base de dados cuidam da escalabilidade e da alta disponibilidade da base de dados. Os serviços de base de dados tornam a pilha de software subjacente transparente para o utilizador.

## Modelos de implementação

Existem dois métodos principais para executar uma base de dados numa plataforma de nuvem:
   * Imagem de máquina virtual
    As plataformas de nuvem permitem que os utilizadores comprem instâncias de máquinas virtuais por um tempo limitado, e é possível executar uma base de dados nessas máquinas virtuais. Os utilizadores podem fazer upload da sua própria imagem de máquina com uma base de dados instalada ou usar imagens de máquina prontas que já incluem uma instalação otimizada de uma base de dados.
   * Base de dados como serviço (DBaaS)
    Com um modelo de base de dados como serviço, os usuários pagam taxas a um provedor de nuvem por serviços e recursos de computação, reduzindo a quantidade de dinheiro e esforço necessários para desenvolver e gerir bases de dados. Os utilizadores recebem ferramentas para criar e gerir instâncias de bases de dados e controlar utilizadores. Alguns provedores de nuvem também oferecem ferramentas para gerir estruturas de base de dados e dados. Muitos provedores de nuvem oferecem bases de dados relacionais (Amazon RDS, SQL Server) e NoSQL (MongoDB, Amazon DynamoDB). Este é um tipo de software como serviço (SaaS).

### Arquitetura e características comuns

* A maioria dos serviços de base de dados oferece terminais baseados na web, que o utilizador final pode usar para providenciar e configurar instâncias de base de dados.
* Os serviços de base de dados consistem em um componente gestor de base de dados, que controla as instâncias de base de dados subjacentes usando uma API de serviço. A API de serviço é exposta ao utilizador final e permite que os utilizadores realizem operações de manutenção e dimensionamento nas suas instâncias de base de dados.
* A pilha de software subjacente normalmente inclui o sistema operacional, o base de dados e o software de terceiros usado para gerir a base de dados. O provedor de serviços é responsável por instalar, corrigir e atualizar o conjunto de software subjacente e garantir a integridade e o desempenho geral da base de dados.
* Os recursos de escalabilidade diferem entre os fornecedores – alguns oferecem dimensionamento automático, outros permitem que o utilizador dimensione usando uma API, mas não dimensionam automaticamente.
* Normalmente, há um compromisso para um determinado nível de alta disponibilidade (por exemplo, 99,9% ou 99,99%). Isso é obtido replicando dados e transferindo instâncias para outras instâncias de base de dados.

## Modelo de dados

O design e o desenvolvimento de sistemas típicos utilizam gestão de dados e bases de dados relacionais como os seus principais blocos de construção. Consultas avançadas expressas em SQL funcionam bem com os relacionamentos rígidos impostos às informações por bases de dados relacionais. Entretanto, a tecnologia de base de dados relacional não foi inicialmente projetada ou desenvolvida para uso em sistemas distribuídos. Este problema foi resolvido com a adição de melhorias de clustering às bases de dados relacionais, embora algumas tarefas básicas exijam protocolos complexos e caros, como a sincronização de dados.
As bases de dados relacionais modernas têm mostrado baixo desempenho em sistemas com uso intensivo de dados, portanto, a ideia do NoSQL tem sido utilizada em sistemas de gestão de base de dados para sistemas baseados na nuvem. No armazenamento implementado pelo NoSQL, não há requisitos para esquemas de tabelas fixas e o uso de operações de junção é evitado. "As bases de dados NoSQL provaram fornecer escalabilidade horizontal eficiente, bom desempenho e facilidade de montagem em aplicações na nuvem." Modelos de dados baseados em algoritmos de retransmissão simplificados também foram empregados em aplicativos de mapeamento de nuvem com uso intensivo de dados, exclusivos de estruturas virtuais.
Também é importante diferenciar entre bases de dados na nuvem que são relacionais e não relacionais ou NoSQL:
   * Bases de dados SQL
    Bases de dados SQL são um tipo de base de dados que podem ser executado na nuvem, em uma máquina virtual ou como um serviço, dependendo do fornecedor. Embora as bases de dados SQL sejam facilmente escaláveis verticalmente, a escalabilidade horizontal representa um desafio que os serviços de base de dados em nuvem baseados em SQL começaram a abordar.$^[$
   * Bases de dados NoSQL
    Bases de dados NoSQL são outro tipo de base de dados que podem ser executado na nuvem. As bases de dados NoSQL são criadas para atender a cargas pesadas de leitura/gravação e podem ser ampliados ou reduzidos facilmente, e, portanto, são mais adequados nativamente para execução na nuvem. No entanto, a maioria das aplicações contemporâneas são construídas em torno de um modelo de dados SQL, portanto, trabalhar com bases de dados NoSQL geralmente requer uma reescrita completa do código da aplicação.
    Algumas bases de dados SQL desenvolveram recursos NoSQL, incluindo JSON, JSON binário (por exemplo, BSON ou variantes semelhantes) e tipos de dados de armazenamento de chave-valor.
    Uma base de dados multimodelo com recursos relacionais e não relacionais fornece uma interface SQL padrão para utilizadores e aplicações e, assim, facilita o uso dessas bases de dados para aplicações contemporâneas criadas em torno de um modelo de dados SQL. Bases de dados multimodelo nativas oferecem suporte a vários modelos de dados com um núcleo e uma linguagem de consulta unificada para acessar todos os modelos de dados.

## Fornecedores

A tabela a seguir lista fornecedores de bases de dados notáveis com uma oferta de base de dados em nuvem, classificados por seu modelo de implantação – imagem de máquina vs. base de dados como serviço – e modelo de dados, SQL vs. NoSQL.
Cloud database vendors by deployment and data model :
| | Virtual Machine Deployment | Database as a Service |
| SQL Data Model | EDB Postgres Advanced Server IBM Db2 Ingres (database) MariaDB MySQL NuoDB Oracle Database PostgreSQL SAP HANA YugabyteDB | Amazon Aurora, MySQL based service Amazon Relational Database Service Clustrix Database as a Service CockroachDB-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) Oracle Database Cloud Service SkySQL MariaDB Snowflake Cloud Data Warehouse Xeround Cloud Database* – MySQL front-end (*service no longer available) YugabyteDB |
| NoSQL Data Model | Apache Cassandra on Amazon EC2 or Google Compute Engine ArangoDB on Amazon EC2, Google Compute or Microsoft Azure 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 ScyllaDB on Amazon EC2 or Google Cloud Platform YugabyteDB | Amazon DynamoDB Amazon SimpleDB$^[$ Azure Cosmos DB Couchbase Capella Database as a Service Cloudant Data Layer (CouchDB) DataStax Astra DB powered by Apache Cassandra EnterpriseDB Postgres Plus Cloud Database Google Cloud Bigtable Google Cloud Datastore MongoDB Database as a Service (several options) Oracle NoSQL Database Cloud Service ScyllaDB Cloud Amazon DocumentDB YugabyteDB |