توابع compress و decompress درsql server2016

در این مقاله می خواهیم دو تابع فشرده سازی(compression) و از حالت فشرده خارج کردن (decompression) صحبت نماییم. اولین بحث فشرده سازی داده ها در sql server 2008 به منظور فشرده کردن داده ها در پایگاه داده مطرح شد. فشرده سازی سطر و صفحه می تواند در قالب یک جدول ، index ، view حاوی index و یا در یک سطح جزئی باشد. گرچه این فشرده سازی برای مقادیر باینری بزرگ مانند متن و تصویر و فیلم مناسب نیست.

دو تابع ایجاد شده برای این منظور در SQL server 2016 :

  • Compress : برای فشرده سازی داده از نوع متن با باینری به کار می رود. خروجی حاصل از آن یک آرایه ای از بایت ها از نوع (varbinary(max می باشد.
  • Decompress : برای خارج کردن آن داده از حالت فشرده به کار می رود ، خروجی حاصل از آن یک آرایه از نوع (varbinary(max می باشد.

یک مثال کاربردی

فرض کنید یک کاربر FILESTREAM بک فایل را قبل از بار گذاری فشرده می کند .این فشرده سازی یک قدم اضافی پیش از بار گذاری فایل می باشد که البته ممکن است مستعد خطا باشد. فرآیند بازیابی فایل هم به این صورت است که آن فایل را از حالت فشرده خارج نماییم. در SQL Server 2016 قدرت نفوذ توابع Compression  و Decompression که به همین منظور استفاده می شود را معرفی خواهیم کرد.

شرح توابع Compress  و Decompress

در این بخش می خواهیم مثال بالا را نشان دهیم . فرض کنید SQL server به FILESTREAM دسترسی داشته باشد، با دستور زیر یک پایگاه داده و یک جدول حاوی داده های مربوط به این FILESTREAM را ایجاد می نماییم.

ما دو نوع فایل داریم: فایل “largefile.csv” و فایل دوم ” gizipnative.gzp ” که حالت فشرده این فایل با است.

تابع فشرده ساز(Compress) در SQL server :

با دستورات زیر فایل اصلی دو بار بارگذاری می شود .لود شدن اول فایل برای نمایش خود فایل می باشد ولی لودشدن دوم۰ برای فراخوانی تابع فشرده ساز می باشد. حالت فشرده ای فایل که یک بار ایجاد می شود، “gzipnative.gz” می باشد.

هم چنین می توانیم سایز فایل “largefile.csv” و فایل “gzipnative.gz” را با تابع datalengthکه فضای فیزیکی که این فایل در دیسک اشغال می کند را به دست آوریم:

تابع Decompressدر SQL Server :

در صورتی که بخواهیم یک فایل را از حالت فشرده خارج کنیم از این تابع استفاده می کنیم البته باید توجه کنیم که حتما فرمت فشرده ی فایل از طریق الگوریتم gzip موجود باشد.

همچنین می توانیم با استفاده ازتابع فشرده ساز مقادیر داده ای که فشرده نیستند را به روز رسانی کنیم.

بنابراین برای اینکه یک فایل داده از حالت فشرده خار ج شود یا باید از طریق این تابع فشرده شده باشد و یا به کمک الگوریتمgzip این اتفاق افتاده باشد.

در SQL server2016 می توانیم با select query این دو تابع را به منظور فشرده سازی به کار بریم. اگرچه ما در اینجا با FILESTREAM به تفسیر این دو تابع پرداختیم ولی می توان از آن ها برای ذخیره سازی داده در پایگاه داده ها نیز استفاده کرد. برای ستون هایی با نوع داده ی ثابت استفاده از فشرده سازی سطرو صفحه به دلیل سهولت و عدم نیاز به کد های پیچیده مناسب تر است . در حالت کلی فشرده سازی برای هر نوع داده ای مطلوب نیست و در بعضی موارد اینکه از خود فایل داده های اصلی بدون فشرده سازی استفاده کنیم واز cpu استفاده کنیم بهتر است. همواره باید به نوع داده ای که می خواهیم آن را فشرده نماییم ، توجه کنیم.