2012-04-18 48 views

Respuesta

1

De Concepts Guide.pdf (en la página 23) de la documentación de Vertica.

Las proyecciones almacenan datos en un formato que optimiza la ejecución de consultas. Son similares a las vistas materializadas ya que almacenan los conjuntos de resultados en el disco en lugar de calcularlos cada vez que se utilizan en una consulta.

también

Las proyecciones son transparentes para SQL de los usuarios finales. El optimizador de consulta Vertica selecciona automáticamente las mejores proyecciones para usar en cualquier consulta .

Todo lo que se necesita hacer para una proyección para mejorar el rendimiento de las consultas es crear la proyección. Vertica seleccionará automáticamente la mejor proyección para usar para esa consulta. (Nota: Es posible forzar una proyección específica al consultar específicamente en lugar de una tabla)

No sé en qué consiste su comprensión de las proyecciones, pero las preguntas más específicas sobre las proyecciones permitirán una mayor elaboración en puntos. Si está buscando obtener una visión general de los conceptos, recomiendo obtener y leer la Concepts Guide.pdf. http://my.vertica.com

+0

Gracias Nija. Tu respuesta es muy útil. Tengo algunas preguntas más sobre esto. Según tengo entendido, las PROYECCIONES son similares a VIEWS, excepto que las proyecciones almacenan conjuntos de resultados en el disco mientras que las vistas calculan los datos de la tabla cada vez que se utilizan en una consulta. ¿Puedo usar VIEW como alternativa a PROJECTION? Si es así, ¿tendré problemas de rendimiento? – Murali

+0

@Murali: 'Views' en Vertica son, esencialmente, consultas. (De _SQL Reference Manual.pdf_) "[en] una consulta que contiene una vista, el nombre de vista es reemplazado por la consulta de definición de la vista" – Nija

+0

Gracias. Por cierto, no pude descargar la Guía de conceptos.pdf de http://my.vertica.com. solo el usuario autorizado podría descargar, parece. Me inscribí pero todavía no recibí el correo de activación. ¿Hay alguna otra forma de obtener la guía .pdf? – Murali

7

Vertica no utiliza índices para buscar los datos.

Conceptualmente, todavía tiene acceso a las tablas mediante SQL. Pero debajo del capó, los datos en la tabla se almacenan en proyecciones, que puede optimizar para diferentes consultas.

Me gusta pensar que es una mesa que representa una baraja de cartas. Si juega al póker, puede decir algo como "Seleccione * del límite 5 de CardDeck".

Digamos que usted tiene una tabla definida con las siguientes columnas:

int valor facial (vamos a suponer valores faciales son enteros), Traje varchar (10)

A continuación, puedo crear mis proyecciones (I omitiendo detalles sobre particionamiento, superproyecciones, compliaciones, etc.).

crear proyección CardDeck_p1 ( valor facial CODIFICACIÓN RLE, Traje ) como seleccionar valor facial, Traje de orden CardDeck por valor facial;

crear proyección CardDeck_p2 ( valor facial, Traje ) como seleccione valor facial, Traje de orden CardDeck por Suit;

Ahora, cada columna puede obtener un tipo diferente de codificación que se define en la proyección.Y el diseñador de la base de datos, que no he usado mucho desde que estoy en una versión anterior, puede ayudar a diseñar las proyecciones para usted.

Volviendo a la baraja de las analogías de cartas, imagina que quieres acceder a un mazo de cartas pero quieres tener diferentes barajas de cartas. Las proyecciones en Vertica te dan las diferentes combinaciones. Las tablas son realmente una construcción que le permite acceder a los datos que se almacenan en las proyecciones. Pero si está escribiendo SQL, tiene acceso a las tablas.

+0

Muchas gracias, geoffrobinson! – Murali

1

Quiero enfatizar el punto hecho en la respuesta de geoff: las proyecciones son estructuras físicas en el disco. La definición de múltiples proyecciones para una tabla puede mejorar el rendimiento de la consulta, pero a costa de un mayor espacio en el disco y tiempos de carga más lentos (ya que las filas deben colocarse en cada proyección).

Hay superproyecciones que almacenan todas las columnas en una tabla, así como proyecciones parciales. Utilizaría una proyección parcial cuando la consulta que intenta soportar/optimizar solo necesita un subconjunto de columnas de la tabla. Cada tabla necesita al menos una superproyección. Si no define uno, Vertica aprovisionará uno predeterminado, que puede tener un rendimiento muy bajo.

La práctica recomendada es que la herramienta del Diseñador de base de datos lo ayude a analizar su tabla con datos de prueba y consultas de prueba, después de lo cual puede sugerirle una proyección. Personalmente, no he obtenido buenos resultados de esta manera, pero saber cómo usar la herramienta DBD debería ser parte del plan de estudios para cualquier persona que entrene en Vertica.

+0

Gracias kimbo305 – Murali

0

Parece que está familiarizado con las vistas. Las proyecciones son muy parecidas a las vistas en concepto, ambas guardan algo en caché pero en diferentes niveles. En pocas palabras, las vistas almacenan en caché las instrucciones de consulta, mientras que las proyecciones almacenan en caché los resultados de la consulta.

Ve la caché las declaraciones de consulta. Da nombres a las consultas predefinidas y luego las invoca. Las consultas de vista no se ejecutan cuando se crean. Cuando realiza las consultas utilizando vistas, no obtendrán ninguna mejora en el rendimiento, ya que son solo consultas ordinarias.

Caché de proyecciones los resultados de la consulta. Las consultas de proyección se ejecutan cuando las creas, y los resultados se conservan en el almacenamiento. Cuando realiza una consulta que puede utilizar el resultado de la consulta, Vertica utilizará esas proyecciones para responder a la consulta, por lo tanto, mejorará el rendimiento de la consulta. Después de crear las proyecciones, no hay nada especial que deba hacer, Vertica seleccionará las proyecciones automáticamente si puede beneficiar a la consulta. Las proyecciones se pueden usar para la consulta porque la consulta utiliza las columnas del subconjunto de proyecciones, tiene el mismo orden de ordenación, etc.

Proyecciones como vistas, puede seleccionar un subconjunto de columnas de tabla, realizar unir con otras tablas, ordenar por columnas específicas. Sin embargo, diferentes proyecciones ocuparán su propio espacio para guardar el resultado de la consulta, mientras más proyecciones se creen, más espacio se consumirán. Las proyecciones se actualizarán automáticamente mientras se actualizan las tablas fuente relacionadas. El proceso de actualización se ejecuta en segundo plano y puede tardar mucho tiempo según la complejidad de la consulta y el tamaño de los datos. Por lo tanto, las proyecciones son más adecuadas para muchas lecturas en lugar de muchas escrituras.Desde la perspectiva del caso de uso, las proyecciones son más adecuadas para informar en comparación con el panel web en tiempo real.

En el detalle de la implementación, las tablas en Vertica son todas lógicas. Todos los datos en las tablas se almacenan en cada super proyección asociada. La super proyección contiene todas las columnas en la tabla y se crea automáticamente de forma predeterminada. Todas las demás proyecciones se derivan de las super proyecciones.

Vertica decidirá qué proyecciones serán utilizados para la consulta, pero también se puede especificar el nombre de las proyecciones directamente a la fuerza Vertica utilizarlos:

-- List all projections 
SELECT projection_name FROM projections; 

-- Force to use super projection, _super is the suffix of the super projection 
SELECT * FROM FACT_TABLE_super; 

Usted puede utilizar la instrucción explican a ver qué las proyecciones se usan en el plan de consulta. Esto lo ayudará a mejorar el rendimiento de su consulta.

Cuestiones relacionadas