2014/12/30

Cómo elegir una Base de Datos para su Empresa


A medida que su organización recopila más datos y quiere hacer un mejor uso de los datos que va adquiriendo se tienen varias opciones que van mucho más allá de las bases de datos tradicionales. Quizás ud. se encuentra en el punto en que el uso de herramientas de inteligencia de negocios que hacen extracciones desde su datawarehouse no es  suficiente, y los datos son demasiado grandes para analizarlos lo suficientemente rápido por los medios tradicionales, y por lo tanto, es el momento de realizar un análisis detallado de las alternativas de bases de datos disponibles en el mercado.

Claramente la elección de la tecnología de base de datos estará determinada por los parámetros de su proyecto: la cantidad de datos, la rapidez con que le llegan, el análisis que quiere hacer y si va a utilizarlos operacionalmente o para la toma de decisiones estratégicas. También es posible que desee extraer conocimiento del negocio, por ejemplo, de la venta al detalle en el punto de venta o de las transacciones de un programa de CRM. Quizás usted podría estar tratando de acelerar la logística, identificar dónde está el inventario en tiempo real en su cadena de suministro o realizar un seguimiento del comportamiento de un gran número de clientes en su sitio web.

La pregunta es entonces: ¿Cuáles bases de datos son apropiadas para determinados tipos de proyectos?. La siguiente breve guía que hemos elaborado, puede ayudarle a evaluar las opciones que hay disponibles:

Base de datos relacional

Qué es: Es el sistema tradicional de base de datos relacional, con datos estructurados organizados en tablas.
Fortalezas: Usa el lenguaje estándar de consulta SQL, que  garantiza la consistencia de los resultados de las consultas.
Debilidades: Requiere que la tabla completa se almacene en archivo o memoria, requiere de datos estructurados y esquemas relacionales, la tabla canónica debe ser replicada con el fin de realizar análisis en servidores paralelos.

Si usted está tratando con datos estructurados o de transacciones relativamente simples, por ejemplo, pedidos de clientes o datos de puntos de venta y desea la máxima flexibilidad en las preguntas que quiere responder, el lugar para comenzar es la base de datos relacional. La ventaja directa es que su organización probablemente ya está utilizando un RDBMS, por lo que su personal de TI,  incluyendo los analistas de bases de datos, pueden crear las consultas SQL directamente sin necesidad de mayor entrenamiento. Usted sólo tiene que elegir una base de datos de clase empresarial (a la escala adecuada de su proyecto) para satisfacer sus necesidades de análisis de datos. Puede elegir algunas tales como Oracle, IBM InfoSphere Warehouse, Sybase o Teradata. Hay muchas más, éstas son sólo un ejemplo.

Por otro lado, las desventajas podrian estar en el precio, en la flexibilidad de las consultas a datos que están rigurosamente estructurados y que se almacenan en un único conjunto canónico de tablas, las cuales tienen que ser replicadas si necesitar usar el procesamiento en paralelo para acelerar el rendimiento. En este caso, cada actualización tiene que ser replicada en otras copias, así que si los datos cambian mucho, hay un montón de costos asociados (procesamiento en memoria, procesamiento en disco, equipos, discos,  tiempo, etc.), lo que afectará negativamente a los tiempos de respuesta de las consultas. Usted podría también mantener las tablas en memoria en lugar de tenerlas en el disco, con el fin de acelerar la lectura y escritura, pero esto tiene un costo mayor. Y a medida que crecen los datos, el tiempo de respuesta para las consultas de análisis pueden fácilmente pasar de ser instantáneas a tomar horas, días o semanas.

Base de datos columnar

Qué es: Es una base de datos relacional que almacena los datos por columna en lugar de filas.
Fortalezas: Todos los puntos fuertes de una base de datos relacional, optimizada para un mejor rendimiento en el análisis de los datos de varias columnas a la vez.
Debilidades: Requiere que la tabla completa se almacene en archivo o memoria, requiere de datos estructurados y esquemas relacionales.

¿Qué pasa si sus datos están muy estructurados, pero necesita realizar un mayor análisis de los datos almacenados en unas pocas columnas particulares, por ejemplo, el análisis de las transacciones de venta por tienda o por producto?. En este caso, una base de datos en columnas tiene más sentido, y puede elegir algunas de las opciones tales como Sybase IQ, Microsoft SQL Server 2012, Teradata Columnar o Actian VectorWise.

Aunque suena raro el nombre, una base de datos columnar es también una base de datos relacional. La diferencia está en la forma: en lugar de almacenar cada tabla de datos como una fila tras otra en un solo archivo, una base de datos columnar almacena las columnas en archivos separados, por lo que se pueden indexar y buscar por separado, incluso en diferentes servidores (en un clúster) para mejorar el rendimiento. Como resultado, las bases de datos columnares pueden ser mucho más rápidas para el análisis que una base de datos relacional tradicional, ya que lo concentran en sólo una o unas pocas columnas. A pesar de esta ventaja, este tipo de base también hereda muchos inconvenientes de las bases de datos relacionales, incluyendo el esfuerzo y el tiempo de procesamiento del sistema necesario para mantener las tablas canónicas.

Bases de datos NoSQL

Qué es: Es una base de datos no-relacional que almacena los datos en registros de transacciones en lugar de las tablas.
Fortalezas: Más rápido y más compacto cuando se trata de bases de datos muy grandes, soporta datos no estructurados o estructurados irregularmente, es compatible con el análisis y fácil de distribuir a servidores en paralelo.
Debilidades: La tecnología no está madura, no hay un lenguaje de consulta estándar o herramientas de consulta, no garantiza la consistencia en los resultados de las consultas.

Supongamos ahora que su proyecto se ocupará de un orden de magnitud superior datos, por decir Teras de información, que no están tan estructurados. Por ejemplo, el seguimiento de la logística del inventario en tiempo real o el análisis de cómo los clientes utilizan su sitio web. Con bases de datos convencionales, se podría requerir de grandes tablas multidimensionales en los que la mayor parte de las celdas probablemente estarían vacías, mientras que otras, podrían tener que almacenar varios valores a la vez. Este es el tipo de situación complicada es por la que las bases de datos NoSQL fueron creadas. Estas incluyen bases de datos NoSQL como Hadoop HBase, Hypertable, MongoDB o MarkLogic. Con NoSQL, no hay una tabla real de datos, no hay estructura física de una tabla. Aquí, en cambio, la base de datos consiste en una lista de todos los datos (que puede contener una información con diferente forma cada vez) , que se escriben, haciendo una consulta de búsqueda que lista para saber qué datos se han escrito recientemente en un registro en particular. Es como si se ha creado una enorme tabla que en cada escritura, agrega la información y estira la tabla al terminar la búsqueda en el registro.

Con NoSQL no hay necesidad de una tabla gigante canónica que se almacene en el disco o en la memoria. Los registros individuales no se escriben en una tabla, sino que se almacenan en estructuras de datos complejas en un sólo archivo o documento, como por ejemplo, almacenar la información sobre una publicación de un blog (título, cuerpo de texto, autor, etc.) junto a los comentarios y etiquetas del mismo, ¡todo en un único registro!. Y las copias de la base de datos NoSQL se pueden escribir en varios servidores dentro de un grupo, por lo que el análisis se puede dividir en paralelo. En comparación con las tablas de datos convencionales, NoSQL recorre un camino más pequeño, se realiza mucho más rápido y es más fácil de poner en paralelo. Sin embargo, como su nombre lo indica, NoSQL no ofrece garantías de integridad relacional o consistencia de datos, y en la actualidad no hay lenguaje de consulta estándar que facilite su consulta. Este tipo de bases de datos es más adecuada para el análisis de grandes volúmenes de datos (conocido en la jerga actual, como el famoso Big Data), y especialmente cuando los resultados deben ser entregados en tiempo real.

Por otro lado, tampoco hay soporte generalizado para bases de datos NoSQL, y esto podría ser un problema a la hora de pedir ayuda. Sin embargo, si existen herramientas de software que apoyan el funcionamiento de NoSQL, tales como Hadoop, que divide el trabajo que se realiza en varios servidores en un clúster. Cabe destacar también, que con la llegada del Cloud Computing, hay más proveedores con servidores en “la nube” y una variada oferta de almacenamiento, que hace innecesario adquirir hardware con el fin de hacer un análisis basado en NoSQL.

Consideraciones de gestión a tener en cuenta

Para concluir esta guía, cualesquiera sea la base de datos que elija para su proyecto deberá tener en cuenta que tendrá que adquirir tecnología y desarrollar las habilidades de su personal de TI, es decir, capacitación y entrenamiento. Asegúrese también de que los costos encajen en el contexto de su proyecto empresarial. Recuerde que la tecnología desconocida requiere de tiempo para recibir el veto de los usuarios y también de tiempo para desarrollar las habilidades de su personal de TI. Seguramente su personal de TI sabe cómo lidiar con bases de datos convencionales, pero mucho de ese conocimiento no se transferirá directamente. Una buena idea en este punto es partir con experimentos a pequeña escala o prototipos, para ir adquiriendo experiencia.

Por otro lado, hay que tener en cuenta que los proveedores de bases de datos siempre están trabajando para hacer frente a las limitaciones propias del software y el hardware,  y agregando nuevas funcionalidades para satisfacer las nuevas necesidades de manejo de grandes volúmenes de datos, y quizás ello requiera de cambiar algunas técnicas y prácticas de sus desarrolladores para asimilar e internalizar su uso.

Finalmente, es muy probable que cometa errores. Mientras menos costosos sean, mejor. Por lo que  identificar la mejor tecnología de base de datos para sus proyectos de análisis e inteligencia de negocios, es un buen punto de partida. Y este es el espíritu de esta guía. Buena suerte!.

2014/12/08

SQL SERVER - Nombre de los meses entre intervalos de fechas

Como listar el nombre de los meses entre dos intervalos de tiempo?.
He aquí una manera de lograrlo.
 
DECLARE @StartDate DATETIME
       ,@EndDate DATETIME;
SELECT @StartDate = '20140301' -- March
      ,@EndDate = '20140901'; -- September
SELECT DATENAME(MONTH ,DATEADD(MONTH ,nos.monthnos ,@StartDate)) AS MonthName
FROM   (
           SELECT 1 monthnos UNION SELECT 2 UNION SELECT 3
           UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
           UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
           UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
       ) nos
WHERE  nos.monthnos<= DATEDIFF(MONTH ,@StartDate ,@EndDate);