Zstd

Zstandard که معمولاً با نام پیاده‌سازی مرجع آن «zstd» شناخته می‌شود، یک الگوریتم فشرده‌سازی بی‌اتلاف است که توسط Yann Collet در فیس بوک توسعه یافته شده‌است. Zstd پیاده‌سازی مرجع آن در زبان برنامه‌نویسی C است. نسخه ۱ این پیاده‌سازی به صورت منبع باز در ۳۱ اوت ۲۰۱۶ منتشر شد.

امکانات 
Zstandard با این هدف طراحی شد که نسبت فشرده سازی قابل مقایسه‌ای با الگوریتم DEFLATE (که در سال ۱۹۹۱ توسعه یافته و در برنامه‌های اصلی ZIP و gzip استفاده شده‌است) ارائه دهد و در عین حال، به ویژه برای خارج کردن از حالت فشرده، سریع تر باشد. درجه فشرده‌سازی آن را می‌توان از منفی ۷ (سریع‌ترین) تا ۲۲ (کمترین سرعت اما بهترین نسبت فشرده‌سازی) تغییر داد.

بسته zstd شامل پیاده‌سازی‌های موازی (چند رشته‌ای) برای فشرده سازی و خارج کردن از حالت فشرده‌است.. از نسخه ۱٫۳٫۲ (منتشر شده در اکتبر ۲۰۱۷)، zstd، همانند rzip و lrzip، امکان فعال‌سازی جستجو و کپی برداری با برد بسیار طولانی را فراهم کرده‌است (با استفاده از , پنجره ۱۲۸ مگابایت).

سرعت فشرده‌سازی می‌تواند بین سریع‌ترین و آهسته‌ترین درجه فشرده‌سازی با ضریب ۲۰ یا بیشتر تغییر کند، در حالی که خارج کردن فایل از حالت فشرده همواره سریع است و بین سریع‌ترین و کندترین درجه، کمتر از ۲۰ درصد تغییر می‌کند. خط فرمان Zstandard دارای یک حالت «تطبیقی» (با استفاده از ) است که درجه فشرده سازی را بسته به شرایط ورودی/خروجی تغییر می‌دهد، به ویژه با توجه اینکه با چه سرعتی می‌تواند خروجی را بنویسد.

Zstd در حداکثر درجه فشرده سازی خود نسبت فشرده سازی نزدیک به lzma , lzham و ppmx می‌دهد و بهتر از lza یا bzip2 عمل می‌کند. Zstandard به مرز فعلی پارتو می‌رسد، زیرا سرعت خارج‌کردن فایل‌ها از حالت فشرده در آن از هر الگوریتم فعلی دیگری، با وجود اینکه نسبت فشرده‌سازی همانند یا بیشتری دارد، سریع‌تر است.

دیکشنری‌ها می‌توانند تأثیر زیادی بر نسبت فشرده سازی فایل‌های کوچک داشته باشند، بنابراین Zstandard می‌تواند از دیکشنری فشرده سازی ارائه شده توسط کاربر استفاده کند. همچنین یک حالت آموزشی ارائه می‌دهد که می‌تواند یک دیکشنری را با کمک از مجموعه ای از نمونه‌ها تولید کند. به‌طور خاص، یک دیکشنری می‌تواند برای پردازش مجموعه‌های بزرگی از فایل‌ها با اضافات بین فایل‌ها استفاده شود، اما نه لزوماً در هر فایل، به عنوان مثال، فایل‌های گزارش.

طرح 
Zstandard یک مرحله تطبیق با دیکشنری (LZ77) را با یک پنجره جستجوی بزرگ و یک مرحله کدگذاری آنتروپی سریع، با استفاده از هر دو روش آنتروپی حالت محدود (نسخه جدول‌بندی شده سریع ANS، taNS، که برای مدخل‌های بخش Sequences استفاده می‌شود) و کدگذاری هافمن (برای ورودی‌های بخش Literals استفاده می‌شود) ترکیب می‌کند.

استفاده 

هسته لینوکس Zstandard را از نوامبر ۲۰۱۷ (نسخه ۴٫۱۴) به عنوان یک روش فشرده سازی برای سیستم‌های فایل btrfs و squashfs گنجانده‌است.

در سال ۲۰۱۷، آلن جود Zstandard را در هسته FreeBSD ادغام کرد و متعاقباً به عنوان یک گزینه فشرده‌سازی برای تخلیه‌های هسته (هم برای برنامه‌های کاربر و هم kernel panicها) ارائه شد. همچنین برای ایجاد طرح مفهومی روش فشرده سازی OpenZFS که در سال ۲۰۲۰ با هسته ادغام شد، استفاده شد.

پایگاه‌های داده AWS Redshift و RocksDB از فشرده سازی میدانی با استفاده از Zstandard پشتیبانی می‌کنند.

در مارس ۲۰۱۸، Canonical استفاده پیش فرض از zstd را به عنوان یک روش فشرده سازی بسته‌های deb برای توزیع لینوکس اوبونتو آزمایش کرد. در مقایسه با فشرده‌سازی xz بسته‌های deb, zstd در سطح ۱۹ به‌طور قابل‌توجهی سریع‌تر از حالت فشرده خارج می‌شود، اما اندازه فایل‌ها ۶ درصد افزایش می‌یابد. ایان جکسون، توسعه‌دهنده دبیان، چند سال انتظار پیش از پذیرش رسمی را ترجیح داد.

در سال ۲۰۱۸ این الگوریتم به عنوان   منتشر شد، که همچنین نوع رسانه "application/zstd"، پسوند نام فایل "zst" و روش رمزگذاری محتوای HTTP "zstd" تعریف می‌کند.

آرچ لینوکس در اکتبر ۲۰۱۹ با انتشار مدیر بسته Pacman 5.2 پشتیبانی از zstd را به عنوان یک روش فشرده‌سازی برای بسته اضافه کرد، و در ژانویه ۲۰۲۰ فشرده‌سازی بسته‌های موجود در مخزن رسمی را از xz به zstd تغییر داد. آرچ از zstd -c -T0 --ultra -20 - استفاده می‌کند، اندازه کلی بسته‌های فشرده‌شده ۰٫۸٪ افزایش یافته‌است (در مقایسه با xz)، سرعت خارج‌کردن از حالت فشرده ۱۴ برابر سریعتر شده‌است، حافظه مضرف شده برای خارج کردن از حالت فشرده ۵۰ مگابایت در هنگام استفاده از رشته‌های متعدد افزایش می‌یابد اما با تغییر تعداد رشته‌های استفاده شده بهتر می‌شود. آرچ لینوکس هم‌چنین به zstd به عنوان الگوریتم فشرده سازی پیش فرض برای mkinitcpio ramdisk تغییر یافت.

فدورا پشتیبانی ZStandard را در می ۲۰۱۸ به RPM اضافه کرد (نسخه ۲۸ فدورا) و از آن برای بسته‌بندی در فدورا ۳۱ در اکتبر ۲۰۱۹ استفاده کرد. در فدورا ۳۳، سیستم فایل به‌طور پیش فرض با zstd فشرده می‌شود.

پیاده‌سازی کامل الگوریتم با گزینه ای برای انتخاب سطح فشرده سازی در. NSZ /. فرمت‌های فایل XCZ که توسط انجمن homebrew برای کنسول بازی هیبریدی Nintendo Switch توسعه یافته‌است.

Zstandard در سال ۲۰۲۰ در نسخه ۶٫۳٫۸ با فرمت فایل فشرده با کدک شماره ۹۳ پیاده‌سازی شده‌است. شماره ۲۰ قبلی نسخه ۶٫۳٫۷ منسوخ شده‌است؛ بنابراین فرمت فایل دوم با zip برای فایل‌های Zstandard موجود است. نسخه‌های جدید برنامه‌های zip اغلب از این ویژگی جدید پشتیبانی می‌کنند.

7-Zip ZS، یک فورک از 7-Zip FM با پشتیبانی از Zstandard (و فرمت‌های دیگر)، توسط Tino Reichardt توسعه یافته‌است. پشتیبانی واقعی از Zstandard 1.5.0 اینجاست.

Modern7z، یک افزونه Zstandard (و فرمت‌های دیگر) برای 7-Zip FM توسط Denis Anisimov (TC4shell) توسعه یافته‌است.

p7zip همچنین در نسخه جدید Zstandard 1.4.9 پشتیبانی می‌کند.

مجوز 
مجوز پیاده‌سازی مرجع BSD است که در GitHub منتشر شده‌است. از نسخه ۱٫۰، یک اعطای حقوق ثبت اختراع نیز داشت.

از نسخه ۱٫۳٫۱، این امتیاز ثبت اختراع حذف شد و مجوز به مجوز دوگانه BSD + GPLv2 تغییر یافت.

جستارهای وابسته 
 زلیب
 LZFSE – الگوریتم مشابهی توسط اپل که از زمان iOS 9 و OS X 10.11 که در تاریخ ۱ ژوئن ۲۰۱۶ منبع باز شد استفاده می‌شود.
 LZ4 (الگوریتم فشرده سازی) - یک عضو سریع از خانواده LZ77

منابع 

الگوریتم‌های فشرده‌سازی بی‌اتلاف
کتابخانه‌های سی
نرم‌افزارهای ۲۰۱۶ (میلادی)
نرم‌افزارهای فشرده‌سازی آزاد
نرم‌افزارهایی که از پروانه بی‌اس‌دی استفاده می‌کنند
فشرده‌سازی داده‌ها