Nos dois artigos anteriores, consideramos os dois modelos de data warehouse mais comuns:o esquema em estrela e o esquema em floco de neve. Hoje, examinaremos as diferenças entre esses dois esquemas e explicaremos quando é melhor usar um ou outro.
O esquema em estrela e o esquema em floco de neve são maneiras de organizar data marts ou data warehouses inteiros usando bancos de dados relacionais. Ambos usam tabelas de dimensão para descrever dados agregados em uma tabela de fatos .
Todo mundo vende alguma coisa, seja conhecimento, um produto ou um serviço. Armazenar essas informações, seja em um sistema operacional ou em um sistema de relatórios, também é uma necessidade. Portanto, podemos esperar encontrar algum tipo de modelo de vendas dentro do data warehouse de quase todas as empresas.
Vamos dar mais uma olhada no modelo de vendas nos esquemas estrela e floco de neve.
O Esquema Estelar
A característica mais óbvia do esquema em estrela é que as tabelas de dimensão não são normalizadas. No modelo acima, a cor rosa
fact_sales
table armazena dados agregados criados a partir de nosso(s) banco(s) de dados operacional(is). As tabelas em azul claro são tabelas de dimensão. Decidimos usar essas cinco dimensões porque precisamos criar relatórios usando-as como parâmetros. A granulação dentro de cada dimensão também é determinada por nossas necessidades de relatórios. A partir desse modelo, podemos ver facilmente por que esse esquema é chamado de 'esquema em estrela':parece uma estrela, com as tabelas de dimensões em torno da tabela de fatos central.
O esquema do floco de neve
Esse esquema de floco de neve armazena exatamente os mesmos dados que o esquema em estrela. A tabela de fatos tem as mesmas dimensões do exemplo do esquema em estrela. A diferença mais importante é que as tabelas de dimensão no esquema floco de neve são normalizadas. Curiosamente, o processo de normalização das tabelas de dimensão é chamado de floco de neve.
Mais uma vez, visualmente, o esquema de floco de neve nos lembra seu homônimo, com várias camadas de tabelas de dimensão criando uma forma irregular semelhante a um floco de neve.
A primeira diferença:normalização
Como mencionado, a normalização é uma diferença fundamental entre os esquemas estrela e floco de neve. Em relação a isso, há algumas coisas a saber:
- Os esquemas de floco de neve usarão menos espaço para armazenar tabelas de dimensão. Isso ocorre porque, como regra, qualquer banco de dados normalizado produz muito menos registros redundantes .
- Modelos de dados desnormalizados aumentam as chances de problemas de integridade de dados. Esses problemas também complicarão futuras modificações e manutenções.
- Para modeladores de dados experientes, o esquema floco de neve parece mais organizado logicamente do que o esquema estrela. (Esta é minha opinião pessoal, não é um fato difícil. :))
Vamos passar para a segunda grande diferença entre esses dois esquemas.
A segunda diferença:complexidade da consulta
Em nossos dois primeiros artigos, demonstramos uma consulta que pode ser usada no modelo de vendas para obter a quantidade de todos os produtos do tipo telefone vendidos nas lojas de Berlim em 2016.
A consulta do esquema em estrela tem esta aparência:
SELECT dim_store.store_address, SUM(fact_sales.quantity) AS quantity_sold FROM fact_sales INNER JOIN dim_product ON fact_sales.product_id = dim_product.product_id INNER JOIN dim_time ON fact_sales.time_id = dim_time.time_id INNER JOIN dim_store ON fact_sales.store_id = dim_store.store_id WHERE dim_time.action_year = 2016 AND dim_store.city = 'Berlin' AND dim_product.product_type = 'phone' GROUP BY dim_store.store_id, dim_store.store_address
Para obter o mesmo resultado do esquema floco de neve, temos que usar esta consulta:
SELECT dim_store.store_address, SUM(fact_sales.quantity) AS quantity_sold FROM fact_sales INNER JOIN dim_product ON fact_sales.product_id = dim_product.product_id INNER JOIN dim_product_type ON dim_product.product_type_id = dim_product_type.product_type_id INNER JOIN dim_time ON fact_sales.time_id = dim_time.time_id INNER JOIN dim_year ON dim_time.year_id = dim_year.year_id INNER JOIN dim_store ON fact_sales.store_id = dim_store.store_id INNER JOIN dim_city ON dim_store.city_id = dim_city.city_id WHERE dim_year.action_year = 2016 AND dim_city.city = 'Berlin' AND dim_product_type.product_type_name = 'phone' GROUP BY dim_store.store_id, dim_store.store_address
Obviamente, a consulta do esquema floco de neve é mais complexa. Como as tabelas de dimensão são normalizadas, precisamos nos aprofundar para obter o nome do tipo de produto e a cidade. Temos que adicionar outro JOIN para cada novo nível dentro da mesma dimensão.
No esquema em estrela, juntamos apenas a tabela de fatos com as tabelas de dimensão que precisamos. No máximo, teremos apenas um JOIN por tabela de dimensão. E se não estivermos usando uma tabela de dimensões, nem precisamos nos preocupar com isso. Na consulta de esquema de floco de neve, não sabemos o quão profundo teremos que ir para obter o nível de dimensão correto, então isso complica o processo de escrever consultas.
A junção de duas tabelas leva tempo porque o DMBS leva mais tempo para processar a solicitação. O dim_store
e dim_city
as tabelas são colocadas próximas em nosso modelo, mas podem não estar localizadas em nenhum lugar próximo uma da outra no disco. Há uma possibilidade melhor de que os dados estejam fisicamente mais próximos no disco se estiverem dentro da mesma tabela.
Basicamente, uma consulta executada em um data mart de esquema floco de neve será executada mais lentamente. Mas na maioria dos casos isso não será um problema:não importa muito se obtivermos o resultado em um milissegundo ou um segundo.
Acelerando as coisas
Para acelerar os relatórios, podemos:
- Agregue dados no nível que precisamos nos relatórios. Isso comprimirá os dados significativamente. Precisaremos criar procedimentos que transformarão nossos dados ativos para se adequarem à estrutura do esquema de relatórios (o processo ETL).
- Crie uma área de armazenamento central para todos os dados agregados da empresa, não apenas os dados de vendas.
- Forneça aos usuários apenas os dados necessários para análises e relatórios.
Esquemas de floco de neve x estrela:qual você deve usar?
Agora que analisamos a teoria e as velocidades de consulta, vamos direto ao cerne da questão:como você sabe qual esquema usar em um determinado projeto?
Considere usar o esquema de floco de neve :
- Em data warehouses. Como o warehouse é o Data Central da empresa, poderíamos economizar muito espaço dessa forma.
- Quando as tabelas de dimensão exigem uma quantidade significativa de espaço de armazenamento. Na maioria dos casos, as tabelas de fatos serão as que ocuparão a maior parte do espaço. Eles provavelmente também crescerão muito mais rápido do que as tabelas de dimensão. Mas há certas situações em que isso não se aplica. Por exemplo, as tabelas de dimensão podem conter muitos atributos redundantes, mas necessários. Em nosso exemplo, usamos a cidade atributo para descrever a cidade onde a loja está localizada. E se quiséssemos uma descrição muito mais detalhada da cidade, incluindo a população, código postal, dados demográficos, etc.? Descrevendo outras subdimensões – por exemplo, loja , região , estado e país – com mais atributos transformaria o
dim_store
tabela de dimensão em uma tabela grande com muita redundância. - Se você usa ferramentas que exigem um esquema de floco de neve em segundo plano. (Felizmente, a maioria das ferramentas modernas suporta tanto esquemas quanto esquemas de galáxias.)
Considere usar o esquema em estrela :
-
Em data marts. Data marts são subconjuntos de dados retirados do data warehouse central. Eles geralmente são criados para diferentes departamentos e nem contêm todos os dados do histórico. Nesta configuração, economizar espaço de armazenamento não é uma prioridade.
Por outro lado, o esquema em estrela simplifica a análise. Não se trata apenas de eficiência de consulta, mas também de simplificar ações futuras para usuários corporativos. Eles podem entender bancos de dados e saber como escrever consultas, mas por que complicar as coisas e incluir mais junções se podemos evitá-lo? Um usuário de negócios pode ter uma consulta de modelo que une a tabela de fatos com todas as tabelas de dimensão. Em seguida, eles só precisam adicionar as seleções e agrupamentos apropriados. (Esta abordagem está próxima das tabelas dinâmicas do Excel.)
- Se você usa ferramentas que exigem um esquema em estrela em segundo plano. (Novamente, isso geralmente não é um problema.)
Tanto o esquema em estrela quanto o esquema em floco de neve são modelos relacionais usados para organizar data warehouses e/ou data marts. Não importa quão semelhantes sejam, elas demonstram duas abordagens diferentes e têm seus próprios benefícios e desvantagens. Pessoalmente, eu iria com o esquema floco de neve ao implementar um data warehouse (para economizar espaço de armazenamento) e com o esquema em estrela para data marts (para facilitar a vida dos usuários de negócios).