segunda-feira, 4 de janeiro de 2010

Introdução a Data Warehouse (DW for dummies)


OBS: Este artigo destina-se a pessoas que tem conhecimentos básicos sobre banco de dados e querem saber o que é Data Warehouse.

Em uma empresa que utiliza um sistema de banco de dados, diariamente são efetuadas N transações. Quando uma compra é efetuada por exemplo, ocorrem várias operações no banco (selects, inserts, updates e deletes). Imagine um sistema maior agora, o que registra as ligações em uma empresa de telefonia celular. Pensando superficialmente, quando você inicia uma ligação, um insert é executado, registrando os dados da ligação, tais como horário de início e número discado. Quando você desliga seu celular, é efetuado um update na linha que foi inserida, registrando dentre outros dados, a hora na qual a ligação foi finalizada. Estas base de dados, tem que estar preparadas para responder rapidamente a transações pequenas e rápidas. Tais bases tem que ter um nível de disponibilidade altíssimo. Não podem cair nunca! Elas são conhecidas como bancos de dados transacionais ou OLTP - Online Transaction Processing ou Processamento de transações em tempo-real.

Os gerentes da empresa de telefonia demandam relatórios sobre as ligações, então naturalmente você já deve estar imaginando um gigantesco select sendo feito na tabela de ligações, cruzando dados com a tabela de clientes, cidades, estados, país, etc, etc, etc. Tudo isso para um simples relatório para ver os dados sobre as ligações que foram feitas em um determinado período por exemplo.

Você acha possível rodar este "simples" select na base que está sofrendo as operações para cadastro de ligações? Sim, possível até que é! Porém é arriscadíssimo e demorado. Um select como este pode facilmente gerar um estouro de memória em uma base, pode retardar outras operações, dentre vários outros problemas.

Qual a solução? Por que não fazer uma "cópia" dos dados em um outro banco de dados distinto, o qual poderá sofrer enormes selects sem afetar o sistema da empresa que não pode parar ou sofrer com lentidão. Essa base criada é a tal de Data Warehouse, também conhecida como DW!

Mas em quais momentos essa "cópia" é feita? Depende! Cada empresa define o momento mais oportuno. Pode ser semanalmente, duas vezes por semana, antes de rodar a folha de pagamentos, etc. Geralmente as grandes empresas de telefonia iniciam a alimentação seus DWs a meia noite (e terminam por volta das 5 da manhã). Tente ligar para a sua operadora neste horário e perceba que o atendente vai falar que o sistema está lento.

As técnicas envolvidas nesta "cópia" são as mais diversas possíveis. Porém você deve ter reparado que todas as ocorrências da palavra cópia no texto acima estão entre aspas certo? Normalmente, não é feita uma simples cópia. São copiados somente os dados relevantes para o DW, ou seja, os dados que serão utilizados nos relatórios, prognósticos, previsões, etc. Neste momento também podem ocorrer algumas transformações nos dados, alguma conversão, a aplicação de uma equação, de-normalização, etc. A esta operação é dado o nome de ETL - Extraction, Transformation and Load.

Este processo de carregamento também é chamado de um processo Batch ou em Lote. Pois movimenta grande quantidade de dados de uma só vez.

Um Data Warehouse tem que ser otimizado para sofrer enormes operações de busca, porém um DW não sofre somente selects. Cada dia mais os DWs estão ficando "espertos", o termo utilizado comercialmente é SMART. O que é isso exatamente? Imagine que você carregou seu DW com os dados das ligações e quer gerar um relatório que além dos dados cadastrados em banco irá trabalhar com os mesmos para gerar forecasts, ou seja, previsões, dentre outras. Então várias operações podem ocorrer em banco para preparar os dados. Com base nos dados "antigos", o banco deve ser capaz de mostrar tendências de comportamento por exemplo. Então acabam ocorrendo outras operações no DW além do select para preparar os dados.

Em teoria, qualquer banco de dados disponível no mercado pode ser utilizado com um DW. Obviamente que vão existir diferenças em desempenho, recursos e escalabilidade. É perfeitamente possível se criar um DW utilizando o MySQL, porém análises técnicas apontam que o mesmo não tem o nível de escalabilidade de um IBM DB2 ou um Oracle por exemplo. Convém a empresa interessada fazer uma extensa pesquisa de mercado antes de escolher seu produto.

Quanto a equipamentos, normalmente um banco de dados já demanda um servidor muito poderoso e enorme quantidade de memória ram. Para um DW, as exigências são maiores ainda. É importante observar que quando falo "um servidor", quero dizer um servidor de banco de dados que pode ser constituído por um ou N computadores. Em grandes bancos, um DW pode ser 50 computadores, cada um com 8 processadores de 8 cores e 200 gigas de memória ram por computador. Os dados em si são armazenados em equipamentos chamados storages, totalizando uma capacidade de vários Terabytes!

Enfim, espero ter dado uma boa visão introdutória sobre DW. Se quiser se aprofundar mais, sugiro procurar por livros relacionados. O "Papa" do DW é o autor Ross Kimball, qualquer livro dele vai agregar muito.

Em breve postarei artigos sobre storages e servidores. Estou aberto a sugestões, críticas e dúvidas.

Enjoy!

2 comentários: