2 mai 2011

Article

Technologies de l'information

Les nouveautés de SQL Server 2008

La nouvelle version de SQL Server arrive avec une multitude de nouvelles fonctionnalités. Microsoft souhaite d’ailleurs adopter une nouvelle approche orientée « features » pour faire évoluer ses produits et faciliter les mises à jour.

Ces nouveautés ont pour but d’améliorer SQL Serveur sur les axes de la fiabilité, de la productivité et du « BI ».

Dans ce premier article, nous aborderons quelques-unes de ces nouvelles fonctionnalités.

Nouveautés du langage

Commençons par de petites nouveautés, celles du langage T-SQL. Ce ne sont pas les plus grosses ni les plus attendues, mais elles améliorent l’utilisation au quotidien et réduiront sensiblement la taille de nos scripts.

Déclaration et assignation de variable

On peut maintenant en une seule instruction déclarer et attribuer une valeur à une variable :

DECLARE @x AS int = 2

Opérateurs

On peut également effectuer une opération et réaffecter le résultat en une seule instruction :

SET @x += 1

Instruction MERGE

Cette nouvelle instruction permet de fusionner 2 jeux de données. Concrètement, elle permet, par exemple, de traiter l’insertion et la mise à jour en une seule fois :

MERGE Person.Contact AS Destination

USING (SELECT * FROM dbo.Donnees_a_Inserer) AS Source

ON (Destination.ContactId = Source.ContactId)

WHEN MATCHED THEN

UPDATE SET Destination.Adresse = Source. Adresse, Destination.Date = GetDate()

WHEN NOT MATCHED BY TARGET THEN

INSERT (ContactId, Adresse, Nom)

VALUES (Source. ContactId, Source. Adresse, Source. Nom) ;

Insertion multiple

L’instruction INSERT s’enrichit avec la possibilité d’ajouter plusieurs enregistrements en même temps :

INSERT MaTable(Nom, Prenom)

VALUES (‘Bégin, ‘Pierre’)

VALUES (‘Bilodeau, ‘Sébastien’) ;

Nouveautés pour les données

Nouveaux types

Date & Time

Il y a 4 nouveaux types liés aux données temporelles qui voient le jour. Les plus simples sont le type Date qui ne stocke que la date du jour, mais pas l’heure et le type Time qui lui stocke uniquement l’heure avec une précision de 100 nanosecondes. Apparaissent aussi 2 nouveaux types DateTime. Le premier, datetime2, qui a une précision beaucoup plus importante (100ns) et le second qui prend en compte les fuseaux horaires.

HierarchyID

Ce type permet de modéliser plus facilement des structures arborescentes comme le très célèbre Employé-Manager. Ce type offre aussi de nombreuses méthodes pour manipuler les données efficacement (recherche d’un ancêtre, détermination du niveau, etc.)

Geography et Geometry

Attendu depuis longtemps, SQL Server s’enrichit du support des données spatiales. Ces 2 types permettent respectivement de gérer des coordonnées géographiques, c'est-à-dire relatives à la Terre, et des données géométriques à savoir un point sur un plan. Ces deux types sont livrés avec de nombreuses méthodes de manipulation et un système d’indexation.

Table-ValuedParameter

Il existait déjà un type Table que l’on pouvait manipuler, mais on ne pouvait pas le passer comme paramètre d’une procédure stockée ou d’une fonction. C’est possible dans cette nouvelle version avec les TVP.

CREATE TYPE UserIds AS TABLE (

UserIdVARCHAR(50));

CREATE PROCEDURE spDeleteUsers

@UsersToDeleteUserIds READONLY

AS

[…]

Le « spatial »

Les fonctionnalités spatiales étaient très attendues dans une base de données de la taille de SQL Server. Pour cette nouvelle fonctionnalité, les équipes de Microsoft s’appuient sur les standards de l’Open Geospatial Consortium et fournissent une solution complète, clef en main et intégrée.

Les types spatiaux sont facilement manipulables et rendent presque naturel l’ajout d’informations géographiques ou vectorielles dans une application. La requête ci-dessous montre comment retrouver des points dans une zone donnée.

Declare @zone geography = geography::STPolyFromText('POLYGON((43 3.2, 43 3.5, 43.2 3.5, 43.2 3.2, 43 3.2))', 4326)

Select *

From CustomerPlaces

Where @zone.STIntersects(CustomerPlaces.Localization) = 1

Pour un rendu plus visuel, on pourra s’appuyer sur des technologies comme Virtual Earth ou MapPoint.

Ces nouveaux types ouvrent la voie à des applications localisées voire à un système d’information localisé.

Nouvelles façons de stocker les données

FILESTREAM

On peut stocker depuis longtemps des fichiers ou de larges objets binaires. Depuis 2005, on stocke ces BLOB dans un champ de type varbinary(max). Les options de stockage des tables permettent de gérer des gros volumes de données sans difficulté avec un bon niveau de performance.

Cependant, il reste un point sur lequel SQL Server n’est pas très à l’aise, c’est une lecture de BLOB en mode stream. En effet, dans le cas de très gros fichiers (de la vidéo par exemple) SQL Server monopolise beaucoup de ressources, car il doit placer tout le champ dans ses buffers de transfert.

FILESTREAM permet de stocker ce type de données sous la forme de fichiers sur un système NTFS classique. Ce mode de stockage permet de pouvoir récupérer un pointeur sur le système de fichier et de lire les données de façon streamée, comme un fichier classique.

CREATE TABLE dbo.VideosData (

Id INT PRIMARY KEY,

Mpeg4Data VARBINARY(MAX) FILESTREAM NULL)

SPARSE columns

Le concept de Sparsecolumns représente les colonnes à faible densité comme les attributs d’un contact dans une base de CRM qui peuvent être très nombreux et pourtant très peu renseignés. Le fait d’indiquer à SQL Server que ces attributs doivent être stockés dans des colonnes de type SPARSE permet de gagner l’espace normalement occupé par des NULL. Ce gain n’est pas temps pour le stockage, mais pour la manipulation des données qui s’en trouve améliorée du fait d’avoir moins d’octets à lire.

CREATE TABLE dbo.ClientCRM (

ClientIDint NOT NULL IDENTITY (1, 1),

Nom varchar(50) NOT NULL,

Poidsint SPARSE NULL,

Yeux varchar(50) SPARSE NULL,

Taille numeric(3, 2) SPARSE NULL)

Les sparsescolumns s’utilisent aussi avec la notion de Columns Set qui permet de récupérer ou d’insérer plus facilement des jeux de colonnes disposant d’une valeur sans avoir à les manipuler toutes explicitement.

Conclusion

Sans remettre en cause l’architecture de la version 2005, la version 2008 apporte toute une panoplie de nouveautés et d’améliorations qui sont loin d’être futiles. Ces notions sont d'ailleurs traitées dans les cours sur SQL.

Les nouveautés de SQL Server 2008 (1ère partie de 3 articles)

© Éric Vaillancourt, Tous droits réservés.

Eric Vaillancourt possède plus de vingt cinq ans d'expérience en programmation de bases de données et en gestion de projets. Depuis une quizaine d'années, il se spécialise en optimisation des performances et en coaching d'administrateurs de bases de données.