zstd

Zstandard هي خوارزمية ضغط بيانات بدون فقدان، طوّرها يان كوليت في فيسبوك . Zstd هي النسخة المرجعية المقابلة المكتوبة بلغة C ، والتي تم إصدارها كبرنامج مفتوح المصدر في 31 أغسطس 2016. [ 3 ] [ 4 ]

نُشرت الخوارزمية في عام 2018 تحت مسمى RFC 8478 ، والذي يُعرّف أيضًا نوع الوسائط المرتبط "application/zstd"، وامتداد اسم الملف "zst"، وتشفير محتوى HTTP "zstd". [ 5 ] 

سمات

صُممت خوارزمية Zstandard لتحقيق نسبة ضغط مماثلة لخوارزمية DEFLATE (التي طُوّرت عام 1991 واستُخدمت في برنامجي ZIP و gzip الأصليين )، ولكنها أسرع، خاصةً في فك الضغط. ويمكن ضبطها بمستويات ضغط تتراوح من -7 (الأسرع) [ 6 ] إلى 22 (الأبطأ في سرعة الضغط، ولكن بأفضل نسبة ضغط).

ابتداءً من الإصدار 1.3.2 (أكتوبر 2017)، يقوم zstd بشكل اختياري بتنفيذ البحث طويل المدى وإزالة التكرار ( نافذة --long128  ميجابايت) على غرار rzip أو lrzip . [ 7 ]

قد تختلف سرعة الضغط بمقدار 20 ضعفًا أو أكثر بين أسرع وأبطأ مستويات الضغط، بينما تكون سرعة فك الضغط ثابتة، حيث لا تتجاوز نسبة الاختلاف بين أسرع وأبطأ مستويات الضغط 20%. [ 8 ] يحتوي سطر أوامر Zstandard على --adaptوضع "تكيفي" ( ) يُغيّر مستوى الضغط تبعًا لظروف الإدخال/الإخراج، وخاصةً سرعة كتابة المخرجات.

يُحقق برنامج Zstandard، عند أعلى مستوى ضغط، نسبة ضغط قريبة من نسب ضغط برامج lzma وlzham و ppmx . [ 9 ] [ 10 ] وبحلول عام 2019، وصل Zstandard إلى مستوى باريتو الأمثل لفك الضغط، حيث يُنتج مخرجات أسرع من أي خوارزمية أخرى مفتوحة المصدر بنسبة ضغط مماثلة أو أفضل. [ 11 ]

يمكن أن تؤثر القواميس بشكل كبير على نسبة ضغط الملفات الصغيرة، لذا يمكن لبرنامج Zstandard استخدام قاموس ضغط يُحدده المستخدم. كما يوفر البرنامج وضع تدريب، قادر على إنشاء قاموس من مجموعة من العينات. [ 12 ] [ 13 ] على وجه الخصوص، يمكن تحميل قاموس واحد لمعالجة مجموعات كبيرة من الملفات ذات التكرار بين الملفات، ولكن ليس بالضرورة داخل كل ملف، كما هو الحال مع ملفات السجلات .

تصميم

يجمع معيار Z بين مرحلة مطابقة القاموس ( LZ77 ) ونافذة بحث كبيرة ومرحلة ترميز إنتروبيا سريعة . ويستخدم ترميز هوفمان إلى جانب إنتروبيا الحالة المحدودة (FSE)، وهو أحد متغيرات tANS . [ 14 ]

الاستخدام

يتم استخدام Zstandard كطريقة ضغط لـ zram

لقد تم تضمين Zstandard في نواة لينكس منذ نوفمبر 2017 (الإصدار 4.14) كطريقة ضغط لأنظمة الملفات btrfs و squashfs ، [ 16 ] [ 17 ] [ 18 ] وكذلك لوحدات النواة القابلة للتحميل .

في عام 2017، قام آلان جود بدمج Zstandard في نواة نظام FreeBSD ، [ 19 ] وتم دمجه لاحقًا كخيار ضغط لملفات تفريغ الذاكرة الأساسية (سواءً لبرامج المستخدم أو حالات الذعر في النواة). كما استُخدم لإنشاء طريقة ضغط تجريبية لنظام OpenZFS [ 8 ] والتي تم دمجها في عام 2020. [ 20 ]

تتضمن قواعد بيانات AWS Redshift و RocksDB دعمًا لضغط الحقول باستخدام Zstandard. [ 21 ]

في مارس 2018، اختبرت شركة كانونيكال [ 22 ] استخدام zstd كطريقة ضغط افتراضية لحزم deb في توزيعة أوبونتو لينكس. بالمقارنة مع ضغط xz لحزم deb، فإن zstd عند المستوى 19 يفك الضغط بشكل أسرع بكثير، ولكن على حساب زيادة حجم ملفات الحزم بنسبة 6%. أُضيفت هذه الميزة إلى دبيان (ثم لاحقًا إلى أوبونتو) في أبريل 2018 (في الإصدار 1.6~rc1). [ 23 ] [ 22 ] [ 24 ]

أضافت فيدورا دعم معيار ZStandard إلى حزم RPM في مايو 2018 (إصدار فيدورا 28)، واستخدمته لتغليف الإصدار في أكتوبر 2019 (فيدورا  31). [ 25 ] في فيدورا  33، يتم ضغط نظام الملفات افتراضيًا باستخدام zstd. [ 26 ] [ 27 ]

أضاف نظام Arch Linux دعمًا لخوارزمية zstd لضغط الحزم في أكتوبر 2019 مع إصدار مدير الحزم pacman  5.2 [ 28 ] ، وفي يناير 2020، انتقل من استخدام xz إلى zstd لضغط الحزم في المستودع الرسمي. يستخدم Arch خوارزمية zstd zstd -c -T0 --ultra -20 -؛ ورغم أن حجم جميع الحزم المضغوطة مجتمعة ازداد بنسبة 0.8% (مقارنةً بـ xz)، إلا أن سرعة فك الضغط أسرع بـ 14 مرة، وزادت ذاكرة فك الضغط بمقدار 50  ميجابايت عند استخدام خيوط معالجة متعددة، بينما زادت ذاكرة الضغط ولكنها تتناسب طرديًا مع عدد خيوط المعالجة المستخدمة. [ 29 ] [ 30 ] [ 31 ] لاحقًا، اعتمد Arch Linux أيضًا خوارزمية zstd كخوارزمية الضغط الافتراضية لمولد قرص RAM الأولي mkinitcpio . [ 32 ]

في 15 يونيو 2020، تم تطبيق معيار Zstandard في الإصدار 6.3.8 من تنسيق ملف zip برقم الترميز  93، ليحل محل رقم الترميز السابق  20 الذي تم تطبيقه في الإصدار 6.3.7، الذي صدر في 1 يونيو. [ 33 ] [ 34 ]

في 31 أكتوبر 2023 تمت إضافة دعم Zstd الرسمي للضغط/فك الضغط إلى مستكشف Windows في Windows 11 (عبر حزمة التحديث KB5031455).

في مارس 2024، أضاف متصفح جوجل كروم الإصدار 123 ( والمتصفحات المبنية على كروميوم مثل بريف أو مايكروسوفت إيدج ) دعمًا لتقنية zstd في ترويسة HTTPContent-Encoding . [ 35 ] وفي مايو 2024، أضاف متصفح فايرفوكس الإصدار 126.0 دعمًا لتقنية zstd في ترويسة HTTPContent-Encoding . [ 36 ]

رخصة

تم ترخيص التطبيق المرجعي بموجب ترخيص BSD ، وهو منشور على GitHub . [ 37 ] ومنذ الإصدار 1.0، الذي نُشر في 31 أغسطس 2016، [ 38 ] حصل على منحة إضافية لحقوق براءات الاختراع. [ 39 ]

ابتداءً من الإصدار 1.3.1، الصادر في 20 أغسطس 2017، [ 40 ] تم إلغاء منح براءة الاختراع هذه وتغيير الترخيص إلى ترخيص مزدوج BSD + GPLv2. [ 41 ]

انظر أيضاً

  • LZ4 (خوارزمية الضغط) – عضو سريع من عائلة LZ77
  • LZFSE – خوارزمية مشابهة من شركة Apple تستخدم منذ نظامي التشغيل iOS 9 و OS X 10.11، وقد أصبحت مفتوحة المصدر في 1 يونيو 2016
  • زليب
  • بروتلي – مدمج أيضًا في المتصفحات
  • Gzip – أحد أكثر أدوات الضغط استخدامًا

مراجع

  1. "المساهمون في facebook/zstd" . github.com . تم الاطلاع عليه بتاريخ 26 يناير 2021 .
  2. "إصدار Zstandard v1.5.7" . تم الاطلاع عليه بتاريخ 21 فبراير 2025 .
  3. دي سيمون، سيرجيو (2 سبتمبر 2016). "فيسبوك يفتح المصدر لخوارزمية ضغط جديدة تتفوق على Zlib" . InfoQ. مؤرشف من الأصل في 7 أكتوبر 2021. تم الاطلاع عليه في 20 أبريل 2019 .
  4. ويليامز، كريس (31 أغسطس 2016). "الحياة تُحاكي السخرية: فيسبوك يُروّج لقاتل زليب تمامًا كما فعل عازف الناي في وادي السيليكون" . ذا ريجستر . مؤرشف من الأصل في 3 سبتمبر 2016. تم الاطلاع عليه في 6 سبتمبر 2016 .
  5. كوليت، يان (أكتوبر 2018). كوتشراوي، موراي س. (محرر). ضغط Zstandard ونوع الوسائط application/zstd . طلب ​​تعليقات من فريق عمل هندسة الإنترنت. IETF . doi : 10.17487/RFC8478 . RFC 8478. تم الاطلاع عليه في 7 أكتوبر 2020 .
  6. "إصدار Zstandard v1.3.4 - كل شيء أسرع · facebook/zstd" . GitHub . مؤرشف من الأصل في 11 سبتمبر 2021. تم الاطلاع عليه في 27 مارس 2024 .
  7. "واجهة سطر الأوامر لمكتبة Zstandard" . جيت هاب . فيسبوك. ٢٨ أكتوبر ٢٠٢١.
  8. 1 2 جود، آلان (2017). "ZStandard في ZFS" (ملف PDF) . open-zfs.org . مؤرشف (ملف PDF) من الأصل بتاريخ 18 ديسمبر 2019. تم الاطلاع عليه بتاريخ 20 أبريل 2019 .
  9. ماهوني، مات. "معيار ضغط سيليزيا مفتوح المصدر" . مؤرشف من الأصل في 21 يناير 2022. تم الاطلاع عليه في 10 مايو 2019 .
  10. ماهوني، مات (29 أغسطس 2016). "معيار ضغط النصوص الكبيرة، 0.2157 zstd" . مؤرشف من الأصل في 31 مارس 2022. تم الاطلاع عليه في 10 مايو 2019 .
  11. TurboBench: معيار ضغط محتوى الويب الثابت/الديناميكي ، PowTurbo، مؤرشف من الأصل في 17 مارس 2022 ، تم استرجاعه في 6 يناير 2026
  12. بوكلمان، برايان؛ بيفراسكي، جيم؛ شادورا، أوكسانا؛ تشانغ، تشي (11 أكتوبر 2017). "تحديث مساهمات ديانا" (ملف PDF) . مختبر فيرمي . مؤرشف (ملف PDF) من الأصل في 25 يناير 2018. تم الاطلاع عليه في 27 مارس 2024. أفاد مطورو فيسبوك بتحقيق تسارع هائل وتحسينات كبيرة في نسبة الضغط عند استخدام القواميس .
  13. كوليت، يان؛ تيرنر، تشيب (31 أغسطس 2016). "ضغط بيانات أصغر وأسرع مع Zstandard" . فيسبوك. مؤرشف من الأصل في 27 سبتمبر 2016. تم الاطلاع عليه في 3 سبتمبر 2016 .
  14. ^ "تنسيق الضغط Zstandard" . جيثب . فيسبوك. 28 أكتوبر 2021.
  15. 1 2 3 4 كوليت، يان (فبراير 2021). كوتشراوي، موراي س. (محرر). ضغط Zstandard ونوع الوسائط application/zstd . طلب ​​تعليقات من فريق عمل هندسة الإنترنت. IETF . doi : 10.17487/RFC8878 . RFC 8878. تم الاطلاع عليه في 26 فبراير 2023 .
  16. كوربيت، جوناثان (17 سبتمبر 2017). "بقية نافذة دمج 4.14 [ LWN.net ] " . lwn.net . مؤرشف من الأصل في 22 نوفمبر 2021. تم الاطلاع عليه في 27 مارس 2024 .
  17. "Linux_4.14" . Kernelnewbies.org . 30 ديسمبر 2017. مؤرشف من الأصل في 10 يناير 2018. تم الاطلاع عليه في 16 أغسطس 2018 .
  18. لارابيل، مايكل (8 سبتمبر 2017). "ضغط Zstd لأنظمة الملفات Btrfs وSquashfs مُعدّ لنظام لينكس 4.14، مُستخدم بالفعل في فيسبوك" . www.phoronix.com . مؤرشف من الأصل في 25 يوليو 2019. تم الاطلاع عليه في 13 نوفمبر 2017 .
  19. "دمج ZSTD في النواة · freebsd/Freebsd-SRC@28ef165" . GitHub . مشروع FreeBSD.
  20. "إضافة دعم ZSTD إلى ZFS · openzfs/ZFS@10b3c7f" . GitHub . OpenZFS. مؤرشف من الأصل في 10 سبتمبر 2020. تم الاطلاع عليه في 12 أكتوبر 2020 .
  21. "ترميز Zstandard - Amazon Redshift" . خدمات أمازون السحابية. 20 أبريل 2019. مؤرشف من الأصل في 14 أغسطس 2021. تم الاطلاع عليه في 24 يناير 2018 .
  22. ١ ٢ لارابيل، مايكل (١٢ مارس ٢٠١٨). " كانونيكال تعمل على حزم دبيان المضغوطة بتقنية Zstd لنظام أوبونتو" . phoronix.com . فورونيكس ميديا. مؤرشف من الأصل في ١٦ أغسطس ٢٠٢١. تم الاطلاع عليه في ٢٩ أكتوبر ٢٠١٩. يدرس مطورو كانونيكال استثناءً من تجميد الميزات للحصول على دعم Zstd Apt/Dpkg المُطوَّر حديثًا في أوبونتو ١٨.٠٤ LTS. وفي هذا السياق، ذكروا أنهم سيدرسون تفعيل ضغط Zstd للحزم افتراضيًا في أوبونتو ١٨.١٠.
  23. نيستور، ماريوس (12 مارس 2018). "يمكن تسريع تثبيتات أوبونتو الجديدة بنسبة 10% باستخدام خوارزمية ضغط Zstd" . سوفتبيديا . مؤرشف من الأصل في 6 أكتوبر 2021. تم الاطلاع عليه في 13 أغسطس 2018 .
  24. "سجل تغييرات دبيان لنظام apt" . دبيان . 19 أبريل 2021. تم الاطلاع عليه في 7 نوفمبر 2022 .
  25. "تغييرات/تحويل ضغط ملفات RPM إلى ضغط ZSTD" . ويكي مشروع فيدورا . مؤرشف من الأصل في 2 يونيو 2019. تم الاطلاع عليه في 8 يوليو 2020 .
  26. ثورمان، أندرو (14 أبريل 2021). "مُيزة فيدورا ورك ستيشن 34: ضغط Btrfs الشفاف" . مجلة فيدورا . تم الاطلاع عليه بتاريخ 12 مايو 2022 .
  27. "التغييرات/ضغط Btrfs الشفاف" . ويكي مشروع فيدورا . تم الاطلاع عليه بتاريخ 12 مايو 2022 .
  28. لارابيل، مايكل (16 أكتوبر 2019). "نظام Arch Linux يقترب من إطلاق حزم ZSTD المضغوطة لتثبيت Pacman بشكل أسرع" . فورونيكس . مؤرشف من الأصل في 18 مارس 2022. تم الاطلاع عليه في 21 أكتوبر 2019 .
  29. برودا، مارا (4 يناير 2020). "نستخدم الآن Zstandard بدلاً من xz لضغط الحزم" . آرتش لينكس . مؤرشف من الأصل في 18 مارس 2022. تم الاطلاع عليه في 5 يناير 2020 .
  30. برودا، مارا (25 مارس 2019). "RFC: (devtools) تغيير طريقة الضغط الافتراضية إلى zstd" . arch-dev-public (قائمة بريدية). مؤرشف من الأصل في 17 أغسطس 2021. تم الاطلاع عليه في 5 يناير 2020 .
  31. برودا، مارا؛ بولياك، ليفينتي (27 ديسمبر 2019). "makepkg.conf: تغيير طريقة الضغط الافتراضية إلى zstd" . جيت هاب .
  32. رازوليني، جيانكارلو (19 فبراير 2021). "أخبار: الانتقال إلى صور Zstandard افتراضيًا على mkinitcpio" . آرتش لينكس . تم الاطلاع عليه بتاريخ 28 ديسمبر 2021 .
  33. APPNOTE.TXT - مواصفات تنسيق ملف .ZIP، الإصدار: 6.3.8 ، PKWARE، 15 يونيو 2020 ، تم الاطلاع عليه في 7 يوليو 2020
  34. APPNOTE.TXT - مواصفات تنسيق ملف .ZIP، الإصدار: 6.3.7 ، PKWARE، 1 يونيو 2020 ، تم الاطلاع عليه في 6 يونيو 2020
  35. جارا، أدريانا (19 مارس 2024). "الجديد في كروم 123 | مدونة كروم" . كروم للمطورين . جوجل . تم الاطلاع عليه بتاريخ 16 أبريل 2024 .
  36. "فايرفوكس 126.0، اطلع على جميع الميزات الجديدة والتحديثات والإصلاحات" . مايو 2024. مؤرشف من الأصل في 13 مايو 2024. تم الاطلاع عليه في 15 مايو 2024 .
  37. ديجنان، لاري (31 أغسطس 2016). "فيسبوك يفتح خوارزمية ضغط البيانات Zstandard، ويهدف إلى استبدال التقنية الكامنة وراء Zip" . ZDnet . تم الاطلاع عليه في 1 سبتمبر 2016 .
  38. "Zstandard v1.0" . جيت هاب . فيسبوك. 31 أغسطس 2016. مؤرشف من الأصل في 7 أبريل 2023. تم الاطلاع عليه في 23 يناير 2025 .
  39. "v1.3.0/PATENTS · facebook/zstd" . GitHub . Facebook. 30 أغسطس 2016. مؤرشف من الأصل في 15 مايو 2021. تم الاطلاع عليه في 27 مارس 2024 .
  40. "إصدار Zstandard v1.3.1 · facebook/zstd" . GitHub . Facebook. 20 أغسطس 2017. مؤرشف من الأصل في 12 سبتمبر 2020. تم الاطلاع عليه في 27 مارس 2024 .
  41. "رخصة جديدة من Cyan4973 · طلب سحب رقم 801 · facebook/zstd" . GitHub . فيسبوك. 19 أغسطس 2017. مؤرشف من الأصل في 12 سبتمبر 2020. تم الاطلاع عليه في 27 مارس 2024 .