A Amazon Web Services (AWS) mudou para sempre como a infraestrutura de TI pode ser fornecida, tornando-o a sob demanda, escalável, rápida e econômica. E agora, o Amazon Redshift (um dos serviços oferecidos na nuvem AWS) está fazendo exatamente o mesmo para Data Warehousing.
O Amazon Redshift é um Data Warehouse rápido e gerenciado em nuvem, que torna simples e econômica a análise de dados usando ferramentas SQL padrão, assim como ferramentas de BI (Business intelligence) de que uma empresa já dispõe. Ele permite executar consultas complexas de análise em petabytes de dados estruturados, usando otimização de consulta avançada, armazenamento colunar em discos locais de alto desempenho e execução maciçamente paralela de consultas. A maioria dos resultados é disponibilizada em alguns segundos. Com o Amazon Redshift, você paga pelo serviço que usar começando aos poucos, por apenas 0,25 USD por hora, e aumentando a escala até petabytes de dados por 1.000 USD por terabyte ao ano, menos de um décimo do custo de soluções tradicionais, segundo a Amazon.
O Amazon Redshift é um banco de dados colunar (baseado no mecanismo AFAIK do ParAccel) que é dimensionado horizontalmente e permite armazenar terabytes e petabytes de dados. O Redshift possui alguns recursos de “ingestão”, principalmente o carregamento de arquivos do ambiente de armazenamento em nuvem da Amazon, o S3 (provenientes de seu próprio ETL) ou do AWS Kinesis (onde o processamento adicional pode acontecer antes de carregar os dados).
A conexão ao Redshift é similar a conexão ao banco de dados Postgres (a conexão ao Redshift realmente é feita usando o conector Postgres). Se você quiser aplicar mais análises e visualizações, você usa ferramentas de terceiros para a interface de usuário.
Você paga por nós Redshift, desde que eles estejam ativos, não por consultas ou transações, de maneira semelhante a como você paga pelos nós AWS RDS ou AWS EC2. Você pode começar com um único nó e dimensionar até 10. Todos os nós em um cluster devem ser do mesmo tipo e o redimensionamento é um processo que pode demorar um pouco.
O Redshiftt oferece um armazenamento de dados colunares massivamente paralelo que pode lidar com bilhões de linhas de dados, mas que pode estar ativo e funcionando em poucos minutos e operado por alguns centavos por hora. Como tal, não é surpresa que o Amazon Redshift seja o serviço de crescimento mais rápido da AWS.
Mas o que é exatamente o Amazon Redshift? Como funciona e como isso pode beneficiar você? Na sua forma mais simples, o Amazon Redshift é uma combinação de duas tecnologias importantes. Primeiro, é um repositório de dados colunar (também chamado de banco de dados orientado por colunas) e, segundo, também usa processamento massivamente paralelo (MPP). Vejamos cada um desses itens.
Um Repositório de Dados Colunar
Um DBMS (Database Management System) orientado a colunas é um tipo de sistema de gerenciamento de banco de dados que armazena dados como seções de colunas de dados, em vez de linhas como você deve estar acostumado em um RDBMS (Relational Database Management System) convencional. Bancos de dados orientados a colunas são particularmente úteis para Data Warehouses, Analytics e aplicativos de Big Data, pois resolvem consultas muito rapidamente e reduzem a necessidade de junções.
Por exemplo, digamos que você tenha uma tabela de dados como esta:
Um RDBMS normal, como MySQL, SQL Server ou Oracle, normalmente armazenará os dados da seguinte forma:
Cada linha, uma de cada vez, serializada e digitada por um row_id internamente mantido.
O RDBMS e esse formato de armazenamento de dados orientado a linha são otimizados para serem realmente eficientes no retorno de linhas únicas. Isso é adequado para casos de uso comuns em sistemas OLTP transacionais, nos quais você talvez acesse uma linha específica (por exemplo, um cliente ou um produto) para atualizá-lo.
Mas, crucialmente, os bancos de dados orientados a linhas não são tão eficientes na execução de operações em todo o conjunto de dados. No exemplo acima, por exemplo, o banco de dados teria que inspecionar todo o conjunto de dados para identificar clientes com limites de crédito entre 6.000 e 18.000 e isso vai significar muitas operações de disco para resolver a resposta para você.
A estratégia para mitigar isso em um banco de dados normal é, obviamente, construir um índice. Um índice sobre a coluna credit_limit da nossa tabela de amostra pode ter esta aparência:
Como o índice é menor, ele requer menos operações de I/O, tornando-o mais rápido. O índice também pode ser classificado no valor da coluna, o que torna as consultas de intervalo como a nossa consulta de “limite de crédito entre x e y” ainda mais rápida.
Mas os índices têm suas desvantagens. Eles adicionam sobrecarga ao RDBMS em termos de armazenamento, processamento e I/O. E como projetistas de banco de dados, temos que prever como o usuário vai trabalhar com o banco de dados, para que possamos ter índices construídos para suportar suas consultas. Isso não é tão ruim em um sistema transacional, pois sabemos quais consultas o software desejará fazer no banco de dados. Mas em BI, Data Warehouse ou aplicativo analítico, podemos querer “slice and dice” em quase todos os campos.
Em um armazenamento de dados colunar como o Amazon Redshift, a forma como os dados são armazenados é invertida. Nossa tabela de amostra seria armazenada assim:
Cada linha agora representa uma coluna.
Mas há outra diferença mais sutil (e mais importante): os dados se tornaram a chave. Em um banco de dados normal, o Row_ID que é mantido internamente é a chave para os dados indexados. Aqui, os dados são a chave. Isso significa que, se os registros tiverem valores idênticos em alguns de seus campos (como no nosso exemplo, há dois clientes chamados Smith), isso pode ser refletido com mais eficiência, como neste exemplo:
Isso tem alguns resultados bastante impressionantes quando se trata de retornar as respostas às consultas analíticas. Para muitas pesquisas comuns, como “localizar todos os clientes chamados Smith”, o resultado pode ser retornado com uma única operação de banco de dados. Contagens, médias e outras operações matemáticas se beneficiam de maneira semelhante. Em comparação com a maneira intensiva de I/O que um RDBMS tradicional responderia à mesma pergunta, a diferença é transformacional.
Há outros benefícios também. A maneira como os dados são armazenados naturalmente os otimiza para compactação. E é claro que você não precisa de nenhum índice novamente, nunca.
Bancos de dados colunares não são novidade. Você pode ter ouvido falar de Vertica, Teradata e Infobright, por exemplo. Mas o Amazon Redshift oferece tecnologia orientada por colunas em uma base de serviço, tornando-o acessível, fácil e rápido de usar.
Melhor ainda, também combina a tecnologia de banco de dados colunar com uma incrível capacidade de clustering, permitindo um processamento massivamente paralelo. E por falar nisso, vamos agora analisar o processamento maciçamente paralelo e como isso pode beneficiar seus projetos com o Amazon Redshift.
Massively Parallel Processing (MPP)
Na Ciência da Computação, o processamento maciçamente paralelo significa usar um grande número de processadores ou computadores para executar cálculos coordenados em paralelo simultaneamente.
Aproveitando os serviços subjacentes fornecidos pela AWS (como S3 para armazenamento e EC2 para servidores em nuvem), o Redshift é implementado como um cluster. Na verdade, você não pode implantar um único nó ou servidor com Amazon Redshift, apenas um cluster.
Um cluster do Amazon Redshift é formado por um líder, com nós por trás dele. Portanto, os dados são distribuídos pelo cluster (dependendo da estratégia de chave de classificação especificada para suas tabelas) para otimizar sua capacidade de resolver consultas em paralelo.
Quando você emite uma consulta para o Amazon Redshift, essa consulta é dividida e compartilhada entre os nós do cluster, o que leva a uma escalabilidade quase linear. Corretamente configurado, um cluster do Amazon Redshift de oito nós resolverá muitas consultas aproximadamente duas vezes mais rápido que um cluster de quatro nós.
É claro que o cluster é implantado na AWS, o que significa que todos os benefícios da IAAS (Infrastrurcture as a Service) e da computação em nuvem oferecidos pela plataforma AWS também são passados para o Redshift. Os nós nos clusters têm “fatias” que representam os processadores nas instâncias do EC2. Você pode escolher entre tecnologia de armazenamento em disco convencional (mais barata) ou em estado sólido (SSD – maior desempenho). Você pode implantar, em alguns cliques, a zona de disponibilidade (localização geográfica do data center) de sua escolha. E você pode tirar snapshots, recriar, fazer backup, redimensionar e ativar ou desativar o seu cluster Redshift, tudo ao toque de um botão. E para tudo isso, é claro, você é cobrado apenas por hora.
Imagine que sua empresa esteja desenvolvendo um aplicativo e quer saber mais sobre como seus usuários interagem com ele. Você recorre à coleta de eventos de comportamento, geralmente começando com o Google Analytics, o Mixpanel ou qualquer outra ferramenta. Na maioria dos casos você está totalmente satisfeito com o que essas ferramentas lhe oferecem e percebe que está bom para começar.
Depois de alguns meses, sua necessidade de dados aumenta e você acaba atingindo um dos dois tetos – você precisa acessar a consulta de dados de eventos brutos coletados (para análise mais granular ou ingestão interna) ou chegou ao limite de custo de coletar os dados. Isso leva você a considerar o armazenamento dos dados coletados em seu próprio sistema, o que requer um banco de dados grande para armazenar todos os dados e torná-los acessíveis para você analisar.
Então você começa a mergulhar no mundo dos bancos de dados analíticos, entendendo que você está procurando um banco de dados colunar MPP (Massive Parallel Processing) destinado a grandes cargas de dados / fins de análise. Claro, você pode começar a entrar no mundo das vendas corporativas e comprar uma licença de algum software disponível no mercado, mas você ainda está no início do jogo e quer conseguir avaliar seu aplicativo o mais rápido possível, sem ter que comprar as licenças de US $ 100 mil.
É aqui que entra o Amazon Redshift, você pode começar pequeno e crescer à medida que for necessário. Não precisa se preocupar com infraestrutura, nem com centro de processamento de dados, nem com segurança física de acesso aos servidores, nem com manutenção de hardware ou qualquer outra necessidade comum ao mundo on-premise. O Redshift está na nuvem, a apenas alguns cliques e com custo que vai aumentar apenas à medida que você usar mais ou serviço. Se amanhã você chegar a conclusão que ele não é mais necessário, basta desligar o serviço e pronto. Isso é Cloud Computing.
Referências:
Design e Implementação de Data Warehouses (com Postgresql e Redshift)
What is Amazon Redshift? AWS’s “fastest growing service” unboxed