Use llaves numéricas

9 07 2007

CB101333_LoRes

Esto reduce la cantidad de espacio que el DWH ocupa, aumenta la velocidad de respuesta y disminuye el % de procesador ocupado.

Hace unos años participamos en la construcción de un modelo donde se usó el código de barras como llave de la tabla de productos. Si agarran la lata de refresco que tienen sobre el escritorio verán que es un texto de 13 caracteres, así que el tipo de dato lo definimos char(13). Al insertar los millones de transacciones que se generaron en las tiendas, la tabla de hechos se infló; pero no solo la estrella si no cada uno de los índices y agregados que involucraban el código del producto. Así que teníamos una tabla de hechos gigantesca, índices gigantescos y agregados gigantescos de muchos gigas de información.

Solo piensen un momento el trabajo que le cuesta al procesador buscar la cadena ‘7501071120091’ en cientos de gigas de información, esa columna lo mismo puede tener como contenido la palabra ‘Monterrey’ o mi nombre u otros códigos de barras.

El algoritmo que usan las bases de datos para textos es mucho más complicado que el que usa para los números ( donde solo tiene que averiguar si es el numero, es más pequeño o más grande ) y esto es el responsable que el mismo modelo en 2 servidores distintos, uno con las llaves varchar, char, text; y el otro con numeros, trabajarán de manera diferente. El que tiene llaves numéricas será más rapido u ocupará menos el procesador y la memoria del servidor.

«oye, pero es que las llaves que vienen del transaccional son caracteres: char o varchar…»

¡Pues inventa una! Definitivamente la carga de los catálogos por parte del ETL se complicará. Ahora tenemos que trarnos la llave original, ver cual es el número que le corresponde en el catálogo e insertarlo en la tabla de hechos. Algo que nos puede ayudar es en los catálogos tener siempre la llave original y la llave numérica generada por nosotros.

En resumen: si quieren que el tiempo de respuesta sea rápido con menos hardware use campos con el tipo de dato Entero en las tablas del data warehose en todas y cada una de las dimensiones.

PD. Por cierto, como recomendacion los campos numericos los pueden nombra con ID y los que originalmente vienen del transacciona como CVE, así tendríamos ProductoID y ProductoCVE.

Technorati tags: Data Warehouse, , , ,


Acciones

Information

Un comentario

10 07 2007
No utilice llaves compuestas « Haciendo Cubos

[…] Simpre use llaves simples. Las llaves compuestas hacen que el servidor trabaje más a la hora de hacer querys; así que modifique su modelo para evitar las llaves compuestas. Trate de que la llave generada sea del tipo entero. […]

Deja un comentario