Pregunta

Yo sé un poco sobre la parte interna de bases de datos. De hecho, me he implementado un motor pequeño, simple base de datos relacional antes, usando estructuras ISAM en el disco y los índices BTree y todo ese tipo de cosas. Fue muy divertido y muy educativo. Sé que soy mucho más consciente sobre el diseño de esquemas de bases de cuidado y escribir consultas ahora que sé un poco más sobre el trabajo de cómo RDBMS bajo el capó.

Pero no saber nada acerca de los modelos de datos multidimensionales OLAP, y he tenido un tiempo difícil encontrar ninguna información útil en Internet.

¿Cómo se utiliza la información almacenada en el disco? ¿Qué estructuras de datos comprenden el cubo? Si un modelo MOLAP no utiliza tablas, con las columnas y los registros, entonces ... ¿qué? Especialmente en datos altamente dimensionales, qué tipos de estructuras de datos que el modelo MOLAP tan eficiente? Hacer implementaciones MOLAP usan algo análogo a los índices de RDBMS?

¿Por qué los servidores OLAP mucho mejor en el procesamiento de consultas ad hoc? El mismo tipo de agrupaciones que podrían tomar horas a procesar en una base de datos relacional ordinaria puede ser procesado en milisegundos en un cubo de OLTP. ¿Cuáles son los mecanismos subyacentes del modelo que lo hacen posible?

¿Fue útil?

Solución

He implementado un par de sistemas que lo mimiced cubos OLAP hacer, y aquí hay un par de cosas que hicimos para llegar a trabajar.

1) Los datos de núcleo se llevó a cabo en una matriz dimensional n, todo en la memoria, y todas las claves se implementa a través de jerarquías de punteros a la matriz subyacente. De esta manera podríamos tener varios conjuntos diferentes de llaves para los mismos datos. Los datos de la matriz era el equivalente de la tabla de hechos, a menudo sólo tendría un par de piezas de datos, en un caso se trataba de precio y cantidad vendida.

2) La matriz subyacente a menudo era escasa, por lo que una vez que se ha creado que utiliza para eliminar todas las celdas en blanco para ahorrar memoria - un montón de núcleo duro aritmética de punteros pero funcionó

.

3) Como teníamos jerarquías de claves, podríamos escribir rutinas bastante facilidad para perforar hacia abajo / arriba de una jerarquía fácilmente. Por ejemplo podríamos tener acceso a los datos del año, pasando a través de las teclas meses, que a su vez asignan a días y / o semanas. En cada nivel nos agregar datos como parte de la construcción de los cubitos de -. Cálculos hecho mucho más rápido

4) No se implementa ningún tipo de lenguaje de consulta, pero no nos ayuda profundizar en todos los ejes (hasta 7 en nuestros más grandes cubos), y que estaba ligado directamente a la interfaz de usuario, que le gusta a los usuarios.

5) Se implementó cosas núcleo en C ++, pero en estos días Calculo C # podría ser lo suficientemente rápido, pero me preocuparía de cómo implementar matrices dispersas.

Espero que ayude, suena interesante.

Otros consejos

El libro Microsoft SQL Server 2008 Analysis Services Poder de detalla algunas de las particularidades de SSAS 2008 en detalle decente. No es exactamente un "aquí es exactamente cómo funciona SSAS bajo el capó", pero es bastante sugerente, especialmente en el lado estructura de datos. (No es tan detallada / específica sobre los algoritmos exactos.) Algunas de las cosas que, como aficionado en esta área, obtenida de este libro. Esto se trata de SSAS MOLAP:

  • A pesar de todo lo dicho sobre los cubos multidimensionales, tabla de hechos (también conocido como grupo de medida) de datos es todavía, en una primera aproximación, en última instancia almacenan en tablas básicamente en 2D, una fila por cada hecho. Una serie de operaciones OLAP parece consistir en última instancia de la iteración en filas en las tablas 2D.
  • Los datos son potencialmente mucho más pequeño dentro MOLAP que dentro de una tabla de SQL correspondiente, sin embargo. Un truco es que cada cadena única se almacena sólo una vez, en un "almacén de cadena". Las estructuras de datos pueden referirse a cadenas en una forma más compacta (por ID de cadena, básicamente). SSAS también comprime filas dentro de la tienda MOLAP en alguna forma. Este encogimiento Asumo permite más de la estancia de datos en la memoria RAM de forma simultánea, lo cual es bueno.
  • Del mismo modo, SSAS a menudo puede repetir un subconjunto de los datos en lugar de la base de datos completa. Unos mecanismos están en juego:
    • Por defecto, SSAS construye un índice hash para cada valor de dimensión / atributo; Por lo tanto, sabe "de inmediato" las páginas en el disco contienen los datos pertinentes para, por ejemplo, Año = 1997.
    • No es una arquitectura de almacenamiento en caché que se almacenan los subconjuntos relevantes de los datos en la RAM separado de todo el conjunto de datos. Por ejemplo, es posible que haya almacenado en caché un subcubo que tiene sólo unos pocos de sus campos, y que sólo se refiere a los datos de 1997. Si una consulta está pidiendo sólo alrededor de 1997, entonces se repetirá sólo sobre que subcubo, acelerando así las cosas . (Pero tenga en cuenta que un "subcubo" es, en una primera aproximación, sólo una mesa 2D.)
    • Si estás agregados predefinidos, entonces estos subconjuntos más pequeños también pueden calcularse previamente en el tiempo de procesamiento del cubo, en lugar de simplemente computa / caché bajo demanda.
  • hecho de filas de la tabla
  • SSAS se fijan tamaño, que presumibly ayuda de alguna forma. (En SQL, en constraste, es posible que tenga columnas de cadenas de ancho variable.)
  • La arquitectura de almacenamiento en caché también significa que, una vez que una agregación se ha calculado, no necesita ser re-cargada desde el disco y recalcula una y otra vez.

Estos son algunos de los factores en juego en SSAS de todos modos. No puedo decir que no hay otras cosas vitales también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top