Pergunta

Eu sei um pouco sobre banco de dados internos. Eu realmente implementado um motor pequeno, simples de banco de dados relacional antes, usando estruturas ISAM no disco e índices BTREE e todo esse tipo de coisa. Foi divertido e muito educativo. Eu sei que eu sou muito mais consciente sobre o projeto cuidadosamente esquemas de banco de dados e escrever consultas agora que eu sei um pouco mais sobre como RDBMSs trabalho sob o capô.

Mas eu não sei nada sobre modelos de dados OLAP multidimensionais, e eu tive um tempo difícil encontrar alguma informação útil sobre a internet.

Como é a informação armazenada no disco? Que estruturas de dados compreendem o cubo? Se um modelo MOLAP não usa tabelas, com colunas e registros, então ... o quê? Especialmente em dados altamente dimensionais, que tipos de estruturas de dados tornar o modelo MOLAP tão eficiente? implementações Do MOLAP usar algo análogo a índices de RDBMS?

Por que os servidores OLAP muito melhor no processamento de consultas ad hoc? Os mesmos tipos de agregações que podem levar horas para processo em um banco de dados relacional comum pode ser processado em milissegundos em um cubo de OLTP. Quais são os mecanismos subjacentes do modelo que tornar isso possível?

Foi útil?

Solução

Eu tenho implementado um par de sistemas que mimiced o OLAP cubos de fazer, e aqui estão algumas coisas que fizemos para obtê-los para o trabalho.

1) Os dados do núcleo foi realizada em uma matriz n dimensional, tudo em memória, e todas as chaves foram implementados através de hierarquias de ponteiros para a matriz subjacente. Desta forma, poderia ter vários conjuntos diferentes de chaves para os mesmos dados. Os dados na matriz era o equivalente a tabela de fatos, muitas vezes ele só teria um par de pedaços de dados, em um exemplo deste foi preço e número de computadores vendidos.

2) A matriz subjacente era muitas vezes escasso, por isso, uma vez que foi criado foi utilizado para remover todas as células em branco para economizar memória - lotes de hard core aritmética de ponteiro, mas funcionou

.

3) Como tínhamos heirarchies de chaves, poderíamos escrever rotinas bastante facilidade para perfurar para cima / baixo uma hierarquia facilmente. Por exemplo, nós poderia acessar ano de dados, passando por as chaves meses, o que, por sua vez mapeados para dias e / ou semanas. A cada nível que iria agregar dados como parte da criação do cubo -. Cálculos feitos muito mais rápido

4) Nós não implementar qualquer tipo de linguagem de consulta, mas o que fizemos apoio drill down em todos os eixos (até 7 em nossos maiores cubos), e que foi amarrado diretamente para a interface do usuário que os usuários gostaram.

5) Implementamos o material do núcleo em C ++, mas hoje em dia eu acho C # pode ser rápido o suficiente, mas eu me preocuparia sobre como implementar matrizes esparsas.

Espero que ajude, som interessante.

Outras dicas

feitiços

O livro Microsoft SQL Server 2008 Analysis Services desencadeada algumas das particularidades do SSAS 2008 em detalhes decente. Não é bem um "aqui é exatamente como SSAS funciona sob o capô", mas é muito sugestivo, especialmente no lado da estrutura de dados. (Não é tão detalhado / específicas sobre os algoritmos exatos.) Alguns das coisas que eu, como um amador nesta área, recolhidas a partir deste livro. Isto é tudo sobre SSAS MOLAP:

  • Apesar de toda a conversa sobre cubos multi-dimensionais, tabela de fatos (aka grupo de medida) de dados é ainda, em uma primeira aproximação, em última análise, armazenados em basicamente 2D mesas, uma linha por fato. Uma série de operações OLAP parece consistir em última análise, de iteração sobre linhas em tabelas 2D.
  • Os dados são potencialmente muito menor dentro MOLAP do que dentro de uma tabela SQL correspondente, no entanto. Um truque é que cada string única é armazenado apenas uma vez, em uma "loja de cadeia". estruturas de dados podem então referir-se a cordas em uma forma mais compacta (por ID de cadeia, basicamente). SSAS também comprime as linhas dentro da loja MOLAP de alguma forma. Este encolhimento Presumo permite que mais da estadia de dados na memória RAM simultaneamente, o que é bom.
  • Da mesma forma, SSAS muitas vezes pode iterar sobre um subconjunto dos dados em vez do conjunto de dados completo. Alguns mecanismos estão em jogo:
    • Por padrão, o SSAS constrói um índice hash para cada valor da dimensão / atributo; Assim, sabe "imediatamente" as páginas no disco contêm os dados relevantes para, digamos, Ano = 1997.
    • Não há uma arquitetura de cache onde subconjuntos relevantes dos dados são armazenados na memória RAM separado de todo o conjunto de dados. Por exemplo, você pode ter em cache um subcubo que tem apenas alguns de seus campos, e que só diz respeito aos dados de 1997. Se uma consulta está pedindo apenas cerca de 1.997, em seguida, ele irá iterar somente sobre que subcube, acelerando assim as coisas . (Mas note que um "subcube" é, numa primeira aproximação, apenas uma mesa 2D.)
    • Se você está agregados predefinidos, então estes subconjuntos menores podem também ser pré-computados em tempo de processamento de cubo, em vez de simplesmente calculado / cache on demand.
  • tamanho
  • SSAS linhas da tabela verdade são fixos, o que ajuda presumibly de alguma forma. (Em SQL, em constrast, você pode ter colunas de cordas de largura variável.)
  • A arquitetura de armazenamento em cache também significa que, uma vez que uma agregação foi calculado, ele não precisa ser refetched do disco e recalculado novamente e novamente.

Estes são alguns dos fatores em jogo no SSAS de qualquer maneira. Não posso afirmar que não há outras coisas vitais também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top