Aller au contenu principal
Notification
ITPro
  • Ressources IT
  • Newsletter
Se connecter
S’inscrire
  • Cloud & Infrastructure
  • Cybersécurité
  • Data & IA
  • Workplace et Endpoints
Se connecter
S’inscrire
  • Facebook
  • X
  • Linkedin
  • Instagram

Inscrivez-vous

Newsletter iTPro

  • Cloud & Infrastructure
  • Cybersécurité
  • Data & IA
  • Workplace et Endpoints
  • Cloud & Infrastructure
  • Cybersécurité
  • Data & IA
  • Workplace et Endpoints
  1. Accueil
  2. Data & IA
  3. Bases de données modernes
  4. Compressez vos données

Sommaire

Tech stories

  • Tech Stories

    Les compétences cloud à développer dans une équipe IT

  • Tech Stories

    Sous-titres vidéo : formats SRT, VTT et bonnes pratiques

Bases de données modernes

Compressez vos données

Par

Tyler Chessman et John Paul Cook
24 juin 2010
4 minutes

Les .NET Framework pour étendre la puissance de SQL Server 2005.

Sommaire

Pendant des années, les développeurs ont été obligés de créer des solutions personnalisées afin de compresser les données avant de les stocker dans la base de données, puis de les décompresser après leur extraction. (Pour une présentation de la compression, lisez l’encadré « Compression: Notions fondamentales »). Le .NET Framework simplifie grandement ces tâches. La version 1.1 a apporté l’espace de nom java.util.zip, lequel propose des méthodes de compression et de décompression des données. Avec cette version du .NET Framework, vous pouvez, par exemple, créer des classes enveloppe afin d’appeler indirectement java.util.zip à partir de langages .NET tels que VB.NET et C#. Toutefois, le .NET Framework 2.0, qui fait partie intégrante de SQL Server 2005 et de Visual Studio 2005, propose l’espace de nom System.IO.Compression, dont les méthodes fournissent un moyen pratique pour compresser et décompresser les données.

L’espace de nom System.IO.Compression, disponible avec tous les langages .NET, inclut deux classes pour la compression et la décompression des données : DeflateStream et GZipStream. La première classe met en oeuvre l’algorithme DEFLATE (tel que défini dans la RFC (Request for Comments) 1951). La deuxième utilise le format gzip (défini dans la RFC 1952), lequel compresse un seul fichier et est également basé sur l’algorithme DEFLATE. Comme leurs noms le suggèrent, DeflateStream et GZipStream fonctionnement avec des flux de données. Ces flux ne sont pas simplement des séquences d’octets, il s’agit d’objets complets, avec des méthodes permettant de les manipuler.

Avant d’examiner nos exemples de programmes de compression, passons brièvement en revue les principales étapes de la création d’une application de compression. Premièrement, vous devez ajouter du code Imports Visual Basic ou du code C#, au moyen d’instructions pour les espaces de nom System.IO et System.IO.Compression :

‘ VB Imports statements
Imports System.IO _
‘ for Stream object
Imports System.IO.Compression _
‘ for DeflateStream and _ GZipStream

// C# code
using System.IO;
// for Stream object
using System.IO.Compression;
// for DeflateStream and GZipStream

(Remarque : Certaines parties du code sont écrites sur plusieurs lignes en raison de contraintes d’espace.)

Vous devez également employer le type de données SqlBytes, un type SQL Server natif, car un paramètre et une fonction retournent tous deux une valeur. SqlBytes fait parti du nouvel espace de nom System.Data.SqlType, lequel propose des classes pour les types natifs au sein de SQL Server 2005. D’après la documentation .NET, ces classes « fournissent une alternative plus rapide et plus sûre aux types de données proposés par le .NET [CLR] ». A titre d’avantage supplémentaire, les espaces de nom SqlType mettent en oeuvre l’interface INullable, qui leur permet de contenir une valeur null réelle. L’utilisation des types de données SQL Server natifs évite également les problèmes de conversion de types. Bien que vous puissiez employer les types courants .NET, tels que les tableaux d’octets (Byte array), au sein des fonctions SQLCLR, le moteur d’exécution (runtime) convertira implicitement les types .NET vers le SqlType correspondant. Ces conversions de type entraînent une légère baisse des performances et ouvrent la porte à de possibles erreurs de conversion. Par exemple, lorsque nous avons écrit la fonction CompressBytes pour la première fois, nous avons utilisé des tableaux d’octets. Après avoir déployé le code sur SQL Server 2005, nous avons réalisé que le runtime convertissait implicitement les tableaux d’octets en varbinary(8000). Cette conversion inopportune empêchait d’utiliser des documents de plus de 8 Ko.

Pour comprimer les données, vous devez créer une fonction de code géré définie par l’utilisateur (UDF) du type SqlBytes :

Public Shared Function _
CompressBytes(ByVal _
UncompressedBytes As _
SqlBytes) As SqlBytes

Vous employez à la fois un objet MemoryStream et un objet GZipStream pour le processus de compression, comme suit :

Dim outputStream As New _ MemoryStream
‘ Contains the _ compressed data
Dim zipStream As Stream _
‘ The zip stream used for _ compression zipStream = New GZipStream _ (outputStream, _ (CompressionMode.Compress) _
‘ instantiate

La fonction effectue la compression en appelant la méthode Write de l’objet GZipStream, laquelle écrit les octets compressés dans l’objet MemoryStream (outputStream). Comme vous pouvez le voir dans le bloc de code suivant, la méthode Write a besoin du nombre d’octets non compressés (cet aspect sera explicité un peu plus loin) :

zipStream.Write _ (UncompressedBytes.Value, _ 0, CInt(UncompressedBytes. _ Length))

Maintenant que les données compressées sont dans outputStream, il vous suffit de retourner les données à partir de la fonction :

Return New SqlBytes _ (outputStream.ToArray)

La compression des données est aussi simple que cela. Il en va quasiment de même pour la décompression. Vous utilisez la méthode Read de GZipStream pour décompresser les données. Comme avec la méthode Write, la méthode Read a besoin du nombre d’octets compressés qu’elle aura à traiter. Il nous est apparu qu’un suivi du nombre d’octets compressés et décompressés n’était pas pratique lors du développement d’une classe enveloppe de compression et de décompression générique. Nous sommes parvenus à la conclusion qu’il était plus approprié d’adopter une approche orientée blocs, dans laquelle nous compressons et décompressons un bloc d’octets à la fois, car elle s’affranchit des détails du suivi du nombre d’octets.

Tech Stories

Les compétences cloud à développer dans une équipe IT

Pour beaucoup de DSI, le cloud a longtemps été réduit à un projet de migration : déplacer des serveurs on-premise vers un fournisseur externe. Une fois cette étape franchie, la…

Lire l'article : Les compétences cloud à développer dans une équipe IT

Ressource IT

SIEM & PME : Comment construire la boîte noire de votre SI ?

Passez à la cybersécurité proactive, transformez la collecte et l’analyse des logs en un bouclier dynamique contre les cybermenaces. Découvrez comment mettre en place une approche SIEM modulaire, évolutive et…

Découvrir la ressource : SIEM & PME : Comment construire la boîte noire de votre SI ?

Inscrivez-vous

Newsletter iTPro

Tyler Chessman et John Paul Cook

Rédigé par Tyler Chessman et John Paul Cook

Tyler Chessman et John Paul Cook est un professionnel IT et rédacteur sur iTPro.fr : Découvrez ses articles informatique

Tous ses articles →

Bases de données modernes

À lire également...

  • BYOD - Les atouts cachés du Bring Your Own Model pour les entreprises - iTPro.fr
    Bases de données modernes

    Les atouts cachés du Bring Your Own Model pour les entreprises

    Par

    Sabine Terrey
    25 octobre 2024
    4 minutes
  • Change Data Capture pour les entreprises qui réussisent
    Bases de données modernes

    Le Change Data Capture est l’avenir des entreprises qui réussissent

    Par

    Sabine Terrey
    22 mars 2024
    4 minutes
  • comment_Migrer_vos_bases_de_donnees_dans_le_cloud
    Bases de données modernes Cloud & Infrastructure

    Migration des bases de données dans le cloud : mode d’emploi

    Par

    Sabine Terrey
    9 janvier 2023
    4 minutes
  • Bases de données modernes Cloud & Infrastructure

    Pourquoi migrer ses bases de données dans le Cloud 

    Par

    Sabine Terrey
    12 décembre 2022
    6 minutes
ITPro
  • X
  • Linkedin
  • Facebook
  • Instagram
Se connecter
S’inscrire
  • Cloud & Infrastructure
  • Cybersécurité
  • Data & IA
  • Workplace et Endpoints
  • Ressources IT
  • Espace responsable sécurité
  • Espace DSI
  • Espace Architecte IT
  • Espace IT Manager
  • Espace Responsable Data / IA

Inscrivez-vous

Newsletter iTPro

© iTPro.fr

  • Comité éditorial
  • Régie médias
  • Mentions-légales
  • Gestion et protection des données personnelles
  • Gestion des cookies
Gérer le consentement aux cookies
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
Fonctionnel Toujours activé
Le stockage ou l’accès technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’internaute, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
Le stockage ou l’accès technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou la personne utilisant le service.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques. Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
Le stockage ou l’accès technique est nécessaire pour créer des profils d’internautes afin d’envoyer des publicités, ou pour suivre l’internaute sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.
  • Gérer les options
  • Gérer les services
  • Gérer {vendor_count} fournisseurs
  • En savoir plus sur ces finalités
Voir les préférences
  • {title}
  • {title}
  • {title}