none
Desnormalização de Bancos de Dados OLTP RRS feed

  • Pergunta

  • Olá Experts, boa noite!

    Existe alguma técnica expecífica para realização de desnomalização de um banco de dados tipicamente OLTP para criação de relatorios em BI?

    Pergunto isso, pois em diversas apostilas e livros introdutórios em SQL Server BI sempre é notificado que os bancos de dados OLAP são amplamente desnormalizados, porém em um contexto no qual um profissional de BI for contratado para realizar os seus reports, como é realizado o processo de desnormalização? É feito por exemplo transformando tabelas com campos compostos (Ex: Data - 31/12/2011 23:59:0000 em 31 - Dia; 12 - Mês; 2011 - Ano; 23 - Horas; 59 - Minutos; e 0000 - Segundos) E de que forma os reports são gerados após essa desnormalização?

    Desde já obrigado!

    Abraços []'s

    sexta-feira, 22 de julho de 2011 02:17

Respostas

  • Olá Iniciante,

    Normalmente as bases OLTP já possuem necessidades um pouco mais analíticas. Não é porque a base é OLTP que ninguém irá pedir um relatório um pouco mais elaborado. Começa-se com um relatório da posição de vendas do dia, um relatório dos clientes que mais compraram no último mês, etc. Essas consultas não são de complexidade tão grande, mas exigem um pouco mais de recursos que um SELECT na tabela de produtos ou listar os últimos pedidos de um cliente específico.

    À medida que a aplicação começa a ganhar importância e criticidade, essa base vai ganhando mais volume e os executivos começam a querer outras respostas que tem maior complexidade. Qual é variação média de estoque por produto e por loja ao longo do último mês ? Dos 10 maiores clientes, quais foram os produtos adquiridos e qual o percentual de cada compra em relação ao montante adquirido por cada um deles ? Essas são consultas que também podem ser respondidas com cláusulas SQL, mas que certamente vão exigir bastante recurso. Os problemas começam quando essas consultas são realizadas na mesma base em que os clientes estão comprando e nesse caso temos uma situação muito ruim. Se o relatório é gerado, os clientes terão problemas e irão reclamar (ou parar de comprar). Se o relatório não é gerado, aí o executivo fica sem a informação e a TI sofre um bocado...

    Reindexação, views materializadas, etc são recursos para aumentar o desempenho de tais consultas sem usar a desnormalização, mas normalmente são apenas a primeira alternativa. Posteriormente começa-se a desnormalizar (tabelas sumarizadas, colunas duplicadas, etc). Ainda assim chegará um momento em que tais técnicas não resolvem e aí será necessário criar uma cópia da base para que as consultas sejam realizadas na cópia e não na base principal. Posteriormente há um momento em que mesmo realizando os relatórios sobre uma cópia, o desempenho não é aceitável. É nessa hora em que um repositório OLAP é a única alternativa, pois, como a modelagem multidimensional tem outras características, a recuperação é bem mais rápida. Só que nesse caso, os dados não nascem no DW, mas sim na base OLTP. Um processo de carga se encarrega de transportar esses dados atualizando o DW.

    Desnormalização é necessária ? Depende do momento em que você está. Uma solução de BI normalmente utiliza um DW e ao optar pela modelagem dimensional você faltamente estará desnormalizado. A questão é desnormalizar na hora certa e no local correto. Jamais começe um projeto OLTP já desnormalizado para ganhar performance, pois, desnormalização não é garantia de que isso aconteça.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sábado, 23 de julho de 2011 15:00
  • Boa Noite,

    Uma base de dados OLTP normalmente terá milhares de operações com curta duração. Para garantir a consistência e integridade é esperado que a base seja normalizada (no mínimo até a terceira forma normal). Quando se normaliza, a informação é quebrada e para obtê-la é necessário o uso de JOINs. A normalização privilegia a atualização do registro, mas penaliza as consultas.

    Já no universo OLAP, espera-se poucas operações (em comparação com o OLTP), mas operação de longa duração. Um relatório consolidado de vendas por cliente no último ano ou ainda a relação entre os produtos que mais são vendidos juntos são consultas que não serão feitas na mesma frequência que a compra de um produto, mas são operações de complexidade maior e que necessitam juntar muitos pedaços (JOINs) o que irá refletir na degradação de desempenho. Imagine ter que juntar 15 tabelas para poder obter um relatório consolidado ? Sem dúvida um demora que o executivo na outra ponto não estará disposto a esperar.

    Se a não normalização irá produzir redundâncias, porque então não normalizar ? Seria correto produzir dados inconsistente em um modelo OLAP ? Não há problema nesse caso, pois, as informações nascem nas bases OLTP e os dados são transportados para bases OLAP através de processos de extração, transformação e carga de dados (ETL) e no ETL controla-se o fluxo dos dados evitando que haja inconsistências na base OLAP (mesmo que essa seja desnormalizada e redundante).

    O processo de desnormalização nada tem a ver com campos compostos. São apenas focos diferentes. O mundo OLTP preza pela modelagem ER enquanto que bases OLAP utilizam técnicas de modelagem dimensional (ou modelagem multidimensional). Os modelos de desnormalização mais conhecidos são o Star Schema e o Snow Flake embora existam outras técnicas (Flat Dimensions, Constelations, etc) além de alternativas híbridas.

    Sugiro a leitura dos livros do Ralph Kimball para dar um conteúdo de base apurado em relação a esse assunto.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 22 de julho de 2011 05:40

Todas as Respostas

  • Boa Noite,

    Uma base de dados OLTP normalmente terá milhares de operações com curta duração. Para garantir a consistência e integridade é esperado que a base seja normalizada (no mínimo até a terceira forma normal). Quando se normaliza, a informação é quebrada e para obtê-la é necessário o uso de JOINs. A normalização privilegia a atualização do registro, mas penaliza as consultas.

    Já no universo OLAP, espera-se poucas operações (em comparação com o OLTP), mas operação de longa duração. Um relatório consolidado de vendas por cliente no último ano ou ainda a relação entre os produtos que mais são vendidos juntos são consultas que não serão feitas na mesma frequência que a compra de um produto, mas são operações de complexidade maior e que necessitam juntar muitos pedaços (JOINs) o que irá refletir na degradação de desempenho. Imagine ter que juntar 15 tabelas para poder obter um relatório consolidado ? Sem dúvida um demora que o executivo na outra ponto não estará disposto a esperar.

    Se a não normalização irá produzir redundâncias, porque então não normalizar ? Seria correto produzir dados inconsistente em um modelo OLAP ? Não há problema nesse caso, pois, as informações nascem nas bases OLTP e os dados são transportados para bases OLAP através de processos de extração, transformação e carga de dados (ETL) e no ETL controla-se o fluxo dos dados evitando que haja inconsistências na base OLAP (mesmo que essa seja desnormalizada e redundante).

    O processo de desnormalização nada tem a ver com campos compostos. São apenas focos diferentes. O mundo OLTP preza pela modelagem ER enquanto que bases OLAP utilizam técnicas de modelagem dimensional (ou modelagem multidimensional). Os modelos de desnormalização mais conhecidos são o Star Schema e o Snow Flake embora existam outras técnicas (Flat Dimensions, Constelations, etc) além de alternativas híbridas.

    Sugiro a leitura dos livros do Ralph Kimball para dar um conteúdo de base apurado em relação a esse assunto.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 22 de julho de 2011 05:40
  • Gustavo, bom dia!

     

    Obrigado pela referência do Kimball, já está nos favoritos. http://www.kimballgroup.com/

    Mas no caso, se eu tivesse como ponto de partida um database de um OLTP, e resolvesse fazer um trabalho de BI sobre essa base, isso seria possível sem a desnormalização tão sugerida em livros de Bancos de Dados? E de que forma isso seria feito?

    Obrigado!

    Abs![]'s

    sábado, 23 de julho de 2011 13:16
  • Olá Iniciante,

    Normalmente as bases OLTP já possuem necessidades um pouco mais analíticas. Não é porque a base é OLTP que ninguém irá pedir um relatório um pouco mais elaborado. Começa-se com um relatório da posição de vendas do dia, um relatório dos clientes que mais compraram no último mês, etc. Essas consultas não são de complexidade tão grande, mas exigem um pouco mais de recursos que um SELECT na tabela de produtos ou listar os últimos pedidos de um cliente específico.

    À medida que a aplicação começa a ganhar importância e criticidade, essa base vai ganhando mais volume e os executivos começam a querer outras respostas que tem maior complexidade. Qual é variação média de estoque por produto e por loja ao longo do último mês ? Dos 10 maiores clientes, quais foram os produtos adquiridos e qual o percentual de cada compra em relação ao montante adquirido por cada um deles ? Essas são consultas que também podem ser respondidas com cláusulas SQL, mas que certamente vão exigir bastante recurso. Os problemas começam quando essas consultas são realizadas na mesma base em que os clientes estão comprando e nesse caso temos uma situação muito ruim. Se o relatório é gerado, os clientes terão problemas e irão reclamar (ou parar de comprar). Se o relatório não é gerado, aí o executivo fica sem a informação e a TI sofre um bocado...

    Reindexação, views materializadas, etc são recursos para aumentar o desempenho de tais consultas sem usar a desnormalização, mas normalmente são apenas a primeira alternativa. Posteriormente começa-se a desnormalizar (tabelas sumarizadas, colunas duplicadas, etc). Ainda assim chegará um momento em que tais técnicas não resolvem e aí será necessário criar uma cópia da base para que as consultas sejam realizadas na cópia e não na base principal. Posteriormente há um momento em que mesmo realizando os relatórios sobre uma cópia, o desempenho não é aceitável. É nessa hora em que um repositório OLAP é a única alternativa, pois, como a modelagem multidimensional tem outras características, a recuperação é bem mais rápida. Só que nesse caso, os dados não nascem no DW, mas sim na base OLTP. Um processo de carga se encarrega de transportar esses dados atualizando o DW.

    Desnormalização é necessária ? Depende do momento em que você está. Uma solução de BI normalmente utiliza um DW e ao optar pela modelagem dimensional você faltamente estará desnormalizado. A questão é desnormalizar na hora certa e no local correto. Jamais começe um projeto OLTP já desnormalizado para ganhar performance, pois, desnormalização não é garantia de que isso aconteça.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sábado, 23 de julho de 2011 15:00