SQL Server 2008: Sparse Columns!

Una de las mejoras que introduce SQL Server 2008 en cuanto a tipos de datos se refiere es la de una mejor implementación de las denominadas sparse columns, es decir, aquellas que almacenan de manera frecuente valores nulos. Dos son las características fundamentales de las sparse columns en SQL Server 2008:

  • No consumen espacio en disco (vs versiones anteriores).
  • La clave está en el uso del atributo SPARSE en la definición de las columnas.

Para ver el comportamiento de las sparse columns, vamos a partir de un escenario en el que a priori tiene sentido la definición de este tipo de columnas: tablas con un número muy elevado de columnas (por ejemplo, 1000 columnas). Nuestra base de datos (BD) de pruebas tendrá dos tablas, una en la que no se usa el atributo SPARSE en la definición de las columnas, y otra en la que sí se utiliza:

  • Creamos en primer lugar la tabla en la que no utilizamos el atributo SPARSE en la definición de sus columnas.

CREATE TABLE TableWithoutSparseColumns (

   DocID INT IDENTITY, DocName VARCHAR (100), DocType INT,

   c0001 INT NULL, c0002 INT NULL, c0003 INT NULL, c0004 INT NULL, c0005 INT NULL,

….

c0991 INT NULL, c0992 INT NULL, c0993 INT NULL, c0994 INT NULL, c0995 INT NULL,

   c0996 INT NULL, c0997 INT NULL, c0998 INT NULL, c0999 INT NULL,c1000 INT NULL

   );

GO

  • Creamos a continuación la tabla en la que marcamos con el atributo SPARSE sus columnas

CREATE TABLE TableWithSparseColumns (

   DocID INT IDENTITY, DocName VARCHAR (100), DocType INT,

   c0001 INT SPARSE NULL, c0002 INT SPARSE NULL, c0003 INT SPARSE NULL, c0004 INT SPARSE NULL, c0005 INT SPARSE NULL,

….

   c0991 INT SPARSE NULL, c0992 INT SPARSE NULL, c0993 INT SPARSE NULL, c0994 INT SPARSE NULL, c0995 INT SPARSE NULL,

   c0996 INT SPARSE NULL, c0997 INT SPARSE NULL, c0998 INT SPARSE NULL, c0999 INT SPARSE NULL,c1000 INT SPARSE NULL

   );

GO

Una vez creadas las tablas, lo primero que vamos a comprobar es que efectivamente el espacio ocupado por la tabla que no utiliza el atributo SPARSE en la definición de las columnas ocupa más espacio que la tabla que si las utiliza. Para ello:

  • Insertamos datos en las dos tablas:

INSERT INTO TableWithSparseColumns (DocName, Doctype) VALUES (‘aaaa’, 1);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0945) VALUES (‘bbbb’, 2, 46);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0334) VALUES (‘cccc’, 3, 44);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0233, c0234) VALUES (‘dddd’, 4, 12, 34);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0233, c0234,c0235,c0236) VALUES (‘eeee’, 4, 12, 34, 46, 66);

GO

 

INSERT INTO TableWithoutSparseColumns (DocName, Doctype) VALUES (‘aaaa’, 1);

INSERT INTO TableWithoutSparseColumns (DocName, Doctype, c0945) VALUES (‘bbbb’, 2, 46);

INSERT INTO TableWithoutSparseColumns (DocName, Doctype, c0334) VALUES (‘cccc’, 3, 44);

INSERT INTO TableWithoutSparseColumns (DocName, Doctype, c0233, c0234) VALUES (‘dddd’, 4, 12, 34);

INSERT INTO TableWithoutSparseColumns (DocName, Doctype, c0233, c0234,c0235,c0236) VALUES (‘eeee’, 4, 12, 34, 46, 66);

GO

  • Comprobamos el espacio que ocupan los datos guardados mediante el siguiente script:

SELECT [avg_record_size_in_bytes], [page_count] FROM sys.dm_db_index_physical_stats (

   DB_ID (‘SPARSE_DB’), OBJECT_ID (‘TableWithoutSparseColumns’), NULL, NULL, ‘DETAILED’);

 

SELECT [avg_record_size_in_bytes], [page_count] FROM sys.dm_db_index_physical_stats (

   DB_ID (‘SPARSE_DB’), OBJECT_ID (‘TableWithSparseColumns’), NULL, NULL, ‘DETAILED’);

GO

El resultado que se obtiene es el esperado: la tabla en la que hemos utilizado el atributo SPARSE ocupa mucho menos espacios en bytes y número de páginas que la tabla en la que no se ha utilizado.

image

Si hacemos un SELECT de algunas de las columnas con valores nulos, vemos en cambio que ambas tablas almacenan el valor nulo. Sin embargo, en el caso de la tabla en la que se ha usado el atributo SPARSE, estos valores nulos no ocupan espacio en disco.

image

Finalmente, otra de las novedades que viene con las sparse columns de SQL Server 2008 es la posibilidad de marcar todas las columnas marcadas con el atributo SPARSE con el atributo XML COLUMN_SET, lo que nos permitirá devolver de manera sencilla los valores no nulos que tengamos insertados en la tabla. La definición de la tabla sería la siguiente:

drop TABLE TableWithSParseColumns

 

CREATE TABLE TableWithSparseColumns (

   DocID INT IDENTITY, DocName VARCHAR (100), DocType INT,

   c0001 INT SPARSE NULL, c0002 INT SPARSE NULL, c0003 INT SPARSE NULL, c0004 INT SPARSE NULL, c0005 INT SPARSE NULL,

   c0991 INT SPARSE NULL, c0992 INT SPARSE NULL, c0993 INT SPARSE NULL, c0994 INT SPARSE NULL, c0995 INT SPARSE NULL,

   c0996 INT SPARSE NULL, c0997 INT SPARSE NULL, c0998 INT SPARSE NULL, c0999 INT SPARSE NULL,c1000 INT SPARSE NULL,

   SparseColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);

GO

Para comprobar la utilidad de XML COLUMN_SET FOR ALL_SPARSE_COLUMNS:

  • Insertamos datos en la tabla.

INSERT INTO TableWithSparseColumns (DocName, Doctype) VALUES (‘aaaa’, 1);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0945) VALUES (‘bbbb’, 2, 46);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0334) VALUES (‘cccc’, 3, 44);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0233, c0234) VALUES (‘dddd’, 4, 12, 34);

INSERT INTO TableWithSparseColumns (DocName, Doctype, c0233, c0234,c0235,c0236) VALUES (‘eeee’, 4, 12, 34, 46, 66);

GO

  • Ejecutamos la siguiente sentencia T-SQL.

select * from TableWithSparseColumns

Y este es el resultado obtenido:

image

Y hasta aquí llega lo que os quería contar sobre las SPARSE COLUMNS en SQL Server 2008. Espero que el post os haya resultado interesante.

SharePoint, Silverlight, and Virtual Earth: SharePoint Silverlight Map Control!

Aunque ya sabía y había visto ejemplos de que con estas tres tecnologías “hermanas” se pueden conseguir resultados espectaculares, hacía falta disponer de un proyecto de referencia que demostrase su uso conjunto…y como no, ese proyecto existe y se encuentra alojado en Codeplex. Se trata del SharePoint Silverlight Map Control y consiste en un control de Silverlight que puede ser hosteado en SharePoint (versiones on-premise u online) que muestra un mapa de Virtual Earth completados con datos de una lista de SharePoint (los datos se obtienen a través de los servicios web de SharePoint). La verdad es que el control tiene una pinta estupenda y surge para integrar de manera sencilla Virtual Earth en un sitio de SharePoint. En este caso Silverlight es la plataforma de aplicaciones usada para llamar los servicios web de SharePoint, y colocar dichos datos, mediante JavaScrip, en el mapa de Virtual Earth.

silverlight

Podéis bajaros el código del control de este enlace.

WSS 3.0 & MOSS: SharePoint Reviews!

A través del blog de Joel Oleson acabo de descubrir un nuevo portal de SharePoint realmente interesante en cuanto al enfoque con el que se ha concebido. Se trata de SharePoint Reviews, un directorio de soluciones SharePoint con revisiones de expertos.

image

Tal y como nos comenta Joel en su blog, SharePoint Reviews se trata de un sitio independiente cuyo objetivo es ayudar a resolver problemáticas que surjan en torno a SharePoint, falta de herramientas y soluciones, etc. Para ello, SharePoint Reviews arranca con una base de unas 200 web parts y soluciones de SharePoint revisadas y clasificadas por categorías.

Sprintometer: Aplicación para gestión, métricas y seguimiento de proyectos ágiles!

No suelo hablar mucho sobre temas relacionados con la gestión de proyectos, pero en esta ocasión voy a hacer una excepción para comentaros una interesante aplicación que he descubierto a través del blog de Juan Palacio. Se trata de Sprintometer, una aplicación pensada para llevar a cabo la gestión, métrica y seguimiento de proyectos ágiles de una manera sencilla. Además, esta aplicación es gratuita y muy fácil de instalar (un simple doble clic) y utilizar:

  • El menú de usuario sigue un estilo Office 2007.
  • Desde es menú podremos crear un nuevo proyecto (XP o SCRUM) o abrir uno existente.
  • Podremos añadir cuentas de usuario para utilizar la aplicación.

image

Dentro del archivo zip descargable os encontraréis con el archivo de aplicación, un manual de uso y dos demos. Una de SCRUM y otra de XP, que podremos abrir para ver que pinta tiene la herramienta:

image image

 

Tal y como comenta Juan Palacio en su blog, la herramienta permite:

  • Registrar las historias de usuario (o funcionalidades…), las tareas, estimaciones y su asignación a las personas del equipo.
  • Llevar el seguimiento diario, generar gráficos burn down, exportar los datos a Excel, etc. Los datos de cada proyecto se pueden guardar en un fichero local, o en un servidor de base de datos que los autores del programa han puesto en sprintometer.com.

Referencias:

Microsoft Online Services (MOS): Disponible de manera (casi) global (I)!

Microsoft acaba de anunciar la disponibilidad global de Microsoft Online Services o MOS. Como sabéis, MOS comprende una serie de servicios online hosteados en data centers que Microsoft tiene distribuidos de manera global y que habilitan el uso de estos servicios de manera online (residen en la nube), que por lo tanto no requiere instalación en tu casa y que no implica coste asociado (se paga por el uso). Me imagino que ya hayáis oído hablar de estas ideas en más de una ocasión, se trata de lo que en terminología Microsoft se conoce como S + S (Software + Services), y en en general como SaaS (Software as a service).

En el caso de Microsoft, ofrece la posibilidad de usar varios productos online (en un futuro se irán añadiendo más servicios al catálogo):

  • Exchange Online para tema de correo electrónico y mensajería.
  • SharePoint Online para temas de comunicación, colaboración y centralización de la información.
  • Dynamics CRM Online para todo el tema de la gestión de las relaciones con los clientes.
  • Microsoft Office Live Meeting y Microsoft Office Communications Online para tema de Comunicación, mensajería, etc.

image

En mi opinión, las ventajas de este modelo son claras:

  • Es Microsoft quien realiza y parametriza la instalación de estos productos en función de los requerimientos del cliente.
  • Es Microsoft quien se encarga de la gestión y administración de las aplicaciones, cumplimiento de la LOPD, etc.
  • El cliente no instala nada en su casa, y además puede acceder a las aplicaciones desde cualquier lugar  y en cualquier momento…sólo necesita una conexión a Internet.

Si queréis probar MOS, podéis acceder a las versiones de prueba desde este enlace (30 días de validez). Yo me acabo de dar de alta (se necesita una cuenta de Windows Live,no escoger como país Spain…coger U.S.A :-(, tener cuidado con la validación de los datos, poner una dirección de U.S.A y listo…) y aquí podéis ver que pinta tiene MOS y como se configura (se necesitan 24 horas para que se active el alta en MOSS:

  • Una vez que se recibe la activación de MOS, nos validamos con nuestra Windows Live ID para acceder al portal de gestión de nuestros servicios.
  • Una vez validados, accedemos al portal en la que podemos ver que servicios tenemos suscritos.
  • Nos vamos a la pestaña de suscripciones y en la sección Actions, seleccionamos Get Credentials. Pulsamos sobre la flechita verde para que se ejecute la acción.
image image

image

  • En la siguiente pantalla se muestran las credenciales para la cuenta de administración de nuestro sitio MOSS. En esa pantalla se nos avisa de que tendremos que cambiar la contraseña.
  • Nos vamos a la página de administración. Aquí tendremos que especificar las credenciales que acabamos de obtener.
  • En la siguiente pantalla realizamos el cambio de contraseña.
image image

image

  • En la siguiente pantalla, simplemente pulsamos Continue (se nos notifica de que el cambio de contraseña ha sido exitoso.
  • Por fin aparecemos a la pantalla de la Administración Central (recuerda mucho a la de SharePoint). En la pestaña Home de la misma tendremos un listado de tareas pendientes: añadir nuestro dominio, crear una colección de sitios de SharePoint y añadir un usuario…cool! Vamos por las dos últimas a ver que pasa…También tendremos una zona de acciones, el estado de nuestros sevicios o información de nuestra cuenta.
  • Si pulsamos sobre la tares Create a Site Collection, se muestra una intuitiva pantalla para crearlo. En ella especificaremos el nombre del Site Collection, su descripción, el tipo de plantilla (son las propias de colaboración: Team Site, Blank Site, Document Workspace,  Wiki Site, Blog, y Basic Meeting Workspace), la dirección de correo a la que se enviarán las solicitudes de acceso, así como el espacio que va a ocupar (máximo de 5 GB para todas las colecciones de sitios…). Pulsamos Create.
  • A continuación aparece una pantalla que nos informa de que se ha creado la colección de sitios con éxito. Pulsamos Finish.
image image

image

  • Al hacerlo, somos redirigidos a la pestaña Service Settings, sección SharePoint Online donde vemos un listado de las colecciones de sitios de SharePoint que tenemos creado y un resumen de sus características, así como un acceso a su administración.
  • Vamos al sitio a ver que pinta tiene (por cierto, se le puede asociar un certificado si lo tenemos) tras especificar las credenciales de acceso (las mismas que obtuvimos antes)…pues nada, un SharePoint como una catedral :-)…y con la típica administración de una colección de sitios.
image image

image

Después de esta demostración de MOS, comentaros que tenéis más información sobre MOS en este otro enlace (y por cortesía de Paul Thurrott). Me parece interesante la parte del post en la que habla de los precios de MOS:

  • Se pueden adquirir servicios de manera individual y por usuario:
    • Exchange supone 10 $ por mes y por usuario.
    • SharePoint supone 7.25 $ por mes y usuario.
    • Office Communicactions supone 2.50 $ por mes y usuario.
    • Office Live Meeting supone 4.50 $ por mes y usuario.
  • O bien se puede adquirir toda la suite Business Productivity Online por 15 $ al mes y usuario.
  • Otra posibilidad más económica es optar por estos servicios en modalidad Deskless.

Finalmente, me gustaría comentar que no sólo Microsoft ofrece este tipo de servicios, sino que partners de Microsoft también lo hacen siguiendo la misma filosofía S+S. Un ejemplo  ese el siguiente: http://www.sharepointonline.net/. Y hasta aquí llega mi primera experiencia con MOS. Espero contaros más cosas en próximas entregas.

SSRS 2008: Creación y publicación de informes (II)!

Siguiendo con la serie de posts sobre SQL Server Reporting Services 2008 (SSRS) iniciada en la parte I de la serie, en esta ocasión vamos a ver como podemos crear informes con el nuevo Report Builder 2.0. La verdad es que la nueva versión de Report Builder es espectacular, los miembros del equipo de Reporting Services han hecho un gran trabajo en esta nueva versión como podréis comprobar. Empecemos.

Creación de informes con Report Builder 2.0

Para poder utilizar Report Builder 2.0, os lo tendréis que bajar de la página correspondiente (más información aquí) puesto que no forma parte de la RTM de SQL Server 2008, sino que se liberó más tarde. Por este motivo, el Report Builder 2.0 no se lanzará cuando ejecutemos la opción de Report Builder desde el Report Manager o desde SharePoint. Nada más ejecutar Report Builder 2.0, lo primero que nos llama la atención es el menú que nos ofrece al más puro estilo de Office 2007:

  • La primera Ribbon está compuesta por todas las acciones y funcionalidades destinadas al diseño de informes. Desde aquí también podremos acceder a la ventana Report Data que contiene los datos de nuestra fuente de datos y variables globales que podemos utilizar.
  • La segunda Ribbon contiene los distintos tipos de regiones de datos que podemos usar para construir el informe: Table, Matrix, Chart, Gauge (una de las grandes novedades de SSRS 2008, disponible gracias a que Microsoft a comprado estos controles a Dundas), etc.
  • Finalmente, la tercer Ribbon nos permite personalizar el diseñador en cuanto a que ventanas y funcionalidades tendremos disponibles para diseñar el informe: Report Data, Properties, Grouping y Ruler.
image image image

Una vez que hemos realizado el recorrido por las distintas opciones del menú de Report, vamos a ver como construir un informe con Report Builder 2.0:

  • Hacemos clic sobre la imagen de Tabla o Matriz en la superficie de diseño para diseñar un informe de este tipo.
  • Se abrirá un asistente que en primer lugar se conecta con el Report Server en busca de fuentes de datos disponibles. Como en este caso no tenemos ninguna, pulsamos el botón New.
  • En la nueva ventana que se abre simplemente especificamos el nombre de la fuente de datos y el tipo de proveedor. Aquí la novedad es que se incrementa el número de proveedores soportados.
  • Pulsamos el botón Build para construir la cadena de conexión a la BD.
image image image
  • En la siguiente ventana simplemente especificamos el nombre del servidor y la BD a utilizar.
  • Una vez creada la fuente de datos, pulsamos Next.
  • en la siguiente ventana tenemos que configurar la información que vamos a utilizar de nuestra fuente de datos. Lo podremos hacer visualmente o bien especificando la correspondiente consulta T-SQL. En nuestro caso elegimos la última opción.
image image image
  • Especificamos la consulta de datos (la misma que en la parte I de la serie sobre SSRS 2008) y la probamos. Pulsamos Next.
  • En la siguiente tabla, no tenemos más que arrastrar campos a cada una de las secciones típicas de un informe (filas, columnas y detalle) para realizar su modelado.
image image image
  • Elegimos la configuración de informe a crear: incluir subtotales o no, Blocked, Stepped, Expandir/Contraer Grupos. Pulsamos Next.
  • Elegimos el estilo del informe y pulsamos Finish. Veremos que el informe se muestra en vista de diseño en el diseñador de Report Builder 2.0.
image image image
  • Para visualizar el informe, basta con que pulsemos la opción Run. En la propia pantalla de visualización del informe podremos apreciar otros cambios en cuanto a que:
    • Podemos hacer Zoom del Informe.
    • Podemos refrescar la ejecución del informe.
    • Podemos configurar las settings de impresión del informe.
    • Podemos ver como quedará el informe en el layout de impresión (gran utilidad).
image image image
  • Una de las opciones clásicas del menú de ejecución de informes es la exportación del mismo a distintos formatos. En este caso, como novedad se ha añadido la posibilidad de exportar a Microsoft Word.
  • Sin más, guardamos el informe en el Report Server.
image image image

Finalmente, comprobamos que el informe está accesible desde el Report Manager (no ha cambiado con SSRS 2008) y se ejecuta sin problemas.

image image

Y hasta aquí llega el segundo post de la serie sobre SSRS 2008. Espero que os haya resultado interesante.

De Silverlight 2.0 a Silverlight 3.0!

Aunque en el pasado PDC 2008 ya se habló de que el año que viene tendríamos una nueva “major release” de Silverlight, leyendo el blog de Scott Guthrie podemos conocer de primera mano el presente de Silverlight con la versión 2.0 y lo que nos depara el futuro con la versión 3.0. Si nos centramos en esta última, estas son algunas de las novedades que traerá Silverlight 3.0:

  • Grandes mejora en el soporte de contenidos multimedia (incluyendo soporte para vídeo H.264).
  • Grandes mejoras en el soporte gráfico: soporte 3D y de aceleración GPU por Hardware).
  • Mejoras en el desarrollo de aplicaciones: nuevos controles y soporte enriquecido para el binding de datos.

Por supuesto, las nuevas versiones de Visual Studio y Visual Web Developer Express facilitarán enormemente el trabajo con Silverlight a través de un nuevo e intuitivo diseñador:

vs