SQL Server 2008: renovada gestión de datos

Hace tiempo que SQL Server dejó de ser el hermano «pobre» dentro de la familia de los RDBMS comerciales, tanto por funcionalidad como por prestaciones, una situación que viene a reforzar claramente el nuevo SQL Server 2008 con importantes avances en esos dos campos

SQL Server 2008: renovada gestión de datos

22 julio 2008

Hace años que Microsoft con su SQL Server comenzó a codearse con los grandes del sector: Oracle, IBM o Informix (hoy propiedad también de IBM), con un crecimiento notable desde que apareció la versión 2005. El pasado mes de febrero la firma presentó al sucesor, el futuro SQL Server 2008, un RDBMS que, sobre los cimientos de la edición previa, crece en rendimiento y funcionalidad ofreciendo una potencia que supera en muchos casos a la competencia.

 

A pesar de que no estará disponible hasta la segunda mitad del año, puede utilizarse una CTP (Community Technology Preview) que incorpora la mayoría de las características del producto. Para redactar este artículo, hemos utilizado la CTP que usó Microsoft para la presentación.

 

Mejoras en el rendimiento

SQL Server 2008 incorpora mecanismos de compresión dinámica de datos, tanto de páginas de tablas como de índices, lo cual reduce el tiempo necesario para leer y escribir la información, disminuyendo tanto el espacio ocupado en disco como en memoria.

 

Las técnicas de compresión también se aplican a la ejecución de copias de seguridad en línea, consumiendo un tiempo de procesador que podría afectar negativamente al funcionamiento de las aplicaciones. En esta versión de SQL Server 2008, se ha mejorado este aspecto, pudiendo limitarse el consumo de recursos del proceso en segundo plano que se ocupa de las copias.

 

Una nueva característica, denominada sparse columns (columnas dispersas), ofrece una optimización adicional para el almacenamiento de columnas nulas que reduce tanto el tiempo como el espacio. Resulta interesante en aquellos diseños en los que se prevea que un número importante de columnas puedan tomar el valor NULL.

 

Cuando se trabaja sobre tablas particionadas, es capaz de adaptar los planes de ejecución de las consultas para que actúen en paralelo, cada uno en su propio hilo (thread), en lugar de procesarlas en serie. Esto reduce el tiempo empleado globalmente cuando el sistema dispone de múltiples procesadores, que es lo más corriente en un equipo que actúa como servidor de bases de datos.

 

Las ediciones más potentes de SQL Server 2008, sobre procesadores de 64 bits y con grandes cantidades de memoria, son capaces de operar bases de datos con tamaños del orden de las decenas de terabytes. Incluso, existe la posibilidad de agregar más memoria y procesadores adicionales en caliente.

 

Otro aspecto en el que se ha mejorado el rendimiento afecta a las configuraciones en clúster, de forma que el mecanismo de mirroring que mantiene sincronizadas las bases de datos resulta mucho más rápido y consume menos ancho de red al comprimir el registro de bitácora (log) con los datos que viajan de un servidor a otro.

 

Más seguridad

SQL Server 2008, como cualquier otro producto de esta categoría, ofrece un control exhaustivo sobre los usuarios que pueden acceder a la base de datos y las operaciones que llevan a cabo. En ocasiones, sin embargo, puede que no sea suficiente, ya que sigue existiendo la posibilidad del acceso directo a los archivos de datos en bruto con el objetivo de recuperar información confidencial.

 

Gracias a una nueva función de SQL Server 2008, denominada TDE (Transparent Data Encryption), es posible habilitar el cifrado transparente de toda la información de la base de datos sin necesidad de efectuar ningún cambio en las aplicaciones.

 

El cifrado y descifrado se efectúa dinámicamente en el momento en que se escribe o se lee de la base de datos afectando a toda la información: las tablas, los índices, el registro de bitácora, etc. Un proceso ejecutándose en segundo plano se encarga de todo, de forma que, para las aplicaciones, el hecho de que los datos estén cifrados es algo transparente. Los archivos de datos, en cambio, resultarán totalmente ilegibles si no se dispone de la clave de descifrado correspondiente.

 

Aunque SQL Server tiene la capacidad para generar las claves de cifrado y administrarlas, gracias a EKM (Extensible Key Management), también existe la posibilidad de usar software de terceros para la gestión de éstas. Es una opción que permite a las empresas centralizar en un mismo producto todas sus claves.

 

Otra novedad en el campo de la seguridad en SQL Server 2008 afecta a la auditoría de bases de datos, basada en un nuevo objeto que puede configurarse para que registre eventos a diferentes niveles, desde el servidor completo a componentes concretos de una base de datos, incluyendo no solamente la modificación de los datos, sino también las operaciones de lectura que se llevan a cabo en el momento en que se efectúan y la cuenta utilizada para ello.

 

También se han incorporado al producto las herramientas apropiadas para configurar, almacenar y examinar los registros de auditoría.

 

Nuevos tipos de datos

Tradicionalmente, los sistemas RDBMS se han utilizado para almacenar información relacional compuesta de unos pocos tipos de datos simples: números enteros y decimales, secuencias de caracteres, fechas y poco más. Posteriormente, se agregaron otros que facilitaban el trabajo con cadenas de texto grandes y datos binarios, sin realizar ninguna clase de interpretación acerca de su contenido. Finalmente, se incluyó un tipo de dato específico para XML.

 

En la actualidad, existen multitud de aplicaciones cuyas necesidades, en cuanto al tipo de información que precisan gestionar, exceden con mucho lo que ofrecen la mayoría de las bases de datos. SQL Server 2008 persigue atender dicha demanda añadiendo un importante grupo de nuevos tipos de datos. Algunos de ellos son mejoras respecto a los que ya existían, como los nuevos Date, Time o DateTime2, que permiten operar con fechas y horas de mayor precisión, mientras que otros son totalmente nuevos.

 

Con los nuevos tipos Geography y Geometry, se facilita el trabajo con datos geoespaciales, especialmente adecuados para conservar información relativa a mapas (longitud y latitud) y entidades geométricas, tales como líneas y polígonos, empleando sistemas de coordenadas arbitrarios. Lo interesante es que no se limitan a conservar la información sin más, para lo cual podrían utilizarse tipos numéricos ya existentes, sino que agregan los métodos necesarios para realizar operaciones sobre columnas que pueden ser tratadas como objetos.

 

El almacenamiento en un RDBMS de datos jerárquicos siempre ha representado un problema, siendo precisa una conversión a la hora de almacenarlos y una reinterpretación al recuperarlos por parte de las aplicaciones y, por tanto, un trabajo adicional para los diseñadores de bases de datos y desarrolladores.

 

SQL Server 2008 cuenta con el nuevo tipo de dato HierarchyId capaz de almacenar información relativa a nodos que guardan una relación jerárquica entre sí, normalmente formando un árbol. Los métodos de este tipo facilitan la navegación, obteniendo los hijos de un nodo, el padre de un nodo, etc.

 

Otro de los nuevos tipos de datos es FileStream, pensado para facilitar el mantenimiento de datos no estructurados que se almacenan de manera externa a la base de datos. Una columna de este tipo puede alojar cualquier clase de archivo: una imagen, un documento, una presentación, etc.

 

Éste se almacenará físicamente en el sistema de archivos del sistema operativo, pero manteniendo todas las propiedades de cualquier otra columna de una tabla en la base de datos. Pueden utilizarse sentencias SQL para manipular estos datos con las ventajas que esto conlleva en cuanto a seguridad de acceso e integridad de la información, pero obteniendo el rendimiento de NTFS en la lectura y escritura de la información, sin sobrecargar la base de datos con grandes flujos de datos.

 

Más programable

SQL Server 2008 incorpora en su núcleo la última versión del entorno de ejecución de la plataforma .NET, el conocido CLR (Common Language Runtime), lo cual permite utilizar avanzados lenguajes de programación tanto para implementar objetos del RDBMS como para el desarrollo de aplicaciones que se comuniquen con el servidor de datos.

 

Entre esos lenguajes se encuentra C# 3.0, uno de los más potentes y seguros que podemos encontrar. Los diseñadores y desarrolladores utilizan la estructura de una nueva base de datos un modelo conocido como E/R (Entidad/Relación), según una serie de reglas y transformaciones, que, como resultado, genera el conjunto de tablas que será preciso definir, así como las relaciones que habrá entre ellas.

 

Ese modelo, sin embargo, deja de ser útil a partir de ese punto, de forma que los desarrolladores de aplicaciones tienen que escribir complejas sentencias SQL para, a partir de tablas independientes, recomponer los conjuntos de datos lógicos que necesita el usuario final.

 

Gracias al nuevo Entity Framework, el escenario que acaba de describirse, que es el tradicional, cambiará notablemente, ya que será posible escribir sentencias para operar directamente con las entidades de alto nivel, en lugar de con tablas individuales y sus relaciones, lo cual agrega una capa de abstracción adicional que simplificará el proceso de desarrollo. Entity Framework forma parte de la última versión de ADO.NET y se integra estrechamente con el entorno de desarrollo de Visual Studio 2008.

 

También T-SQL, el lenguaje derivado de SQL propio de SQL Server para el desarrollo de procedimientos almacenados y funciones, incorpora diversas mejoras y novedades. Una de ellas es la posibilidad de utilizar como parámetros, a la hora de invocar a procedimientos y funciones, tablas completas, facilitando así el procesamiento de colecciones de datos en lugar de campos individuales.

 

La nueva sentencia MERGE es capaz de combinar los datos de dos tablas completas, una actuando como origen y otra como destino, de acuerdo a unas condiciones establecidas. La existencia de una tupla o fila en la tabla de origen que no exista en la de destino se traduce en una inserción. Si la tupla existe en ambas tablas, se lleva a cabo una actualización, procediendo a efectuar un borrado si no existe en la tabla de origen y sí en la de destino.

 

Cuando se utiliza conjuntamente con Visual Studio 2008, Entity Framework y LINQ (Language Integrated Query), SQL Server 2008 ofrece la plataforma más avanzada para el desarrollo de aplicaciones con conexión a bases de datos. En la actualidad, no existe otra familia de productos que ofrezca la funcionalidad que este conjunto de herramientas de Microsoft.

 

Administración más eficiente

SQL Server 2008 puede ser considerado un producto más avanzado que la competencia gracias a la inclusión de un marco de administración del servidor de datos, llamado DMF (Declarative Management Framework) basado en directivas y capaz de gestionar una o más instancias.

 

La idea de este mecanismo se fundamenta en las directivas de administración utilizadas en sistemas operativos, como Windows Server, y representan un nivel de abstracción mayor. El administrador del servidor de bases de datos define una o más directivas, estableciendo las características que han de cumplir los objetos, encargándose el propio RDBMS de garantizar su cumplimiento. De esta forma, se exime al administrador de controlar personalmente, cada vez que se crea o modifica un objeto en la base de datos, que no se infringe ninguna política de la empresa, parámetro de seguridad, etc.

 

Existen diferentes métodos por los cuales pueden aplicarse las directivas, desde la aplicación bajo demanda, cuando el administrador lo indica, hasta la comprobación automática mediante disparadores de DDL. Con un disparador de este tipo es posible, por ejemplo, controlar al crear una tabla que la denominación asignada cumpla unas ciertas reglas.

 

La inclusión de una nueva herramienta denominada Regulador de recursos junto con el SQL Server Profiler y el Asistente para la optimización hace más fácil para el administrador detectar en qué se emplea la mayor parte del tiempo, ajustar la asignación de recursos de forma que una aplicación no monopolice el servidor de datos y adecuar los planes de ejecución del RDBMS para obtener el mejor rendimiento posible.