SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESCLa gracia de la consulta es justamente esa, listar las ultimas consultas SQL que se han ejecutado.
Bienvenidos! En mi blog comparto mis experiencias y conocimientos relacionados con las TIC's, lenguajes de programación, bases de datos...
2015/07/09
SQL - Conocer las ultimas consultas ejecutadas
El siguiente script permite saber que consultas se acaban de ejecutar en la base de datos.
SQL - Vaciar los registros de distintas tablas en una base de datos
Vamos a recorrer todas las tablas de nuestra base de datos y eliminar sus registros. Para ello, utilizaremos la información que nos brinda information_schema.tables. Es muy importante que limitemos de alguna forma las tablas que se van a vaciar, por ejemplo, si las tablas de nuestra aplicación empiezan por "TBL_" podríamos especificar una condición WHERE que filtre por aquellas tablas que empiezan con ese nombre.
USE DB_PRUEBA DECLARE @SQL_DELETE VARCHAR(255), @NOM_TABLA VARCHAR(255) DECLARE CURSOR_DELETE CURSOR FOR SELECT 'DELETE FROM ' + TABLE_SCHEMA + '.' + TABLE_NAME, TABLE_SCHEMA + '.' + TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME NOT LIKE 'sysdiagrams' ORDER BY TABLE_NAME OPEN CURSOR_DELETE FETCH NEXT FROM CURSOR_DELETE INTO @SQL_DELETE, @NOM_TABLA WHILE @@FETCH_STATUS = 0 BEGIN EXEC (@SQL_DELETE) FETCH NEXT FROM CURSOR_DELETE INTO @SQL_DELETE, @NOM_TABLA END CLOSE CURSOR_DELETE DEALLOCATE CURSOR_DELETE
2015/07/07
8 razones de porqué los niños no deberían usar dispositivos portátiles
¿Su hijo a menudo juega con laptops, tablets o su teléfono inteligente? Tal vez quieras repensar eso. Una investigación mostró que exponer a los niños pequeños a estas tecnologías realmente perjudica los factores críticos para el desarrollo, comportamiento y aprendizaje. ¿Por qué tenemos que estar preocupados?
Las Tabletas impactan en el crecimiento cerebral
Entre el nacimiento y la edad, el cerebro se triplica en tamaño y continúa desarrollando rápidamente hasta la edad de 21 años. Esto requiere una amplia variedad de estimulación que no implique la exposición a las tecnologías antes mencionadas. En algunos casos, estas tecnologías causan retrasos cognitivos, aprendizaje deteriorado e impulsividad creciente.
Retraso en el desarrollo social
Niños pequeños que usan cosas como iPads a menudo han retrasado el desarrollo de habilidades sociales como logro académico y hablando.
Obesidad
Ésta debería ser una obviedad. 1 de cada 4 niños canadienses y 1 de cada 3 niños estadounidenses tienen sobrepeso u obesidad. Estos dispositivos suelen hacen que nuestros hijos vivan vidas más sedentarias. Eso equivale a un aumento de peso.
Privación de sueño
También no es de extrañar. No es raro que los niños se queden despiertos hasta muy tarde jugando juegos de computadora.
Demencia digital
El contenido multimedia de alta velocidad contribuye a los déficits de atención y concentración disminuida. Esto es causado por “poda cerebral” de circuitos neuronales en la corteza frontal.
Riesgo creciente de adicción
Estas tecnologías separan a menudo los padres de los niños. Se ha demostrado que cuando el apego parental está ausente, las posibilidades de adicción crecen, particularmente a las tecnologías que son adictos ya.
Exposición a la radiación.
La OMS clasifica los teléfonos celulares como un posible carcinógeno debido a la radiación que emiten. En 2013, el Dr. Anthony Miller de School of Public Health de la Universidad de Toronto recomienda que basada en la investigación, la exposición de radiofrecuencia debe ser reclasificada como probablemente carcinógeno.
Tensión ocular
Pasar demasiado tiempo frente a las pantallas puede causar tensión en los ojos, pero a los niños especialmente. Los niños pueden desarrollar síndrome visual informático, que es un tipo de cansancio ocular. Si tus hijos usan estas tecnologías, es mejor restringirlos a 30 minutos a una hora.
2015/06/01
SQL Server - Utilizando Arrays de parametros en Procedimientos Almacenados
Una característica muy solicitada por los desarrolladores en SQL Server es la de poder pasar varios valores a un procedimiento almacenado en forma de array. Desde hace mucho tiempo utilizo una función de SQL que me permitía trabajar con Arrays a través de una cadena de texto delimitada por comas, normalmente los utilizaba en procesos de selección como en el ejemplo siguiente:
La definición de la función en Transact-Sql es la siguiente:
CREATE PROCEDURE SP_GetPerson @param VARCHAR(MAX) AS SELECT p.BusinessEntityID, p.FirstName, p.LastName FROM Person.Person p WHERE p.BusinessEntityID IN (SELECT * FROM [dbo].[ArrayToTable] (@param)) ORDER BY p.BusinessEntityID ASCEn este procedimiento el parametro @param recibe una cadena delimitada por comas con los valores '1,2,3,4,5', el SP_GetPerson devuelve todas las personas con estos códigos, la definición del parametro '@param' se realiza con varchar(MAX), para que la cadena pueda almacenar la mayor cantidad de códigos posible, sin embargo varchar(MAX) tiene la limitación de 8000 caracteres y en algunas situaciones se nos puede quedar pequeño.
La definición de la función en Transact-Sql es la siguiente:
CREATE FUNCTION [dbo].[ArrayToTable] ( @delimStr NVARCHAR(MAX) ) RETURNS @StrValTable TABLE (StrVal VARCHAR(20)) AS BEGIN DECLARE @strlist NVARCHAR(MAX), @pos INT, @delim CHAR, @lstr NVARCHAR(MAX) SET @strlist = ISNULL(@delimStr, '') SET @delim = ',' WHILE ((LEN(@strlist) > 0) AND (@strlist <> '')) BEGIN SET @pos = CHARINDEX(@delim, @strlist) IF @pos > 0 BEGIN SET @lstr = SUBSTRING(@strlist, 1, @pos -1) SET @strlist = LTRIM(SUBSTRING(@strlist, CHARINDEX(@delim, @strlist) + 1, 8000)) END ELSE BEGIN SET @lstr = @strlist SET @strlist = '' END INSERT @StrValTable VALUES ( @lstr ) END RETURN END GOBásicamente lo que hace es crear una tabla temporal conformada por un campo y cada valor en un único registro, de esta forma la consulta de arriba puede ser ejecutada sin problemas, hay que tener en cuenta que el uso de tablas temporales puede reducir el rendimiento, sin embargo es mejor esto a llamar al SP muchas veces. Podriamos tambien optar por pasar los arrays con XML y readaptar la función.
2015/05/16
SQL Server - Convertir o separar por comas una cadena dividido en filas
La siguiente función convierte y separa comas una cadena dividido en filas.
DECLARE @nombre_db AS VARCHAR(50) CREATE FUNCTION fn_SplitString ( @Str NVARCHAR(MAX), @Separator CHAR(1) ) RETURNS @ResultOutput TABLE(Id INT IDENTITY(1, 1), Result NVARCHAR(100)) AS BEGIN DECLARE @Splitted_string NVARCHAR(4000) DECLARE @Pos INT DECLARE @NextPos INT SET @Str = @Str + @Separator SET @Pos = CHARINDEX(@Separator, @Str) WHILE (@pos <> 0) BEGIN SET @Splitted_string = SUBSTRING(@Str, 1, @Pos - 1) SET @Str = SUBSTRING(@Str, @pos + 1, LEN(@Str)) SET @pos = CHARINDEX(@Separator, @Str) INSERT INTO @ResultOutput VALUES ( @Splitted_string ) END RETURN ENDUtilizando la función fn_SplitString en consulta:
--Separar una cadena por comas SELECT Result FROM fn_SplitString('Split,string,example,in,sql,server', ',') --Separar una cadena por símbolo de canalización SELECT Result FROM fn_SplitString('Split|string|example|in|sql|server', '|') --Separar una cadena por el espacio SELECT Result FROM fn_SplitString('Split string example in sql server', ' ')
2015/05/02
SQL Server - Backup a todas las bases de datos
Aqui les dejo el código para hacer backup de todas sus bases de datos, solo tienen que ponerlo en un trabajo(jobs) para que se ejecute periódicamente.
DECLARE @nombre_db AS VARCHAR(50) DECLARE tablas_cursor CURSOR FOR SELECT NAME FROM sys.databases WHERE NAME NOT IN ('master' ,'tempdb' ,'model' ,'msdb') OPEN tablas_cursor FETCH NEXT FROM tablas_cursor INTO @nombre_db WHILE @@fetch_status=0 BEGIN DECLARE @nombre VARCHAR(150) SET @nombre = CONVERT(VARCHAR(9) ,GETDATE() ,6) SET @nombre = 'D:\Backup\'+@nombre+'-' +@nombre_db+'.bak' SET @nombre = REPLACE(@nombre ,' ' ,'') BACKUP DATABASE @nombre_db TO DISK=@nombre WITH COMPRESSION FETCH NEXT FROM tablas_cursor INTO @nombre_db END CLOSE tablas_cursor DEALLOCATE tablas_cursor
2015/02/09
¿Cómo de hackeable eres? Calcula tu puntuación 'Pwned'
Curioso artículo en el Huffington Post en el que se presenta un pequeño cuestionario con el que los usuarios pueden evaluar el riesgo de ser hackeados. Lo hemos adaptado un poquito pero más o menos puedes obtener una puntuación (no excesivamente científica) para ver las posibilidades de ser jodido pwned :
1.- ¿Qué tan fuertes son sus contraseñas? (10 puntos): A menudo las personas cometen errores básicos con sus contraseñas, como elegir aquellas que son fácilmente adivinables/crackeables (por ej: 'password123'), mantener las contraseñas por defecto, la reutilización de la misma contraseña en varias cuentas, etc. Puntuate a ti mismo:
+2 si escribes contraseñas complejas (caracteres, combinación de letras, números y símbolos)
+4 si utilizas contraseñas únicas para cada cuenta
+4 si usas autenticación de dos factores (cuando esté disponible)
2.- ¿Haces copia de seguridad de tus datos? (10 puntos): Los ciberdelincuentes usan cada vez más "ransomware" para victimizar a los consumidores. Dado que estos ataques hacen que los archivos personales (documentos, fotos, vídeos, música, etc.) sean inaccesibles y los PCs inservibles, la mejor manera de protegerse contra ello es mediante copias de seguridad periódicas de los datos a un disco duro externo, unidad flash o una cuenta en la nube. Elige una de estas puntuaciones:
+10 si haces copias de seguridad de los datos al menos una vez a la semana
+5 si haces copias de seguridad de los datos al menos una vez al mes
+1 si haces copias de seguridad con otra periodicidad mayor
+0 si no haces copias de seguridad
3.- ¿Qué sistema operativo utilizas? (5 puntos): Debido a que la mayoría de las personas en todo el mundo utilizan PCs basados en Windows en lugar de OS X o sistemas basados en Linux, los ciber-delincuentes suelen escribir malware diseñado específicamente para este sistema operativo. Como resultado, los usuarios que usan Macs o dispositivos Linux estarán generalmente menos expuestos (aunque no significa que sean inmunes) al malware que los usuarios de Windows. Puntuate a ti mismo:
+5 Si utilizas un dispositivo con Linux
+3 Si utilizas un dispositivo con OS X
+0 Si utilizas un dispositivo con Windows
4.- ¿Utilizas antivirus? (5 puntos): Es cierto, un antivirus no es una bala de plata - y va a "tragarse" una gran cantidad de malware peligroso. Pero los usuarios todavía tenemos que tenerlo y mantenerlo actualizado, porque sin AV todavía existe un mayor riesgo de infección. Puntuate a ti mismo:
+5 si utilizas un producto antivirus en todos sus dispositivos (ya sea Windows, Mac o Linux) con firewall personal
+3 si utilizas un producto antivirus en todos sus dispositivos (ya sea Windows, Mac o Linux) sin firewall personal
+0 si no utilizas antivirus
5.- ¿Cómo navegas por Internet? (10 puntos): la mayoría de los ataques vienen ahora a través del navegador de Internet (descargas drive-by, cross-site scripting, man-in-the-browser, etc.), así que es importante que los usuarios naveguen por la web con cuidado. Eso significa:
+3 si usas plugins que bloqueen scripts (ScriptSafe, NoScript, Adblock Plus, etc.)
+2 si nunca haces clic en los anuncios pop-up o alertas
+2 si nunca visitas una página de registro de un enlace enviado por correo electrónico
+3 si usas navegadores separados para ir de compras y navegar por la web
6.- ¿Utilizas un PC dedicado para acceder al banco? (10 puntos) - En algún momento, casi todos los ordenadores que navegan por la web se infectan con malware y, en el peor de los casos, se trata de un troyano bancario. Si los usuarios deben proteger una cosa, esa es su cuenta bancaria online. La mejor manera de hacer esto es tener un equipo dedicado (como un netbook barato o Chromebook) que sólo se utilice para acceder online al banco. Puntuate a ti mismo:
+10 si tienes un portátil dedicado que sólo utilizas para la banca en línea
+0 si no
7.- ¿Utilizas redes Wi-Fi públicas? (10 puntos): Si usas WiFis públicas estás pidiendo a gritos ser hackeado. Hay una serie de herramientas de hacking gratuitas o de bajo coste que hacen que sea fácil para casi cualquier persona hackear una conexión Wi-Fi abierta. Puntuate a ti mismo:
+0 si utilizas WiFi públicas por lo menos una vez al año
+10 Si nunca las usas, 10.
-5 Si nunca usas WiFi públicas pero utilizas WiFi protegida por contraseña en tu casa y tus vecinos tienen cobertura
8.- ¿Visitas sitios peligrosos? (10 puntos): Esto no es un juicio personal, pero si frecuentas sitios web para adultos o sitios de intercambio de archivos donde los usuarios comparten películas y música pirateadas, estás aumentando el potencial de exponerte. Puntuate a ti mismo:
+0 si visitas estos sitios, 0
+10 si nunca lo haces
¿El resultado?
A menos que obtuvieras 60 puntos o más, no estás seguro en absoluto y es el momento de cambiar tus costumbres.
Y si puntuaste 35 o menos, ten cuidado porque eres un blanco muy fácil para los hackers y lo único que te mantiene a salvo es pura suerte. De hecho, es probable que ya puedas haber sido comprometido de una manera u otra, y que lo sepas o no.
Referencia: http://www.hackplayers.com/
1.- ¿Qué tan fuertes son sus contraseñas? (10 puntos): A menudo las personas cometen errores básicos con sus contraseñas, como elegir aquellas que son fácilmente adivinables/crackeables (por ej: 'password123'), mantener las contraseñas por defecto, la reutilización de la misma contraseña en varias cuentas, etc. Puntuate a ti mismo:
+2 si escribes contraseñas complejas (caracteres, combinación de letras, números y símbolos)
+4 si utilizas contraseñas únicas para cada cuenta
+4 si usas autenticación de dos factores (cuando esté disponible)
2.- ¿Haces copia de seguridad de tus datos? (10 puntos): Los ciberdelincuentes usan cada vez más "ransomware" para victimizar a los consumidores. Dado que estos ataques hacen que los archivos personales (documentos, fotos, vídeos, música, etc.) sean inaccesibles y los PCs inservibles, la mejor manera de protegerse contra ello es mediante copias de seguridad periódicas de los datos a un disco duro externo, unidad flash o una cuenta en la nube. Elige una de estas puntuaciones:
+10 si haces copias de seguridad de los datos al menos una vez a la semana
+5 si haces copias de seguridad de los datos al menos una vez al mes
+1 si haces copias de seguridad con otra periodicidad mayor
+0 si no haces copias de seguridad
3.- ¿Qué sistema operativo utilizas? (5 puntos): Debido a que la mayoría de las personas en todo el mundo utilizan PCs basados en Windows en lugar de OS X o sistemas basados en Linux, los ciber-delincuentes suelen escribir malware diseñado específicamente para este sistema operativo. Como resultado, los usuarios que usan Macs o dispositivos Linux estarán generalmente menos expuestos (aunque no significa que sean inmunes) al malware que los usuarios de Windows. Puntuate a ti mismo:
+5 Si utilizas un dispositivo con Linux
+3 Si utilizas un dispositivo con OS X
+0 Si utilizas un dispositivo con Windows
4.- ¿Utilizas antivirus? (5 puntos): Es cierto, un antivirus no es una bala de plata - y va a "tragarse" una gran cantidad de malware peligroso. Pero los usuarios todavía tenemos que tenerlo y mantenerlo actualizado, porque sin AV todavía existe un mayor riesgo de infección. Puntuate a ti mismo:
+5 si utilizas un producto antivirus en todos sus dispositivos (ya sea Windows, Mac o Linux) con firewall personal
+3 si utilizas un producto antivirus en todos sus dispositivos (ya sea Windows, Mac o Linux) sin firewall personal
+0 si no utilizas antivirus
5.- ¿Cómo navegas por Internet? (10 puntos): la mayoría de los ataques vienen ahora a través del navegador de Internet (descargas drive-by, cross-site scripting, man-in-the-browser, etc.), así que es importante que los usuarios naveguen por la web con cuidado. Eso significa:
+3 si usas plugins que bloqueen scripts (ScriptSafe, NoScript, Adblock Plus, etc.)
+2 si nunca haces clic en los anuncios pop-up o alertas
+2 si nunca visitas una página de registro de un enlace enviado por correo electrónico
+3 si usas navegadores separados para ir de compras y navegar por la web
6.- ¿Utilizas un PC dedicado para acceder al banco? (10 puntos) - En algún momento, casi todos los ordenadores que navegan por la web se infectan con malware y, en el peor de los casos, se trata de un troyano bancario. Si los usuarios deben proteger una cosa, esa es su cuenta bancaria online. La mejor manera de hacer esto es tener un equipo dedicado (como un netbook barato o Chromebook) que sólo se utilice para acceder online al banco. Puntuate a ti mismo:
+10 si tienes un portátil dedicado que sólo utilizas para la banca en línea
+0 si no
7.- ¿Utilizas redes Wi-Fi públicas? (10 puntos): Si usas WiFis públicas estás pidiendo a gritos ser hackeado. Hay una serie de herramientas de hacking gratuitas o de bajo coste que hacen que sea fácil para casi cualquier persona hackear una conexión Wi-Fi abierta. Puntuate a ti mismo:
+0 si utilizas WiFi públicas por lo menos una vez al año
+10 Si nunca las usas, 10.
-5 Si nunca usas WiFi públicas pero utilizas WiFi protegida por contraseña en tu casa y tus vecinos tienen cobertura
8.- ¿Visitas sitios peligrosos? (10 puntos): Esto no es un juicio personal, pero si frecuentas sitios web para adultos o sitios de intercambio de archivos donde los usuarios comparten películas y música pirateadas, estás aumentando el potencial de exponerte. Puntuate a ti mismo:
+0 si visitas estos sitios, 0
+10 si nunca lo haces
¿El resultado?
A menos que obtuvieras 60 puntos o más, no estás seguro en absoluto y es el momento de cambiar tus costumbres.
Y si puntuaste 35 o menos, ten cuidado porque eres un blanco muy fácil para los hackers y lo único que te mantiene a salvo es pura suerte. De hecho, es probable que ya puedas haber sido comprometido de una manera u otra, y que lo sepas o no.
Referencia: http://www.hackplayers.com/
2015/01/08
SQL SERVER - Encontrar tablas creadas o modificadas en la última semana
El siguiente Script SQL muestra una manera de identificar las tablas que se crearon o modificaron en la base de datos en la ultima semana.
SELECT o.name AS [Object_Name] ,s.name [Schema_Name] ,o.type_desc [Description] ,o.create_date [Creation_Date] ,o.modify_date [Modified_Date] FROM sys.all_objects o LEFT OUTER JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE create_date>(GETDATE()- 7) OR modify_date>(GETDATE()- 7)
Como puede ver, la consulta se puede agregar a un Job de SQL Server y podemos enviar el mismo como un correo electrónico al DBA o equipo de seguridad de forma automática.
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.
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);
Suscribirse a:
Entradas (Atom)