fbpx

Bancos de Dados na AWS

Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no whatsapp
Compartilhar no telegram

Quase todos os aplicativos contam com um banco de dados para armazenar dados e registros importantes para seus usuários.

Um mecanismo de banco de dados permite que seu aplicativo acesse, gerencie e pesquise grandes volumes de registros de dados.

Em um aplicativo bem arquitetado, o banco de dados precisará atender às demandas de desempenho, às necessidades de disponibilidade e às características de recuperação do sistema.

Os sistemas e mecanismos de banco de dados podem ser agrupados em duas grandes categorias: bancos de dados Relational Database Management Systems (RDBMS) e NoSQL (ou não relacional).

Não é incomum criar um aplicativo usando uma combinação de bancos de dados RDBMS e NoSQL.

 

Bancos de Dados Relacionais

 

O tipo mais comum de banco de dados em uso atualmente é o banco de dados relacional. O banco de dados relacional tem raízes que remontam à década de 1970, quando Edgar F. Codd, trabalhando para a IBM, desenvolveu os conceitos do modelo relacional.

Hoje, os bancos de dados relacionais fornecem todos os tipos de aplicativos, de aplicativos de mídia social, sites de comércio eletrônico e blogs a aplicativos corporativos complexos.

Os pacotes de software de banco de dados relacional comumente usados ​​incluem MySQL, PostgreSQL, Microsoft SQL Server e Oracle.

Os bancos de dados relacionais fornecem uma interface comum que permite aos usuários ler e gravar no banco de dados usando comandos ou consultas gravadas usando o SQL (Structured Query Language).

Um banco de dados relacional consiste em uma ou mais tabelas e uma tabela consiste em colunas e linhas semelhantes a uma planilha.

Uma coluna do banco de dados contém um atributo específico do registro, como

como nome, endereço e número de telefone de uma pessoa.

Cada atributo recebe um tipo de dados como texto, número ou data, e o mecanismo do banco de dados rejeitará entradas inválidas.

Um registro em uma tabela pode estar relacionado a um registro em outra tabela fazendo referência à chave primária de um registro.

Esse ponteiro ou referência é chamado de chave estrangeira.

Por exemplo, a tabela Notas que registra notas para cada aluno teria sua própria chave primária e uma coluna adicional conhecida como chave estrangeira que se refere à chave primária do registro do aluno.

Ao fazer referência às chaves primárias de outras tabelas, os bancos de dados relacionais minimizam a duplicação de dados nas tabelas associadas.

Com bancos de dados relacionais, é importante observar que a estrutura da tabela (como o número de colunas e o tipo de dados de cada coluna) deve ser definida antes que os dados sejam adicionados à tabela.

Um banco de dados relacional pode ser categorizado como um sistema de banco de dados OLTP (Online Transaction Processing) ou OLAP (Online Analytical Processing), dependendo de como as tabelas são organizadas e de como o aplicativo usa o banco de dados relacional.

OLTP refere-se a aplicativos orientados a transações que frequentemente escrevem e alteram dados (por exemplo, entrada de dados e comércio eletrônico).

OLAP é normalmente o domínio de data warehouses e refere-se a relatórios ou análises de grandes conjuntos de dados.

Aplicativos grandes geralmente têm uma combinação de OLTP e OLAP.

O Amazon Relational Database Service (Amazon RDS) simplifica significativamente a configuração e a manutenção dos bancos de dados OLTP e OLAP.

O Amazon RDS fornece suporte para seis mecanismos populares de banco de dados relacional: MySQL, Oracle, PostgreSQL, Microsoft SQL Server, MariaDB, e Amazon Aurora. Você também pode optar por executar praticamente qualquer mecanismo de banco de dados usando instâncias do Amazon Elastic Compute Cloud (Amazon EC2) para Windows ou Linux e gerenciar você mesmo a instalação e administração.

 

Data Warehouses

Um data warehouse é um repositório central de dados que podem vir de uma ou mais fontes. Esse repositório de dados geralmente é um tipo especializado de banco de dados relacional que pode ser usado para geração de relatórios e análises via OLAP.

As organizações geralmente usam data warehouses para compilar relatórios e pesquisar no banco de dados usando consultas altamente complexas.

Os data warehouses também são normalmente atualizados em uma programação em lote várias vezes por dia ou por hora, em comparação com um banco de dados relacional OLTP que pode ser atualizado milhares de vezes por segundo.

Muitas organizações dividem seus bancos de dados relacionais em dois bancos de dados diferentes: um banco de dados como principal banco de dados de produção para transações OLTP e outro banco de dados como seu data warehouse para OLAP.

As transações OLTP ocorrem com frequência e são relativamente simples.

As transações OLAP ocorrem com muito menos frequência, mas são muito mais complexas.

O Amazon RDS é frequentemente usado para cargas de trabalho OLTP, mas também pode ser usado para OLAP.

O Amazon Redshift é um data warehouse de alto desempenho projetado especificamente para casos de uso OLAP.

Também é comum combinar o Amazon RDS com o Amazon Redshift no mesmo aplicativo e extrair periodicamente transações recentes e carregá-las em um banco de dados de relatórios.

 

Bancos de dados NoSQL

 

Os bancos de dados NoSQL ganharam popularidade significativa nos últimos anos porque geralmente são mais simples de usar, mais flexíveis e podem atingir níveis de desempenho difíceis ou impossíveis com os bancos de dados relacionais tradicionais.

Os bancos de dados relacionais tradicionais são difíceis de escalar além de um único servidor sem custos e engenharia significativos, mas uma arquitetura NoSQL permite escalabilidade horizontal em hardware comum.

Os bancos de dados NoSQL não são relacionais e não possuem a mesma semântica de tabela e coluna de um banco de dados relacional.

Os bancos de dados NoSQL geralmente são repositórios de chave / valor ou repositórios de documentos com esquemas flexíveis que podem evoluir ao longo do tempo ou variar. Compare isso com um banco de dados relacional, que requer um esquema muito rígido.

Muitos dos conceitos das arquiteturas NoSQL remontam a seus conceitos fundamentais de volta aos whitepapers publicados em 2006 e 2007 que descreviam sistemas distribuídos como o Dynamo na Amazon.

Hoje, muitas equipes de aplicativos usam Hbase, MongoDB, Cassandra, CouchDB, Riak e Amazon DynamoDB para armazenar grandes volumes de dados com altas taxas de transação.

Muitos desses mecanismos de banco de dados oferecem suporte ao cluster e escalam horizontalmente em muitas máquinas para desempenho e tolerância a falhas.

Um caso de uso comum para o NoSQL é gerenciar o estado da sessão do usuário, perfis de usuário, dados do carrinho de compras ou dados de séries temporais.

Você pode executar qualquer tipo de banco de dados NoSQL na AWS usando o Amazon EC2 ou pode escolher um serviço gerenciado como o Amazon DynamoDB para lidar com o trabalho pesado envolvido na criação de um cluster distribuído que abrange vários data centers.

 

Serviço de Banco de Dados Relacional da Amazon (Amazon RDS)

 

O Amazon RDS é um serviço que simplifica a configuração, operações e dimensionamento de um banco de dados relacional na AWS.

Com o Amazon RDS, você pode dedicar mais tempo ao aplicativo e ao esquema e permitir que o Amazon RDS descarregue tarefas comuns, como backups, aplicação de patches, dimensionamento e replicação.

O Amazon RDS ajuda a otimizar a instalação do software de banco de dados e também o provisionamento da capacidade da infraestrutura.

Em alguns minutos, o Amazon RDS pode iniciar um dos muitos mecanismos de banco de dados populares prontos para começar a realizar transações SQL.

Após o lançamento inicial, o Amazon RDS simplifica a manutenção contínua, automatizando tarefas administrativas comuns de forma recorrente.

Com o Amazon RDS, você pode acelerar os cronogramas de desenvolvimento e estabelecer um modelo operacional consistente para gerenciar bancos de dados relacionais.

Por exemplo, o Amazon RDS facilita a replicação de seus dados para aumentar a disponibilidade, melhorar a durabilidade ou ampliar ou além de uma instância de banco de dados única para cargas de trabalho de banco de dados com leitura pesada.

O Amazon RDS expõe um terminal de banco de dados ao qual o software cliente pode conectar e executar o SQL.

O Amazon RDS não fornece acesso de shell às instâncias de banco de dados (DB) e restringe o acesso a determinados procedimentos e tabelas do sistema que exigem privilégios avançados.

Com o Amazon RDS, você normalmente pode usar as mesmas ferramentas para consultar, analisar, modificar e administrar o banco de dados.

Por exemplo, as ferramentas atuais Extract, Transform, Load (ETL) e as ferramentas de relatório podem se conectar aos bancos de dados do Amazon RDS da mesma maneira com os mesmos drivers e, geralmente, tudo o que é necessário para reconfigurar é alterar o nome do host na cadeia de conexão.

 

Instâncias de Banco de Dados (DB)

O próprio serviço Amazon RDS fornece uma API (Application Programming Interface) que permite criar e gerenciar uma ou mais instâncias de banco de dados.

Uma Instância de banco de dados é um ambiente de banco de dados isolado implantado em seus segmentos de rede privados na nuvem.

Cada instância de banco de dados executa e gerencia um mecanismo de banco de dados comercial ou de código aberto popular em seu nome.

Atualmente, o Amazon RDS suporta os seguintes mecanismos de banco de dados: MySQL, PostgreSQL, MariaDB, Oracle, SQL Server e Amazon Aurora.

Você pode iniciar uma nova instância de banco de dados chamando a API CreateDBInstance ou usando o AWS Management Console. As instâncias de banco de dados existentes podem ser alteradas ou redimensionadas usando a API ModifyDBInstance. Uma instância de banco de dados pode conter vários bancos de dados diferentes, todos você cria e gerencia dentro da própria Instância de banco de dados executando comandos SQL com o terminal do Amazon RDS.

Os diferentes bancos de dados podem ser criados, acessados ​​e gerenciados usando as mesmas ferramentas e aplicativos do cliente SQL usados ​​hoje.

Os recursos de computação e memória de uma instância de banco de dados são determinados por sua classe de instância de banco de dados.

Você pode selecionar a classe Instância do banco de dados que melhor atenda às suas necessidades de computação e memória.

O intervalo de classes de Instância de banco de dados se estende de um db.t2.micro com 1 CPU virtual (vCPU) e 1 GB de memória, até um db.r3.8xlarge com 32 vCPUs e 244 GB de memória. À medida que suas necessidades mudam com o tempo, você pode alterar a classe da instância e o equilíbrio da computação da memória, e o Amazon RDS migrará seus dados para uma classe de instância maior ou menor.

Independente da classe Instância do banco de dados selecionada, também é possível controlar o tamanho e as características de desempenho do armazenamento usado.

O Amazon RDS suporta uma grande variedade de mecanismos, versões e combinações de recursos.

Muitos recursos e definições de configuração comuns são expostos e gerenciados usando grupos de parâmetros do DB e grupos de opções do BD.

Um grupo de parâmetros do BD atua como um contêiner para a configuração do mecanismo valores que podem ser aplicados a uma ou mais instâncias de banco de dados.

Você pode alterar o grupo de parâmetros do BD para uma instância existente, mas é necessária uma reinicialização.

Um grupo de opções de banco de dados atua como um contêiner para os recursos do mecanismo, que estão vazios por padrão. Para habilitar recursos específicos de um banco de dados (por exemplo, Oracle Statspack, Microsoft SQL Server Mirroring), crie um novo grupo de opções de banco de dados e defina as configurações adequadamente.

Os bancos de dados existentes podem ser migrados para o Amazon RDS usando ferramentas e técnicas nativas que variam dependendo do mecanismo. Por exemplo, com o MySQL, você pode exportar um backup usando o mysqldump e importar o arquivo para o Amazon RDS MySQL.

Você também pode usar o Serviço de Migração de Banco de Dados da AWS, que fornece uma interface gráfica que simplifica a migração do esquema e dos dados entre os bancos de dados.

O AWS Database Migration Service também ajuda a converter bancos de dados de um mecanismo de banco de dados para outro.

 

Benefícios Operacionais

O Amazon RDS aumenta a confiabilidade operacional de seus bancos de dados aplicando um modelo operacional e de implantação muito consistente.

Esse nível de consistência é alcançado em parte pela limitação dos tipos de alterações que podem ser feitas na infraestrutura subjacente e pelo uso extensivo da automação.

Por exemplo, com o Amazon RDS, você não pode usar o Secure Shell (SSH) para efetuar login na instância do host e instalar um software personalizado. No entanto, você pode conectar-se usando as ferramentas de administrador do SQL ou usar grupos de opções de banco de dados e grupos de parâmetros de banco de dados para alterar o comportamento ou a configuração de recurso de uma instância de banco de dados.

Se você deseja controle total do sistema operacional (SO) ou precisa de permissões elevadas para executar, considere instalar seu banco de dados no Amazon EC2 em vez do Amazon RDS.

O Amazon RDS foi projetado para simplificar as tarefas comuns necessárias para operar um banco de dados relacional de maneira confiável.

 

Mecanismos de banco de dados

 

O Amazon RDS suporta seis mecanismos de banco de dados: MySQL, PostgreSQL, MariaDB, Oracle, SQL Server e Amazon Aurora. Recursos e capacidades variam um pouco, dependendo do mecanismo que você selecionar.

 

MySQL

O MySQL é um dos bancos de dados de código aberto mais populares do mundo e é usado para alimentar uma ampla gama de aplicativos, de pequenos blogs pessoais a alguns dos maiores sites do mundo.

Até o momento em que este artigo foi escrito, o Amazon RDS for MySQL atualmente suporta o MySQL 8.0.19.

O mecanismo está executando o Community Edition de código aberto com o InnoDB como o mecanismo de armazenamento de banco de dados padrão e recomendado. O Amazon RDS MySQL permite conectar-se usando ferramentas padrão do MySQL, como MySQL Workbench ou SQL Workbench / J.

O Amazon RDS MySQL suporta implantações Multi-AZ para alta disponibilidade e réplicas de leitura para dimensionamento horizontal.

 

PostgreSQL

O PostgreSQL é um mecanismo de banco de dados de código aberto amplamente utilizado, com um conjunto muito rico de recursos e funcionalidade avançada.

O Amazon RDS suporta instâncias de banco de dados executando várias versões do PostgreSQL. Até o momento da redação deste artigo, o Amazon RDS suporta várias versões do PostgreSQL, incluído a ultima, versão 12.

 

O Amazon RDS PostgreSQL pode ser gerenciado usando ferramentas padrão como pgAdmin e suporta drivers JDBC / ODBC padrão. O Amazon RDS PostgreSQL também oferece suporte à implantação Multi-AZ para alta disponibilidade e réplicas de leitura para dimensionamento horizontal.

 

MariaDB

O Amazon RDS recentemente adicionou suporte para instâncias de banco de dados executando o MariaDB. O MariaDB é um popular mecanismo de banco de dados de código aberto, criado pelos criadores do MySQL e aprimorado com ferramentas e funcionalidades empresariais.

O MariaDB adiciona recursos que aprimoram o desempenho, disponibilidade e escalabilidade do MySQL.

O Amazon RDS suporta totalmente o mecanismo de armazenamento XtraDB para as instâncias de banco de dados MariaDB e, como o Amazon RDS MySQL e o PostgreSQL, oferece suporte à implantação Multi-AZ e às réplicas de leitura.

 

Oracle

O Oracle é um dos bancos de dados relacionais mais populares usados na empresa e é totalmente suportado pelo Amazon RDS.

O Amazon RDS suporta Instâncias de banco de dados executando várias edições do Oracle 11g e Oracle 12c. O Amazon RDS oferece suporte ao acesso a esquemas em uma instância de banco de dados usando qualquer aplicativo cliente padrão do SQL, como o Oracle SQL Plus.

O Amazon RDS Oracle suporta três edições diferentes do popular mecanismo de banco de dados: Standard Edition One, Standard Edition e Enterprise Edition

 

Microsoft SQL Server

O Microsoft SQL Server é outro banco de dados relacional muito popular utilizado pela Amazon RDS. O Amazon RDS permite que os administradores de banco de dados (DBAs) se conectem à instância de banco de dados do SQL Server na nuvem usando ferramentas nativas como o SQL Server Management Studio.

O Amazon RDS SQL Server também oferece suporte a quatro edições diferentes do SQL Server: Express Edition, Web Edition, Standard Edition e Enterprise Edition.

 

Licenciamento

O Amazon RDS Oracle e o Microsoft SQL Server são produtos de software comercial que exigem licenças apropriadas para operar na nuvem.

A AWS oferece dois modelos de licenciamento: Licença Incluída e Traga Sua Própria Licença (BYOL).

  • Licença incluída: No modelo Licença incluída, a licença é mantida pela AWS e incluída no preço da instância do Amazon RDS.
    • Para Oracle, a Licença Incluída fornece licenciamento para o Standard Edition One.
    • Para o SQL Server, a Licença Incluída fornece licenciamento para o SQL Server Express Edition, Web Edition e Standard Edition.
  • Traga sua própria licença (BYOL): No modelo BYOL, você fornece sua própria licença.
    • Para Oracle, você deve ter a licença apropriada do Oracle Database para a classe DB Instance e a edição do Oracle Database que deseja executar. Você pode adquirir as edições Standard Edition One, Standard Edition e Enterprise Edition.
    • Para o SQL Server, você fornece sua própria licença no programa Microsoft License Mobility. Você pode trazer o Microsoft SQL Standard Edition e também o Enterprise Edition.

Você é responsável por rastrear e gerenciar como as licenças são alocadas.

 

Amazon Aurora

O Amazon Aurora oferece tecnologia de banco de dados comercial de nível empresarial, oferecendo a simplicidade e a relação custo-benefício de um banco de dados de código aberto.

Isso é obtido através da reformulação dos componentes internos do MySQL para adotar uma abordagem mais orientada a serviços.

Como outros mecanismos do Amazon RDS, o Amazon Aurora é um serviço totalmente gerenciado, compatível com o MySQL e fornece maior confiabilidade e desempenho em implantações padrão do MySQL.

O Amazon Aurora pode fornecer até cinco vezes o desempenho do MySQL sem exigir alterações na maioria dos aplicativos da web existentes.

Você pode usar o mesmo código, ferramentas e aplicativos que usa com os bancos de dados MySQL existentes com o Amazon Aurora. Ao criar uma instância do Amazon Aurora, você cria um cluster de banco de dados.

Um cluster de banco de dados possui uma ou mais instâncias e inclui um volume de cluster que gerencia os dados para essas instâncias.

Um volume de cluster do Amazon Aurora é um volume de armazenamento de banco de dados virtual que abrange várias zonas de disponibilidade, com cada zona de disponibilidade tendo uma cópia dos dados do cluster.

Um cluster do Amazon Aurora DB consiste em dois tipos diferentes de instâncias:

  • Instância primária: Esta é a instância principal, que suporta cargas de trabalho de leitura e gravação. Ao modificar seus dados, você está modificando a instância principal. Cada cluster do Amazon Aurora DB possui uma instância principal.
  • Réplica do Amazon Aurora: Esta é uma instância secundária que suporta apenas operações de leitura. Cada cluster de banco de dados pode ter até 15 réplicas do Amazon Aurora, além da instância principal. Ao usar várias réplicas do Amazon Aurora, você pode distribuir a carga de trabalho de leitura entre várias instâncias, aumentando o desempenho. Você também pode localizar as réplicas do Amazon Aurora em várias zonas de disponibilidade para aumentar a disponibilidade do banco de dados.

 

Opções de Armazenamento

O Amazon RDS é desenvolvido usando o Amazon Elastic Block Store (Amazon EBS) e permite selecionar a opção de armazenamento correta com base em seus requisitos de desempenho e custo.

Dependendo do mecanismo do banco de dados e da carga de trabalho, você pode escalar até 4 a 6 TB em armazenamento provisionado e até 30.000 IOPS. O Amazon RDS suporta três tipos de armazenamento: Magnetic, General Purpose (Solid State Drive [SSD]) e Provisioned IOPS (SSD).

  • Magnético: O armazenamento magnético, também chamado de armazenamento padrão, oferece armazenamento econômico, ideal para aplicativos com requisitos leves de E / S.
  • Armazenamento de uso geral (SSD), também chamado gp2, pode fornecer acesso mais rápido que o armazenamento magnético. Esse tipo de armazenamento pode fornecer desempenho intermitente para atender a picos e é excelente para bancos de dados pequenos e médios.
  • IOPS provisionado (SSD): O armazenamento IOPS provisionado (SSD) foi projetado para atender às necessidades de cargas de trabalho intensivas em E / S, particularmente cargas de trabalho de banco de dados, sensíveis ao desempenho de armazenamento e consistência na taxa de transferência de E / S de acesso aleatório.

Para a maioria das aplicações, o General Purpose (SSD) é a melhor opção e fornece uma boa combinação de características de menor custo e maior desempenho.

 

Restaurar e Recuperar

O Amazon RDS fornece um modelo operacional consistente para procedimentos de backup e recuperação nos diferentes mecanismos de banco de dados.

 

O Amazon RDS fornece dois mecanismos para fazer backup do banco de dados: backups automatizados e snapshots manuais. Usando uma combinação das duas técnicas, você pode criar um modelo de recuperação de backup para proteger os dados do aplicativo.

Cada organização normalmente define um RPO (objetivo do ponto de recuperação) e um RTO (objetivo do tempo de recuperação) para aplicativos importantes com base na criticidade do aplicativo e nas expectativas dos usuários.

É comum que os sistemas corporativos tenham um RPO medido em minutos e um RTO medido em horas ou até dias, enquanto alguns aplicativos críticos podem ter tolerâncias muito mais baixas.

RPO é definido como o período máximo de perda de dados aceitável no caso de uma falha ou incidente.

Por exemplo, muitos sistemas fazem backup dos logs de transações a cada 15 minutos para minimizar a perda de dados no caso de uma exclusão acidental ou falha de hardware.

RTO é definido como a quantidade máxima de tempo de inatividade que é permitido recuperar do backup e retomar o processamento.

Para bancos de dados grandes em particular, pode levar horas para restaurar a partir de um backup completo. No caso de uma falha de hardware, você pode reduzir seu RTO para minutos fazendo failover para um nó secundário.

Você deve criar um plano de recuperação que, no mínimo, permita a recuperação de um backup recente.

 

Backups automatizados

Um backup automatizado é um recurso do Amazon RDS que rastreia continuamente as alterações e faz backup do seu banco de dados.

O Amazon RDS cria um snapshot de volume de armazenamento da sua Instância de banco de dados, fazendo backup de toda a instância do banco de dados e não apenas de bancos de dados individuais.

Você pode definir o período de retenção de backup ao criar uma instância de banco de dados.

Um dia de backups será retido por padrão, mas você pode modificar o período de retenção até um máximo de 35 dias.

Lembre-se de que, quando você exclui uma instância de banco de dados, todos os snapshots de backup automatizados são excluídos e não podem ser recuperados.

Snapshots manuais, no entanto, não são excluídos.

Os backups automatizados ocorrerão diariamente durante uma janela de manutenção configurável de 30 minutos chamada janela de backup.

Os backups automatizados são mantidos por um número configurável de dias, chamado período de retenção de backup.

Você pode restaurar sua instância de banco de dados para um horário específico durante esse período de retenção, criando uma nova instância de banco de dados.

 

Snapshots de Banco de Dados Manuais

Além dos backups automatizados, você pode executar snapshots de banco de dados manuais a qualquer momento. Um snapshot de banco de dados é iniciado por você e pode ser criado com a frequência que você deseja.

Você pode restaurar a Instância do banco de dados para o estado específico no snapshot do banco de dados a qualquer momento.

Os snapshots do banco de dados podem ser criados com o console do Amazon RDS ou a ação CreateDBSnapshot.

Diferentemente das capturas de snapshots automatizadas que são excluídas após o período de retenção, as capturas de snapshots de banco de dados manuais são mantidas até que você as exclua explicitamente no console do Amazon RDS ou na ação DeleteDBSnapshot.

Para bancos de dados ocupados, use o Multi-AZ para minimizar o impacto no desempenho de um snapshot.

Durante a janela de backup, a E / S de armazenamento pode ser suspensa durante o backup dos dados e você pode enfrentar uma latência elevada.

Essa suspensão de E / S normalmente dura a duração da captura de snapshot.

Esse período de suspensão de E / S é mais curto para implantações do Multi-AZ DB porque o backup é retirado do modo de espera, mas pode ocorrer latência durante o processo de backup.

 

Recuperação

O Amazon RDS permite recuperar seu banco de dados rapidamente, esteja você executando backups automatizados ou snapshots manuais do banco de dados.

Você não pode restaurar de um snapshot de banco de dados para uma Instância de banco de dados existente. Uma nova instância de banco de dados é criada quando você restaura.

Quando você restaura uma instância de banco de dados, apenas o parâmetro do banco de dados padrão e os grupos de segurança são associados à instância restaurada.

Assim que a restauração for concluída, você deverá associar qualquer parâmetro de banco de dados personalizado ou grupos de segurança usados ​​pela instância a partir da qual você restaurou.

Ao usar backups automatizados, o Amazon RDS combina os backups diários realizados durante a janela de manutenção predefinida em conjunto com os logs de transações para permitir a restauração de instâncias de banco de dados para qualquer ponto durante o seu período de retenção, geralmente até os últimos cinco minutos.

 

Alta disponibilidade com Multi-AZ

Um dos recursos mais poderosos do Amazon RDS são as implantações Multi-AZ, que permitem criar um cluster de banco de dados em várias zonas de disponibilidade.

A configuração de um banco de dados relacional para execução de maneira altamente disponível e tolerante a falhas é uma tarefa desafiadora.

Com o Amazon RDS Multi-AZ, você pode reduzir a complexidade envolvida nessa tarefa administrativa comum. Com uma única opção, o Amazon RDS pode aumentar a disponibilidade do seu banco de dados usando a replicação.

O Multi-AZ permite que você atenda às metas mais exigentes de RPO e RTO usando replicação síncrona para minimizar o RPO e failover rápido para minimizar o RTO para minutos.

O Multi-AZ permite colocar uma cópia secundária do seu banco de dados em outra zona de disponibilidade para fins de recuperação de desastres. As implantações Multi-AZ estão disponíveis para todos os tipos de mecanismos de banco de dados Amazon RDS.

Quando você cria uma Instância de banco de dados Multi-AZ, uma instância primária é criada em uma zona de disponibilidade e uma instância secundária é criada em outra zona de disponibilidade.

Você recebe um terminal da instância do banco de dados, como o seguinte:

my_app_db.ch6fe7ykq1zd.us-west-2.rds.amazonaws.com

Esse endpoint é um nome de sistema de nome de domínio (DNS) que a AWS assume a responsabilidade de resolver para um endereço IP específico.

Você usa esse nome DNS ao criar a conexão com seu banco de dados.

O Amazon RDS replica automaticamente os dados do banco de dados mestre ou instância primária para o banco de dados escravo ou instância secundária usando replicação síncrona.

Cada zona de disponibilidade é executada em sua própria infraestrutura fisicamente distinta e independente e é projetada para ser altamente confiável.

O Amazon RDS detecta e se recupera automaticamente dos cenários de falha mais comuns para implantações Multi-AZ, para que você possa retomar as operações do banco de dados o mais rápido possível, sem intervenção administrativa.

O Amazon RDS executa automaticamente um failover no caso de qualquer um dos seguintes:

  • Perda de disponibilidade na zona de disponibilidade primária
  • Perda de conectividade de rede ao banco de dados primário
  • Falha na unidade de computação no banco de dados primário
  • Falha de armazenamento no banco de dados primário

O Amazon RDS efetuará failover automaticamente para a instância em espera sem intervenção do usuário. O nome DNS permanece o mesmo, mas o serviço Amazon RDS altera o CNAME para apontar para o modo de espera.

A Instância de banco de dados principal alterna automaticamente para a réplica em espera se houver uma interrupção do serviço da Zona de Disponibilidade, se a Instância de banco de dados principal falhar ou se o tipo de instância for alterado.

Você também pode executar um failover manual da instância do banco de dados.

O failover entre a instância primária e a secundária é rápido, e o tempo necessário para concluir o failover automático é geralmente de um a dois minutos.

É importante lembrar que as implantações Multi-AZ são apenas para recuperação de desastres, eles não foram feitos para melhorar o desempenho do banco de dados.

A Instância de banco de dados em espera não está disponível para consultas offline da Instância de banco de dados principal.

Para melhorar o desempenho do banco de dados usando várias instâncias de banco de dados, use réplicas de leitura ou outras tecnologias de cache de banco de dados, como o Amazon ElastiCache.

 

Dimensionamento para Cima e para Fora

À medida que o número de transações aumenta para um banco de dados relacional, a expansão ou verticalização de uma máquina maior permite processar mais leituras e gravações.

A expansão horizontal ou vertical também é possível, mas geralmente é mais difícil.

O Amazon RDS permite dimensionar a computação e o armazenamento verticalmente e, para alguns mecanismos de banco de dados, você pode dimensionar horizontalmente.

 

Escalabilidade Vertical

A adição de recursos adicionais de computação, memória ou armazenamento ao seu banco de dados permite processar mais transações, executar mais consultas e armazenar mais dados.

O Amazon RDS facilita o aumento ou a redução da camada do banco de dados para atender às demandas do seu aplicativo.

As alterações podem ser agendadas para ocorrer durante a próxima janela de manutenção ou começar imediatamente usando a ação ModifyDBInstance.

Para alterar a quantidade de computação e memória, você pode selecionar uma classe de Instância de banco de dados diferente do banco de dados.

Depois de selecionar uma classe de instância de banco de dados maior ou menor, o Amazon RDS automatiza o processo de migração para uma nova classe com apenas uma pequena interrupção e um esforço mínimo.

Você também pode aumentar a quantidade de armazenamento, a classe de armazenamento e o desempenho de armazenamento para uma instância do Amazon RDS.

Cada instância do banco de dados pode escalar de 5 GB a 6 TB no armazenamento provisionado, dependendo do tipo e do mecanismo de armazenamento.

O armazenamento para Amazon RDS pode ser aumentado com o tempo, à medida que as necessidades aumentam com um impacto mínimo no banco de dados em execução.

A expansão de armazenamento é suportada para todos os mecanismos de banco de dados, exceto para o SQL Server.

 

Escalabilidade horizontal com particionamento

Um banco de dados relacional pode ser dimensionado verticalmente apenas muito antes de você atingir o tamanho máximo da instância.

Particionar um grande banco de dados relacional em várias instâncias ou shards é uma técnica comum para lidar com mais solicitações além dos recursos de uma única instância.

O particionamento, ou sharding, permite escalar horizontalmente para lidar com mais usuários e solicitações, mas requer lógica adicional na camada do aplicativo.

O aplicativo precisa decidir como rotear as solicitações do banco de dados para o shard correto e fica limitado nos tipos de consultas que pode ser executado através dos limites do servidor.

Os bancos de dados NoSQL, como o Amazon DynamoDB ou o Cassandra, foram projetados para serem dimensionados horizontalmente.

 

Escalabilidade Horizontal com Réplicas de Leitura

Outra técnica de dimensionamento importante é usar réplicas de leitura para descarregar transações de leitura do banco de dados primário e aumentar o número geral de transações.

O Amazon RDS suporta réplicas de leitura que permitem expandir de maneira elástica além das restrições de capacidade de uma única instância de banco de dados para cargas de trabalho de banco de dados com muita leitura.

Há vários casos de uso em que a implantação de uma ou mais instâncias de banco de dados de réplica de leitura é útil. Alguns cenários comuns incluem:

  • Escale além da capacidade de uma única instância de banco de dados para cargas de trabalho com muita leitura.
  • Manipule o tráfego de leitura enquanto a Instância do banco de dados de origem não estiver disponível. Por exemplo, devido à suspensão de E / S para backups ou manutenção agendada, você pode direcionar o tráfego de leitura para uma réplica.
  • Descarregue cenários de relatório ou data warehousing em uma réplica em vez da Instância de banco de dados principal. Por exemplo, um site de blog pode ter muito pouca atividade de gravação, exceto os comentários ocasionais, e a grande maioria das atividades do banco de dados será somente leitura. Ao descarregar parte ou toda a atividade de leitura para uma ou mais réplicas de leitura, a instância principal do banco de dados pode se concentrar em manipular as gravações e replicar os dados nas réplicas.

Atualmente, as réplicas de leitura são suportadas no Amazon RDS para MySQL, PostgreSQL, MariaDB e Amazon Aurora.

O Amazon RDS usa a funcionalidade de replicação interna dos mecanismos MySQL, MariaDB e PostgreSQL DB para criar um tipo especial de Instância de banco de dados, chamada réplica de leitura, de uma Instância de banco de dados de origem.

As atualizações feitas na Instância do banco de dados de origem são copiadas de forma assíncrona na réplica de leitura. Você pode reduzir a carga na sua Instância de banco de dados de origem, roteando consultas de leitura de seus aplicativos para a réplica de leitura.

Você pode criar uma ou mais réplicas de um banco de dados em uma única região da AWS ou em várias regiões da AWS.

Para aprimorar seus recursos de recuperação de desastres ou reduzir latências globais, você pode usar réplicas de leitura entre regiões para servir o tráfego de leitura de uma região mais próxima dos usuários globais ou migrar seus bancos de dados pelas regiões da AWS

 

Segurança

Proteger suas instâncias de banco de dados Amazon RDS DB e bancos de dados relacionais requer um plano abrangente que aborde as muitas camadas comumente encontradas em sistemas orientados a bancos de dados. Isso inclui os recursos de infraestrutura, o banco de dados e a rede.

Proteja o acesso aos seus recursos de infraestrutura usando as políticas do AWS Identity and Access Management (IAM) que limitam quais ações os administradores da AWS podem executar.

Por exemplo, algumas ações principais do administrador que podem ser controladas no IAM incluem CreateDBInstance e DeleteDBInstance.

Outra prática recomendada de segurança é implantar suas instâncias do Amazon RDS DB em uma sub-rede privada dentro de uma Amazon Virtual Private Cloud (Amazon VPC) que limita o acesso da rede à instância do DB.

Antes de poder implantar em um Amazon VPC, você deve primeiro criar um grupo de sub-redes de bancos de dados que predefine quais sub-redes estão disponíveis para implantações do Amazon RDS.

Além disso, restrinja o acesso à rede usando listas de controle de acesso (ACLs) e grupos de segurança para limitar o tráfego de entrada a uma pequena lista de endereços IP de origem.

No nível do banco de dados, você também precisará criar usuários e conceder a eles permissões para ler e gravar em seus bancos de dados.

O acesso ao banco de dados é controlado usando os mecanismos específicos de controle de acesso e gerenciamento de usuários do mecanismo de banco de dados.

Crie usuários no nível do banco de dados com senhas fortes que você alterna frequentemente.

Por fim, proteja a confidencialidade de seus dados em trânsito e em repouso com vários recursos de criptografia fornecidos com o Amazon RDS.

Os recursos de segurança variam um pouco de um mecanismo para outro, mas todos os mecanismos oferecem suporte a alguma forma de criptografia em trânsito e também em criptografia em repouso.

Você pode conectar com segurança um cliente a uma Instância de banco de dados em execução usando o Secure Sockets Layer (SSL) para proteger os dados em trânsito. A criptografia em repouso é possível para todos os mecanismos que usam o Amazon Key Management Service (KMS) ou o Transparent Data Encryption (TDE).

Todos os logs, backups e capturas instantâneas são criptografados para uma instância criptografada do Amazon RDS

 

Amazon Redshift

 

O Amazon Redshift é um serviço de data warehouse rápido, poderoso, totalmente gerenciado e em escala de petabytes na nuvem. O Amazon Redshift é um banco de dados relacional projetado para cenários OLAP e otimizado para análises e relatórios de alto desempenho de conjuntos de dados muito grandes.

Os data warehouses tradicionais são difíceis e caros de gerenciar, especialmente para grandes conjuntos de dados. O Amazon Redshift não apenas reduz significativamente o custo de um data warehouse, mas também facilita a análise rápida de grandes quantidades de dados.

O Amazon Redshift oferece recursos de consulta rápida sobre dados estruturados usando comandos SQL padrão para oferecer suporte a consultas interativas em grandes conjuntos de dados.

Com conectividade via ODBC ou JDBC, o Amazon Redshift se integra bem a vários carregamentos, relatórios, mineração de dados e ferramentas de análise.

O Amazon Redshift é baseado no PostgreSQL padrão do setor, portanto, a maioria dos aplicativos clientes SQL existentes funcionará com apenas alterações mínimas.

O Amazon Redshift gerencia o trabalho necessário para configurar, operar e dimensionar um data warehouse, desde o provisionamento da capacidade da infraestrutura até a automação de tarefas administrativas em andamento, como backups e correções.

O Amazon Redshift monitora automaticamente seus nós e unidades para ajudá-lo a se recuperar de falhas.

 

Clusters e Nós

O principal componente de um data warehouse do Amazon Redshift é um cluster. Um cluster é composto por um nó líder e um ou mais nós de computação. O aplicativo cliente interage diretamente apenas com o nó líder e os nós de computação são transparentes para aplicativos externos.

Atualmente, o Amazon Redshift tem suporte para seis tipos diferentes de nós e cada um tem uma mistura diferente de CPU, memória e armazenamento.

Os seis tipos de nós estão agrupados em duas categorias: Computação Densa e Armazenamento Denso.

Os tipos de nós do Computação Densa suportam clusters de até 326 TB usando SSDs rápidos, enquanto os nós de armazenamento denso suportam clusters de até 2PB usando grandes discos magnéticos.

 

Cada cluster consiste em um nó líder e um ou mais nós de computação. Cada cluster contem um ou mais bancos de dados. Os dados do usuário para cada tabela são distribuídos pelos nós de computação.

Seu aplicativo ou cliente SQL se comunica com o Amazon Redshift usando conexões JDBC ou ODBC padrão com o nó líder, que por sua vez coordena a execução da consulta com os nós de computação.

Seu aplicativo não interage diretamente com os nós de computação.

O armazenamento em disco para um nó de computação é dividido em várias fatias. O número de fatias por nó depende do tamanho do nó do cluster e normalmente varia entre 2 e 16.

Todos os nós participam da execução da consulta paralela, trabalhando em dados que são distribuídos o mais uniformemente possível pelas fatias.

Você pode aumentar o desempenho da consulta adicionando vários nós a um cluster. Quando você envia uma consulta, o Amazon Redshift distribui e executa a consulta em paralelo em todos os nós de computação de um cluster. O Amazon Redshift também espalha seus dados de tabela em toda a computação em nós em um cluster com base em uma estratégia de distribuição que você especificar.

Esse particionamento de dados entre vários recursos de computação permite atingir altos níveis de desempenho.

O Amazon Redshift permite redimensionar um cluster para adicionar armazenamento e capacidade de computação ao longo do tempo à medida que suas necessidades evoluem.

Você também pode alterar o tipo de nó de um cluster e manter o tamanho geral igual.

Sempre que você executa uma operação de redimensionamento, o Amazon Redshift cria um novo cluster e migra os dados do cluster antigo para o novo.

Durante uma operação de redimensionamento, o banco de dados se tornará somente leitura até que a operação seja concluída.

 

Design

Cada cluster do Amazon Redshift pode suportar um ou mais bancos de dados e cada banco de dados pode conter muitas tabelas.

Como a maioria dos bancos de dados baseados em SQL, você pode criar uma tabela usando o comando CREATE TABLE. Este comando especifica o nome da tabela, as colunas e seus tipos de dados.

Além de colunas e tipos de dados, o comando Amazon Redshift CREATE TABLE também suporta a especificação de codificações de compactação, estratégia de distribuição e chaves de classificação.

 

Tipos de dados

As colunas do Amazon Redshift oferecem suporte a uma ampla variedade de tipos de dados. Isso inclui tipos de dados numéricos comuns como INTEGER, DECIMAL e DOUBLE, tipos de dados de texto como CHAR e VARCHAR e tipos de dados de data como DATE e TIMESTAMP.

Colunas adicionais podem ser adicionadas a uma tabela usando o comando ALTER TABLE. No entanto, as colunas existentes não podem ser modificadas.

 

Codificação de Compressão

Uma das principais otimizações de desempenho usadas pelo Amazon Redshift é a compactação de dados. Ao carregar dados pela primeira vez em uma tabela vazia, o Amazon Redshift irá amostrar automaticamente seus dados e selecionar o melhor esquema de compactação para cada coluna.

Como alternativa, você pode especificar a codificação de compactação por coluna como parte do comando CREATE TABLE.

 

Estratégia de distribuição

Uma das principais decisões ao criar uma tabela no Amazon Redshift é como distribuir os registros pelos nós e fatias em um cluster.

Você pode configurar o estilo de distribuição de uma tabela para fornecer dicas do Amazon Redshift sobre como os dados devem ser particionados para melhor atender seus padrões de consulta.

Quando você executa uma consulta, o otimizador muda as linhas para os nós conforme necessário para executar quaisquer junções e agregados.

O objetivo na seleção de um estilo de distribuição de tabela é minimizar o impacto da etapa de redistribuição, colocando os dados onde eles precisam estar antes da execução da consulta.

O estilo de distribuição de dados que você seleciona para o banco de dados tem um grande impacto no desempenho da consulta, nos requisitos de armazenamento, no carregamento e na manutenção de dados.

Ao escolher a melhor estratégia de distribuição para cada tabela, você pode equilibrar sua distribuição de dados e melhorar significativamente o desempenho geral do sistema.

Ao criar uma tabela, você pode escolher entre um dos três estilos de distribuição: MESMO, CHAVE ou TODOS.

 

Distribuição uniforme

Essa é a opção padrão e resulta na distribuição uniforme dos dados nas fatias, independentemente dos dados.

 

Distribuição de chaves

Com a distribuição KEY, as linhas são distribuídas de acordo com os valores em uma coluna. O nó líder armazenará valores correspondentes próximos e aumentará o desempenho da consulta para junções.

 

ALL distribuição

Com ALL, uma cópia completa da tabela inteira é distribuída para cada nó. Isso é útil para tabelas de pesquisa e outras tabelas grandes que não são atualizadas frequentemente.

 

Chaves de classificação

Outra decisão importante a ser tomada durante a criação de uma tabela é especificar uma ou mais colunas como chaves de classificação.

A classificação permite o manuseio eficiente de predicados com restrição de intervalo. Se uma consulta usar um predicado com intervalo restrito, o processador de consultas poderá ignorar rapidamente muitos blocos durante as varreduras de tabela.

 

As chaves de classificação para uma tabela podem ser compostas ou intercaladas. Uma chave de classificação composta é mais eficiente quando os predicados da consulta usam um prefixo, que é um subconjunto das colunas da chave de classificação em ordem.

Uma chave de classificação intercalada fornece peso igual a cada coluna na chave de classificação, para que os predicados de consulta possam usar qualquer subconjunto das colunas que compõem a chave de classificação, em qualquer ordem.

 

Carregando dados

O Amazon Redshift suporta comandos SQL padrão, como INSERT e UPDATE, para criar e modificar registros em uma tabela.

Para operações em massa, no entanto, o Amazon Redshift fornece o comando COPY como uma alternativa muito mais eficiente do que chamar repetidamente INSERT.

Um comando COPY pode carregar dados em uma tabela da maneira mais eficiente e suporta vários tipos de fontes de dados de entrada.

A maneira mais rápida de carregar dados no Amazon Redshift é fazer carregamentos de dados em massa de arquivos simples armazenados em um Amazon S3 ou de uma tabela do Amazon DynamoDB.

Ao carregar dados do Amazon S3, o comando COPY pode ler de vários arquivos ao mesmo tempo.

O Amazon Redshift pode distribuir a carga de trabalho para os nós e executar o processo de carregamento em paralelo. Em vez de ter um único arquivo grande com seus dados, você pode ativar o processamento paralelo com um cluster com vários nós e vários arquivos de entrada.

Após cada carregamento de dados em massa que modifica uma quantidade significativa de dados, você precisará executar um comando VACUUM para reorganizar seus dados e recuperar espaço após exclusões.

Também é recomendável executar um comando ANALYZE para atualizar as estatísticas da tabela.

Os dados também podem ser exportados para fora do Amazon Redshift usando o comando UNLOAD. Este comando pode ser usado para gerar arquivos de texto delimitados e armazená-los no Amazon S3.

 

Consultando Dados

O Amazon Redshift permite escrever comandos SQL padrão para consultar suas tabelas. Ao oferecer suporte a comandos como o SELECT para consultar e ingressar em tabelas, os analistas podem se tornar produtivos rapidamente usando o Amazon Redshift ou integrá-lo facilmente.

Para consultas complexas, você pode analisar o plano de consulta para otimizar melhor seu padrão de acesso. Você pode monitorar o desempenho do cluster e consultas específicas usando o Amazon CloudWatch e o console da web do Amazon Redshift.

Para grandes clusters do Amazon Redshift que oferecem suporte a muitos usuários, você pode configurar o Workload Management (WLM) para enfileirar e priorizar consultas. O WLM permite definir várias filas e definir o nível de simultaneidade para cada fila.

Por exemplo, convém configurar uma fila para consultas de longa execução e limitar a simultaneidade e outra fila para consultas de execução curta e permitem níveis mais altos de simultaneidade.

 

Snapshots

Semelhante ao Amazon RDS, você pode criar snapshots point-in-time do seu cluster Amazon Redshift. Um snapshot pode ser usado para restaurar uma cópia ou criar um clone do seu cluster Amazon Redshift original.

Os snapshots são armazenados de forma durável internamente no Amazon S3 pelo Amazon Redshift.

O Amazon Redshift suporta snapshots automatizados e manuais. Com os snapshots automatizados, o Amazon Redshift tira periodicamente snapshots do seu cluster e mantém uma cópia por um período de retenção configurável.

Você também pode executar snapshots manuais e compartilhá-los entre regiões ou mesmo com outras contas da AWS. As capturas instantâneas manuais são mantidas até que você as exclua explicitamente.

 

Segurança

Proteger o cluster do Amazon Redshift é semelhante a proteger outros bancos de dados em execução na nuvem. Seu plano de segurança deve incluir controles para proteger os recursos da infraestrutura, o esquema do banco de dados, os registros na tabela e o acesso à rede.

Ao abordar a segurança em todos os níveis, você pode operar com segurança um data warehouse do Amazon Redshift na nuvem.

A primeira camada de segurança vem no nível da infraestrutura usando políticas do IAM que limitam as ações que os administradores da AWS podem executar. Com o IAM, você pode criar políticas que concedam a outros usuários da AWS a permissão para criar e gerenciar o ciclo de vida de um cluster, incluindo operações de dimensionamento, backup e recuperação.

No nível da rede, os clusters do Amazon Redshift podem ser implantados no espaço de endereço IP privado do Amazon VPC para restringir a conectividade geral da rede.

O acesso à rede refinada pode ser ainda mais restrito usando grupos de segurança e ACLs de rede no nível da sub-rede.

Além de controlar o acesso à infraestrutura no nível da infraestrutura, você deve proteger o acesso no nível do banco de dados. Ao criar inicialmente um cluster do Amazon Redshift, você criará uma conta de usuário mestre e uma senha.

A conta principal pode ser usada para fazer login no banco de dados Amazon Redshift e criar mais usuários e grupos. Cada usuário do banco de dados pode receber permissão para esquemas, tabelas e outros objetos de banco de dados.

Essas permissões são independentes das políticas do IAM usadas para controlar o acesso aos recursos de infraestrutura e à configuração de cluster do Amazon Redshift.

Proteger os dados armazenados no Amazon Redshift é outro aspecto importante do seu design de segurança. O Amazon Redshift oferece suporte à criptografia de dados em trânsito usando conexões criptografadas por SSL e também à criptografia de dados em repouso usando várias técnicas.

Para criptografar dados em repouso, o Amazon Redshift se integra ao KMS e ao AWS CloudHSM para serviços de gerenciamento de chaves de criptografia.

A criptografia em repouso e em trânsito ajuda a atender aos requisitos de conformidade, como a Lei de Portabilidade e Responsabilidade do Seguro de Saúde (HIPAA) ou o Padrão de Segurança de Dados da Indústria de Cartões de Pagamento (PCI DSS) e fornece proteções adicionais para seus dados.

 

Amazon DynamoDB

 

O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece desempenho rápido e de baixa latência, dimensionado com facilidade.

O Amazon DynamoDB permite descarregar os encargos administrativos da operação de um banco de dados NoSQL distribuído e focar no aplicativo. O Amazon DynamoDB simplifica significativamente o provisionamento, instalação e configuração de hardware, replicação, aplicação de patches de software e dimensionamento de cluster dos bancos de dados NoSQL.

O Amazon DynamoDB foi projetado para simplificar o gerenciamento de bancos de dados e cluster, fornecer níveis consistentemente altos de desempenho, simplificar tarefas de escalabilidade e melhorar a confiabilidade com replicação automática.

 

Os desenvolvedores podem criar uma tabela no Amazon DynamoDB e escrever um número ilimitado de itens com latência consistente.

O Amazon DynamoDB pode fornecer níveis de desempenho consistentes distribuindo automaticamente os dados e o tráfego para uma tabela em várias partições.

Depois de configurar uma certa capacidade de leitura ou gravação, o Amazon DynamoDB adicionará automaticamente capacidade de infraestrutura suficiente para apoiar os níveis de taxa de transferência solicitados.

À medida que sua demanda muda com o tempo, você pode ajustar a capacidade de leitura ou gravação após a criação de uma tabela, e o Amazon DynamoDB adicionará ou removerá a infraestrutura e ajustará o particionamento interno de acordo.

Para ajudar a manter níveis de desempenho rápidos e consistentes, todos os dados da tabela são armazenados em unidades de disco SSD de alto desempenho.

 

Métricas de desempenho, incluindo taxas de transações, podem ser monitoradas usando o Amazon CloudWatch. Além de fornecer níveis de alto desempenho, o Amazon DynamoDB também fornece proteções automáticas de alta disponibilidade e durabilidade, replicando dados em várias zonas de disponibilidade em uma região da AWS.

 

Modelo de Dados

Os componentes básicos do modelo de dados do Amazon DynamoDB incluem tabelas, itens e atributos.

Em um banco de dados relacional, uma tabela possui um esquema predefinido, como o nome da tabela, a chave primária, a lista dos nomes de suas colunas e seus tipos de dados.

 

Todos os registros armazenados na tabela devem ter o mesmo conjunto de colunas. Por outro lado, o Amazon DynamoDB exige apenas que uma tabela tenha uma chave primária, mas não requer que você defina todos os nomes de atributos e tipos de dados com antecedência.

Itens individuais em uma tabela do Amazon DynamoDB podem ter qualquer número de atributos, embora exista um limite de 400 KB no tamanho do item.

Cada atributo em um item é um par de nome / valor. Um atributo pode ser um conjunto de valor único ou de valores múltiplos.

Por exemplo, um item de livro pode ter atributos de título e autores. Cada livro tem um título, mas pode ter muitos autores.

Os aplicativos podem se conectar ao terminal do serviço Amazon DynamoDB e enviar solicitações por HTTP / S para ler e gravar itens em uma tabela ou até mesmo para criar e excluir tabelas.

O DynamoDB fornece uma API de serviço da web que aceita solicitações no formato JSON.

Embora você possa programar diretamente nos endpoint da API de serviço web, a maioria dos desenvolvedores optam por usar o AWS Software Development Kit (SDK) para interagir com seus itens e tabelas.

O AWS SDK está disponível em muitos idiomas diferentes e fornece uma interface de programação simplificada e de alto nível.

 

Tipos de Dados

O Amazon DynamoDB oferece muita flexibilidade com seu esquema de banco de dados. Ao contrário de um banco de dados relacional tradicional que requer que você defina seus tipos de coluna com antecedência, o DynamoDB requer apenas um atributo de chave primária.

Cada item adicionado à tabela pode adicionar atributos adicionais. Isso oferece flexibilidade ao longo do tempo para expandir seu esquema, sem precisar reconstruir a tabela inteira e lidar com as diferenças de versão de registro com a lógica do aplicativo.

Ao criar uma tabela ou um índice secundário, você deve especificar os nomes e os tipos de dados de cada atributo de chave primária (chave de partição e chave de classificação).

O Amazon DynamoDB suporta uma ampla variedade de tipos de dados para atributos. Os tipos de dados se enquadram em três categorias principais: Escalar, Conjunto ou Documento.

 

Tipos de dados escalares

Um tipo escalar representa exatamente um valor. O Amazon DynamoDB suporta os seguintes cinco tipos escalares:

 

String

Texto e caracteres de comprimento variável de até 400 KB. Suporta Unicode com codificação UTF8

 

Número

Número positivo ou negativo com até 38 dígitos de precisão

 

Binário

Dados binários, imagens, objetos compactados com tamanho de até 400 KB

 

Boleano

Sinalizador binário que representa um valor verdadeiro ou falso

 

Nulo

Representa um estado em branco, vazio ou desconhecido. String, Number, Binary, Boolean não podem estar vazios.

 

Definir tipos de dados

Os conjuntos são úteis para representar uma lista exclusiva de um ou mais valores escalares. Cada valor em um conjunto precisa ser exclusivo e deve ter o mesmo tipo de dados. Os conjuntos não garantem a ordem. O Amazon DynamoDB suporta três tipos de conjuntos: Conjunto de cadeias, Conjunto de números e Conjunto binário.

 

String

Definir lista exclusiva de atributos String

 

Número

Definir lista exclusiva de atributos numéricos

 

Binário

Definir lista exclusiva de atributos binários

 

Chave primária

Ao criar uma tabela, você deve especificar a chave primária da tabela, além do nome da tabela. Como um banco de dados relacional, a chave primária identifica exclusivamente cada item da tabela.

Uma chave primária apontará para exatamente um item. O Amazon DynamoDB oferece suporte a dois tipos de chaves primárias e essa configuração não pode ser alterada após a criação de uma tabela:

 

Chave de Partição

A chave primária é composta de um atributo, uma chave de partição (ou hash). O Amazon DynamoDB cria um índice de hash não ordenado nesse atributo de chave primária.

 

Chave de Partição e Classificação

A chave primária é composta por dois atributos. O primeiro atributo é a chave de partição e o segundo é a chave de classificação (ou intervalo).

Cada item da tabela é identificado exclusivamente pela combinação de sua partição e valores da chave de classificação. É possível que dois itens tenham o mesmo valor da chave de partição, mas esses dois itens devem ter valores diferentes da chave de classificação.

Além disso, cada atributo de chave primária deve ser definido como tipo string, número ou binário.

O Amazon DynamoDB usa a chave de partição para distribuir a solicitação para a partição correta.

Se você estiver executando muitas leituras ou gravações por segundo na mesma chave primária, não poderá usar totalmente a capacidade de computação do cluster do Amazon DynamoDB.

Uma prática recomendada é maximizar sua taxa de transferência distribuindo solicitações em toda a gama de chaves de partição.

 

Capacidade provisionada

Ao criar uma tabela do Amazon DynamoDB, você deve fornecer uma certa quantidade de capacidade de leitura e gravação para lidar com as cargas de trabalho esperadas.

Com base nas definições de configuração, o DynamoDB fornecerá a quantidade certa de capacidade de infraestrutura para atender aos seus requisitos com tempos de resposta sustentados e de baixa latência. A capacidade geral é medida em unidades de capacidade de leitura e gravação.

Posteriormente, esses valores podem ser ampliados ou reduzidos usando uma ação UpdateTable.

Cada operação em uma tabela do Amazon DynamoDB consumirá algumas das unidades de capacidade provisionadas.

A quantidade específica de unidades de capacidade consumidas depende em grande parte do tamanho do item, mas também de outros fatores.

Para operações de leitura, a quantidade de capacidade consumida também depende da consistência de leitura selecionada na solicitação.

Por exemplo, dada uma tabela sem um índice secundário local, você consumirá 1 unidade de capacidade se ler um item com 4KB ou menor.

Da mesma forma, para operações de gravação, você consumirá 1 unidade de capacidade se gravar um item com 1 KB ou menos. Isso significa que, se você ler um item com 110 KB, consumirá 28 unidades de capacidade ou 110/4 = 27,5 arredondado para 28.

Para operações de leitura altamente consistentes, elas usarão o dobro do número de unidades de capacidade, ou 56 neste exemplo.

Você pode usar o Amazon CloudWatch para monitorar sua capacidade do Amazon DynamoDB e tomar decisões de dimensionamento. Há um rico conjunto de métricas, incluindo ConsumedReadCapacityUnits e ConsumedWriteCapacityUnits.

Se você exceder sua capacidade provisionada por um período de tempo, as solicitações serão limitadas e poderão ser tentadas novamente mais tarde. Você pode monitorar e alertar na métrica ThrottledRequests usando o Amazon CloudWatch para notificá-lo sobre alterações nos padrões de uso.

 

Índices Secundários

Ao criar uma tabela com uma chave de partição e de classificação (anteriormente conhecida como chave de hash e intervalo), é possível definir opcionalmente um ou mais índices secundários nessa tabela.

Um índice secundário permite consultar os dados na tabela usando uma chave alternativa, além de consultas na chave primária. O Amazon DynamoDB suporta dois tipos diferentes de índices:

 

Índice Secundário Global

O índice secundário global é um índice com uma chave de partição e classificação que pode ser diferente da tabela.

Você pode criar ou excluir um índice secundário global em uma tabela a qualquer momento.

 

Índice Secundário Local

O índice secundário local é um índice que possui o mesmo atributo de chave de partição que a chave primária da tabela, mas uma chave de classificação diferente.

Você só pode criar um índice secundário local quando criar uma tabela.

Os índices secundários permitem procurar uma tabela grande com eficiência e evitar uma operação cara de digitalização para encontrar itens com atributos específicos.

Esses índices permitem suportar diferentes padrões de acesso à consulta e casos de uso além do possível com apenas uma chave primária. Enquanto uma tabela pode ter apenas um índice secundário local, você pode ter vários índices secundários globais.

O Amazon DynamoDB atualiza cada índice secundário quando um item é modificado.

 

Essas atualizações consomem unidades de capacidade de gravação. Para um índice secundário local, as atualizações de itens consumirão unidades de capacidade de gravação da tabela principal, enquanto os índices secundários globais mantêm suas próprias configurações de taxa de transferência provisionadas separadas da tabela.

 

Escrevendo e lendo dados

Depois de criar uma tabela com uma chave primária e índices, você pode começar a escrever e ler itens na tabela.

O Amazon DynamoDB fornece várias operações que permitem criar, atualizar e excluir itens individuais. O Amazon DynamoDB também fornece várias opções de consulta que permitem pesquisar uma tabela ou um índice ou recuperar um item específico ou um lote de itens.

 

Escrevendo itens

O Amazon DynamoDB fornece três ações principais da API para criar, atualizar e excluir itens: PutItem, UpdateItem e DeleteItem.

Usando a ação PutItem, você pode criar um novo item com um ou mais atributos. As chamadas para PutItem atualizarão um item existente se a chave primária já existir.

PutItem requer apenas um nome de tabela e uma chave primária; qualquer atributos adicionais são opcionais. A ação UpdateItem encontrará itens existentes com base na chave primária e substituirá os atributos.

Esta operação pode ser útil para atualizar apenas um único atributo e deixar os outros atributos inalterados. O UpdateItem também pode ser usado para criar itens se eles ainda não existirem.

Por fim, você pode remover um item de uma tabela usando DeleteItem e especificando uma chave primária específica.

A ação UpdateItem também fornece suporte para contadores atômicos. Os contadores atômicos permitem aumentar e diminuir um valor e garantem a consistência entre várias solicitações simultâneas.

Por exemplo, um atributo de contador usado para rastrear a pontuação geral de um jogo para celular pode ser atualizado por muitos clientes ao mesmo tempo.

Essas três ações também suportam expressões condicionais que permitem executar a validação antes que uma ação seja aplicada.

Por exemplo, você pode aplicar uma expressão condicional em PutItem que verifica se certas condições são atendidas antes da criação do item.

Isso pode ser útil para evitar substituições acidentais ou para impor algum tipo de verificação da lógica de negócios.

 

Lendo itens

Após a criação de um item, ele pode ser recuperado através de uma pesquisa direta chamando a ação GetItem ou através de uma pesquisa usando a ação Consulta ou Verificação.

GetItem permite recuperar um item com base em sua chave primária. Todos os atributos do item são retornados por padrão, e você tem a opção de selecionar atributos individuais para filtrar os resultados.

Se uma chave primária for composta por uma chave de partição, toda a chave de partição precisará ser especificada para recuperar o item. Se a chave primária for composta de uma chave de partição e uma chave de classificação, GetItem também exigirá a chave da partição e da chave de classificação.

Cada chamada para GetItem consome unidades de capacidade de leitura com base no tamanho do item e na opção de consistência selecionada.

Por padrão, uma operação GetItem executa uma leitura eventualmente consistente. Opcionalmente, você pode solicitar uma leitura fortemente consistente; isso consumirá unidades de capacidade de leitura adicionais, mas retornará a versão mais atualizada do item.

Consistência Eventual

Ao ler itens do Amazon DynamoDB, a operação pode eventualmente ser consistente ou fortemente consistente.

O Amazon DynamoDB é um sistema distribuído que armazena várias cópias de um item em uma região da AWS para fornecer alta disponibilidade e maior durabilidade.

Quando um item é atualizado no Amazon DynamoDB, ele começa a replicar em vários servidores. Como o Amazon DynamoDB é um sistema distribuído, a replicação pode levar algum tempo para ser concluída.

Por esse motivo, nos referimos aos dados como eventualmente consistentes, o que significa que uma solicitação de leitura imediatamente após uma operação de gravação pode não mostrar a alteração mais recente.

Em alguns casos, o aplicativo precisa garantir que os dados sejam os mais recentes e o Amazon DynamoDB oferece uma opção para leituras fortemente consistentes.

 

Leituras eventualmente consistentes

Quando você lê dados, a resposta pode não refletir os resultados de uma operação de gravação concluída recentemente. A resposta pode incluir alguns dados antigos.

A consistência em todas as cópias dos dados geralmente é alcançada em um segundo; se você repetir sua solicitação de leitura após um curto período de tempo, a resposta retornará os dados mais recentes.

 

Leituras fortemente consistentes

Ao emitir uma solicitação de leitura fortemente consistente, o Amazon DynamoDB retorna uma resposta com os dados mais atualizados que refletem atualizações de todas as operações de gravação relacionadas anteriores às quais o Amazon DynamoDB retornou uma resposta bem-sucedida.

Uma leitura fortemente consistente pode estar menos disponível em caso de atraso ou interrupção da rede. Você pode solicitar um resultado de leitura fortemente consistente especificando parâmetros opcionais em sua solicitação.

 

Operações em lote

O Amazon DynamoDB também fornece várias operações projetadas para trabalhar com grandes lotes de itens, incluindo BatchGetItem e BatchWriteItem. Usando a ação BatchWriteItem, você pode executar até 25 itens criados ou atualizados com uma única operação.

Isso permite minimizar a sobrecarga de cada chamada individual ao processar um grande número de itens.

 

Pesquisando itens

O Amazon DynamoDB também oferece duas operações, Consulta e Verificação, que podem ser usadas para pesquisar uma tabela ou um índice.

Uma operação de consulta é a operação de pesquisa principal que você pode usar para localizar itens em uma tabela ou em um índice secundário usando apenas valores de atributo da chave primária. Cada consulta requer um nome de atributo de chave de partição e um valor distinto para pesquisar.

Opcionalmente, você pode fornecer um valor de chave de classificação e usar um operador de comparação para refinar os resultados da pesquisa. Os resultados são classificados automaticamente pela chave primária e são limitados a 1 MB.

Ao contrário de uma consulta, uma operação de digitalização lê todos os itens de uma tabela ou de um índice secundário.

Por padrão, uma operação de Varredura retorna todos os atributos de dados para cada item da tabela ou índice.

Cada solicitação pode retornar até 1 MB de dados. Os itens podem ser filtrados usando expressões, mas isso pode ser uma operação que consome muitos recursos. Se o conjunto de resultados de uma Consulta ou Varredura exceder 1 MB, você poderá paginar os resultados em incrementos de 1 MB.

Para a maioria das operações, executar uma operação de consulta em vez de uma operação de digitalização será a opção mais eficiente. A execução de uma operação de Verificação resultará em uma verificação completa de toda a tabela ou índice secundário e, em seguida, filtra os valores para fornecer o resultado desejado.

Use uma operação de consulta quando possível e evite uma digitalização em uma tabela ou índice grande para apenas um pequeno número de itens.

 

Segurança

O Amazon DynamoDB oferece controle granular sobre os direitos e permissões de acesso para usuários e administradores. O Amazon DynamoDB integra-se ao serviço IAM para fornecer forte controle sobre permissões usando políticas.

Você pode criar uma ou mais políticas que permitem ou negam operações específicas em tabelas específicas. Você também pode usar condições para restringir o acesso a itens ou atributos individuais.

Todas as operações devem primeiro ser autenticadas como um usuário ou sessão de usuário válido. Os aplicativos que precisam ler e gravar no Amazon DynamoDB precisam obter um conjunto de chaves de controle de acesso temporário ou permanente.

Embora essas chaves possam ser armazenadas em um arquivo de configuração, uma prática recomendada é que os aplicativos em execução na AWS usem perfis de instância do IAM Amazon EC2 para gerenciar credenciais.

Os perfis ou funções da instância do Amazon EC2 do IAM permitem evitar o armazenamento de chaves sensíveis nos arquivos de configuração que devem ser protegidos.

Para aplicativos móveis, a melhor prática é usar uma combinação de federação de identidade da web com o AWS Security Token Service (AWS STS) para emitir chaves temporárias que expiram após um curto período.

O Amazon DynamoDB também oferece suporte ao controle de acesso refinado que pode restringir o acesso a itens específicos em uma tabela ou mesmo atributos específicos em um item. Por exemplo, você pode limitar um usuário a acessar apenas seus itens em uma tabela e impedir o acesso a itens associados a um usuário diferente.

O uso de condições em uma política do IAM permite restringir quais ações um usuário pode executar, em quais tabelas e para quais atributos um usuário pode ler ou gravar.

 

Fluxos do Amazon DynamoDB

Um requisito comum para muitos aplicativos é acompanhar as alterações recentes e executar algum tipo de processamento nos registros alterados.

O Amazon DynamoDB Streams facilita a obtenção de uma lista de modificações de itens nas últimas 24 horas. Por exemplo, pode ser necessário calcular métricas de forma contínua e atualizar um painel, ou talvez sincronizar duas tabelas ou registrar atividades e alterações em uma trilha de auditoria.

Com o Amazon DynamoDB Streams, esses tipos de aplicativos ficam mais fáceis de criar.

O Amazon DynamoDB Streams permite estender a funcionalidade do aplicativo sem modificar o aplicativo original. Ao ler o log de alterações de atividades no fluxo, você pode criar novas integrações ou dar suporte a novos requisitos de relatório que não faziam parte do design original.

Cada alteração de item é armazenada em buffer em uma sequência ou fluxo ordenado por tempo que pode ser lido por outros aplicativos. As alterações são registradas no fluxo quase em tempo real e permitem que você responda rapidamente ou encadeie uma sequência de eventos com base em uma modificação.

Os fluxos podem ser ativados ou desativados para uma tabela do Amazon DynamoDB usando o AWS Management Console, a Command Line Interface (CLI) ou o SDK.

Um fluxo consiste em registros de fluxo. Cada registro de fluxo representa uma única modificação de dados na tabela do Amazon DynamoDB à qual o fluxo pertence. Cada registro de fluxo recebe um número de sequência, refletindo a ordem em que o registro foi publicado no fluxo.

Os registros de fluxo são organizados em grupos, também chamados de shards. Cada fragmento atua como um contêiner para vários registros de fluxo e contém informações sobre como acessar e iterar através dos registros. Os shards vivem por no máximo 24 horas e, com níveis de carga flutuantes, podem ser divididos uma ou mais vezes antes de serem fechados.