ZSTD หรือชื่อย่อของ Zstandard เป็นอัลกอริทึมการบีบอัดแบบไม่สูญเสียข้อมูลและรูปแบบไฟล์ที่มีประสิทธิภาพและรวดเร็ว พัฒนาโดย Yann Collet ที่ Facebook ออกแบบมาเพื่อให้มีอัตราการบีบอัดสูง ในขณะที่ยังคงความเร็วในการบีบอัดและการคลายการบีบอัดที่รวดเร็ว ทำให้เหมาะสำหรับสถานการณ์การบีบอัดแบบเรียลไทม์และการบีบอัดชุดข้อมูลขนาดใหญ่
รูปแบบ ZSTD อิงตามการผสมผสานระหว่างขั้นตอนเอนโทรปีที่รวดเร็วและขั้นตอนการบีบอัดแบบไม่สูญเสียข้อมูลที่มีประสิทธิภาพ ขั้นตอนเอนโทรปีใช้ Finite State Entropy (FSE) และการเข้ารหัส Huffman ในขณะที่ขั้นตอนการบีบอัดแบบไม่สูญเสียข้อมูลใช้ตัวแปรของอัลกอริทึม LZ77 ที่เรียกว่า Zstandard Dictionary Compression (ZDIC)
หนึ่งในคุณสมบัติหลักของ ZSTD คือความสามารถในการสร้างและใช้พจนานุกรมระหว่างการบีบอัด พจนานุกรมคือชุดข้อมูลที่แชร์ไว้ล่วงหน้า ซึ่งทั้งตัวบีบอัดและตัวคลายการบีบอัดใช้เพื่อปรับปรุงอัตราการบีบอัด ZSTD รองรับพจนานุกรมสองประเภท ได้แก่ พจนานุกรมที่กำหนดโดยเนื้อหาและพจนานุกรมที่ผู้ใช้จัดเตรียมไว้
พจนานุกรมที่กำหนดโดยเนื้อหาจะสร้างโดยตัวบีบอัด ZSTD โดยอัตโนมัติตามข้อมูลอินพุต ตัวบีบอัดจะวิเคราะห์ข้อมูลเพื่อระบุรูปแบบที่เกิดซ้ำและสร้างพจนานุกรมที่แสดงรูปแบบเหล่านี้ จากนั้นจะใช้พจนานุกรมระหว่างการบีบอัดเพื่อแทนที่รูปแบบที่เกิดซ้ำด้วยการอ้างอิงถึงพจนานุกรม ซึ่งส่งผลให้อัตราการบีบอัดสูงขึ้น
ในทางกลับกัน พจนานุกรมที่ผู้ใช้จัดเตรียมไว้จะสร้างโดยผู้ใช้และสามารถแชร์ระหว่างไฟล์ที่บีบอัดหลายไฟล์ พจนานุกรมเหล่านี้มีประโยชน์เมื่อบีบอัดข้อมูลที่คล้ายกันหรือเกี่ยวข้องกัน เนื่องจากช่วยให้ตัวบีบอัดสามารถใช้ประโยชน์จากความรู้ที่มีอยู่ก่อนเกี่ยวกับรูปแบบข้อมูล พจนานุกรมที่ผู้ใช้จัดเตรียมไว้สามารถปรับปรุงอัตราการบีบอัดได้อย่างมาก โดยเฉพาะอย่างยิ่งสำหรับไฟล์ขนาดเล็กหรือไฟล์ที่มีโครงสร้างข้อมูลทั่วไป
ZSTD รองรับระดับการบีบอัดหลายระดับ ตั้งแต่ 1 ถึง 22 โดยระดับที่สูงกว่าจะให้การบีบอัดที่ดีกว่าด้วยต้นทุนความเร็วในการบีบอัดที่ช้าลง ระดับการบีบอัดเริ่มต้นคือ 3 ซึ่งให้ความสมดุลที่ดีระหว่างอัตราการบีบอัดและความเร็ว ZSTD ยังมีระดับการบีบอัดพิเศษที่เรียกว่า "ultra" ซึ่งให้การบีบอัดสูงสุด แต่ใช้เวลามากขึ้นอย่างมาก
รูปแบบ ZSTD ประกอบด้วยส่วนหัวตามด้วยเฟรมที่บีบอัดแล้วหนึ่งเฟรมขึ้นไป ส่วนหัวมีเมตาดาต้าเกี่ยวกับข้อมูลที่บีบอัดแล้ว เช่น ID พจนานุกรม ขนาดหน ้าต่าง และจำนวนเฟรม เฟรมที่บีบอัดแล้วแต่ละเฟรมเป็นอิสระและสามารถคลายการบีบอัดได้แยกกัน ช่วยให้สามารถคลายการบีบอัดแบบขนานและเข้าถึงข้อมูลที่บีบอัดแล้วแบบสุ่มได้
เฟรมที่บีบอัดแล้วใน ZSTD ใช้การรวมกันของบล็อกตามตัวอักษรและบล็อกลำดับ บล็อกตามตัวอักษรมีข้อมูลดิบที่ไม่ได้บีบอัด ในขณะที่บล็อกลำดับมีการอ้างอิงถึงพจนานุกรมหรือข้อมูลที่เคยเห็นมาก่อน บล็อกลำดับจะเข้ารหัสโดยใช้ FSE หรือการเข้ารหัส Huffman เพื่อลดขนาดของการอ้างอิง
ZSTD ใช้เทคนิคหลายอย่างเพื่อปรับปรุงประสิทธิภาพและความเร็วในการบีบอัด เทคนิคหนึ่งคือการใช้ตารางแฮชเพื่อค้นหาลำดับที่ตรงกันในพจนานุกรมหรือข้อมูลที่เคยเห็นมาก่อนได้อย่างรวดเร็ว ตารางแฮชจะได้รับการอัปเดตอย่างต่อเนื่องเมื่อตัวบีบอัดประมวลผลข้อมูลอินพุต ช่วยให้ค้นหาการจับคู่ที่อาจเกิด ขึ้นได้อย่างมีประสิทธิภาพ
อีกเทคนิคการเพิ่มประสิทธิภาพที่ ZSTD ใช้คือกลยุทธ์การจับคู่แบบล่าช้า แทนที่จะเข้ารหัสการจับคู่ทันที ตัวบีบอัดจะค้นหาการจับคู่ที่ยาวกว่าต่อไป หากพบการจับคู่ที่ยาวกว่า ตัวบีบอัดสามารถเลือกเข้ารหัสการจับคู่ที่ยาวกว่าแทน ซึ่งส่งผลให้อัตราการบีบอัดดีขึ้น
ZSTD ยังมีโหมดที่รวดเร็วที่เรียกว่า "long distance matching" (LDM) ซึ่งช่วยให้สามารถตรวจจับการจับคู่ระยะไกลได้ LDM ใช้ตารางแฮชรองเพื่อจัดเก็บการจับคู่ที่อยู่ห่างกันมากในข้อมูลอินพุต โดยการพิจารณาการจับคู่ระยะไกลเหล่านี้ ZSTD สามารถปรับปรุงอัตราการบีบอัดสำหรับข้อมูลบางประเภท เช่น ข้อมูลที่มีการทำซ้ำหรือเป็นระยะ
นอกเหนือจากความสามารถในการบีบอัดแล้ว ZSTD ยังให้การตรวจจับและแก้ไขข้อผิดพลาดโดยใช้ checksum เฟรมที่บีบอัดแล้วแต่ละเฟรมมี checksum ของข้อมูลที่ไม่ได้บีบอัด ซึ่งช่วยให้ตัวคลายการบีบอัดสามารถตรวจสอบความสมบูรณ์ของข้อมูลระหว่างการคลายการบีบอัด หากตรวจพบข้อผิดพลาด ZSTD สามารถพยายามกู้คืนได้โดยการละทิ้งเฟรมที่เสียหายและดำเนินการต่อด้วยเฟรมถัดไป
ZSTD ได้รับการยอมรับอย่างกว้างขวางเนื่องจากประสิทธิภาพและความยืดหยุ่นที่น่าประทับใจ ใช้ในแอปพลิเคชันต่างๆ รวมถึงระบบจัดเก็บข้อมูล เอนจินฐานข้อมูล โซลูชันการสำรองข้อมูล และโปรโตคอลการถ่ายโอนข้อมูล รูปแบบไฟล์ยอดนิยมมากมาย เช่น Zstandard Archive (ZSTD), Zstandard Seekable Format (ZST) และ Zstandard Dictionary Format (ZDICT) อิงตามการบีบอัด ZSTD
ข้อดีอย่างหนึ่งของ ZSTD คือความเข้ากันได้กับแพลตฟอร์มและภาษาโปรแกรมที่หลากหลาย การใช้งานอ้างอิงของ ZSTD เขียนด้วย C และพกพาได้สูง ช่วยให้สามารถใช้ได้กับระบบปฏิบัติการและสถาปัตยกรรมต่างๆ นอกจากนี้ยังมีการผูกและพอร์ต ZSTD จำนวนมากสำหรับภาษา โปรแกรมต่างๆ ทำให้ง่ายต่อการรวมการบีบอัด ZSTD เข้ากับแอปพลิเคชันที่มีอยู่
ZSTD ยังมีเครื่องมืออินเทอร์เฟซบรรทัดคำสั่ง (CLI) ที่ช่วยให้ผู้ใช้สามารถบีบอัดและคลายการบีบอัดไฟล์โดยใช้ ZSTD เครื่องมือ CLI รองรับตัวเลือกและพารามิเตอร์ต่างๆ เช่น การตั้งค่าระดับการบีบอัด การระบุพจนานุกรม และการปรับการใช้หน่วยความจำ เครื่องมือ CLI มีประโยชน์อย่างยิ่งสำหรับการบีบอัดและคลายการบีบอัดไฟล์ในแบบแบตช์หรือสคริปต์
โดยสรุป ZSTD เป็นอัลกอริทึมการบีบอัดและรูปแบบไฟล์ที่มีประสิทธิภาพและหลากหลายสูง ซึ่งให้ความเร็วในการบีบอัดและคลายการบีบอัดที่รวดเร็ว อัตราการบีบอัดสูง และความสามารถในการใช้พจนานุกรมเพื่อปรับปรุงประสิทธิภาพ การผสมผสานระหว่างความเร็วและประสิทธิภาพในการบีบอัดทำให้เหมาะสำหรับแอปพลิเคชันที่หลากหลาย ตั้งแต่การบีบอัดแบบเรียลไทม์ไปจนถึงการบีบอัดชุดข้อมูลขนาดใหญ่ ด้วยชุดคุณสมบัติที่ครอบคลุม ความเข้ากันได้ของแพลตฟอร์ม และการนำไปใช้ที่เพิ่มขึ้น ZSTD จึงกลายเป็นตัวเลือกยอดนิยมสำหรับการบีบอัดข้อมูลในโดเมนต่างๆ
การบีบอัดไฟล์ช่วยลดความซ้ำซ้อนเพื่อให้ข้อมูลเดียวกันใช้บิตน้อยลง ขีดจำกัดสูงสุดของระยะทางที่คุณสามารถไปได้ถูกควบคุมโดยทฤษฎีข้อมูล: สำหรับการบีบอัดแบบไม่สูญเสียข้อมูล ขีดจำกัดคือเอนโทรปีของแหล่งที่มา (ดู ทฤษฎีบทการเข้ารหัสต้นทาง ของแชนนอนและบทความต้นฉบับของเขาในปี 1948 “ทฤษฎีทางคณิตศาสตร์ของการสื่อสาร”) สำหรับการบีบอัดแบบสูญเสียข้อมูล การแลกเปลี่ยนระหว่างอัตราและคุณภาพถูกจับโดย ทฤษฎีอัตรา-ความผิดเพี้ยน.
คอมเพรสเซอร์ส่วนใหญ่มีสองขั้นตอน ขั้นแรก แบบจำลอง จะทำนายหรือเปิดเผยโครงสร้างในข้อมูล ประการที่สอง ตัวเข้ารหัส จะเปลี่ยนการคาดการณ์เหล่านั้นให้เป็นรูปแบบบิตที่เกือบจะเหมาะสมที่สุด ตระกูลการสร้างแบบจำลองแบบคลาสสิกคือ Lempel–Ziv: LZ77 (1977) และ LZ78 (1978) ตรวจจับสตริงย่อยที่ซ้ำกันและส่งออกการอ้างอิงแทนไบต์ดิบ ในด้านการเข้ารหัส การเข้ารหัสฮัฟฟ์แมน (ดูบทความต้นฉบับ 1952) กำหนดรหัสที่สั้นกว่าให้กับสัญลักษณ์ที่มีแนวโน้มมากกว่า การเข้ารหัสเลขคณิต และ การเข้ารหัสช่วง เป็นทางเลือกที่ละเอียดกว่าซึ่งบีบเข้าใกล้ขีดจำกัดเอนโทรปีมากขึ้น ในขณะที่ ระบบเลขไม่สมมาตร (ANS) ที่ทันสมัยบรรลุการบีบอัดที่คล้ายกันด้วยการใช้งานที่ขับเคลื่อนด้วยตารางที่รวดเร็ว
DEFLATE (ใช้โดย gzip, zlib และ ZIP) รวม LZ77 เข้ากับการเข้ารหัสฮัฟฟ์แมน ข้อกำหนดของมันเป็นแบบสาธารณะ: DEFLATE RFC 1951, zlib wrapper RFC 1950, และรูปแบบไฟล์ gzip RFC 1952. Gzip ถูกจัดเฟรมสำหรับการสตรีมและอย่างชัดเจน ไม่พยายามให้การเข้าถึงแบบสุ่ม. รูปภาพ PNG กำหนดมาตรฐาน DEFLATE เป็นวิธ ีการบีบอัดเพียงวิธีเดียว (โดยมีหน้าต่างสูงสุด 32 KiB) ตามข้อกำหนด PNG “วิธีการบีบอัด 0… deflate/inflate… มากที่สุด 32768 ไบต์” และ W3C/ISO PNG ฉบับที่ 2.
Zstandard (zstd): คอมเพรสเซอร์สำหรับวัตถุประสงค์ทั่วไปรุ่นใหม่ที่ออกแบบมาสำหรับอัตราส่วนที่สูงพร้อมการคลายการบีบอัดที่รวดเร็วมาก รูปแบบ được ghi lại trong RFC 8878 (cũng gương HTML) và thông số kỹ thuật tham chiếu trên GitHub. Giống như gzip, khung cơ bản không nhắm đến truy cập ngẫu nhiên. Một trong những siêu năng lực của zstd là từ điển: các mẫu nhỏ từ kho dữ liệu của bạn giúp cải thiện đáng kể việc nén trên nhiều tệp nhỏ hoặc tương tự (xem tài liệu từ điển python-zstandard và ví dụ làm việc của Nigel Tao). Các triển khai chấp nhận cả từ điển “không có cấu trúc” và “có cấu trúc” (thảo luận).
Brotli: เหมาะสำหรับเนื้อหาเว็บ (เช่น แบบอักษร WOFF2, HTTP) มันผสมพจนานุกรมคงที่กับ แกน LZ+เอนโทรปีที่คล้ายกับ DEFLATE ข้อกำหนดคือ RFC 7932ซึ่งยังบันทึกหน้าต่างเลื่อนของ 2WBITS−16 โดย WBITS อยู่ใน [10, 24] (1 KiB−16 B ถึง 16 MiB−16 B) และ ไม่พยายามเข้าถึงแบบสุ่ม. Brotli มักจะเอาชนะ gzip ในข้อความเว็บในขณะที่ถอดรหัสได้อย่างรวดเร็ว
คอนเทนเนอร์ ZIP: ZIP เป็น ไฟล์เก็บถาวร ที่สามารถจัดเก็บรายการด้วยวิธีการบีบอัดต่างๆ (deflate, store, zstd, etc.) มาตรฐานโดยพฤตินัยคือ APPNOTE ของ PKWARE (ดู พอร์ทัล APPNOTE, สำเนาที่โฮสต์, และภาพรวม LC รูปแบบไฟล์ ZIP (PKWARE) / ZIP 6.3.3).
LZ4 มุ่งเป้าไปที่ความเร็วล้วนๆ ด้วยอัตราส่วนที่พอประมาณ ดู หน้าโครงการ (“การบีบอัดที่รวดเร็วอย่างยิ่ง”) และ รูปแบบเฟรม. เหมาะอย่างยิ่งสำหรับแคชในหน่วยความจำ, telemetry, หรือ hot paths ที่การคลายการบีบอัดต้องใกล้เคียงกับความเร็วของ RAM
XZ / LZMA ผลักดันความหนาแน่น (อัตราส่วนที่ดี) ด้วยการบีบอัดที่ค่อนข้างช้า XZ เป็นคอนเทนเนอร์; งานหนักส่วนใหญ่มักทำโดย LZMA/LZMA2 (การสร้างแบบจำลองคล้าย LZ77 + การเข้ารหัสช่วง) ดู รูปแบบไฟล์ .xz, ข้อมูลจำเพาะของ LZMA (Pavlov), และบันทึกเคอร์เนลของลินุกซ์ บน XZ Embedded. XZ มักจะบีบอัดได้ดีกว่า gzip และมักจะแข่งขันกับตัวแปลงสัญญาณที่ทันสมัยที่มีอัตราส่วนสูง แต่ใช้เวลาเข้ารหัสนานกว่า
bzip2 ใช้ การแปลง Burrows–Wheeler (BWT), move-to-front, RLE, และการเข้ารหัสฮัฟฟ์แมน โดยทั่วไปจะมีขนาดเล็กกว่า gzip แต่ช้ากว่า; ดู คู่มืออย่างเป็นทางการ และหน้า man (Linux).
“ขนาดหน้าต่าง” มีความสำคัญ การอ้างอิง DEFLATE สามารถมองย้อนกลับไปได้เพียง 32 KiB (RFC 1951 และขีดจำกัด 32 KiB ของ PNG ที่ระบุไว้ที่นี่). หน้าต่างของ Brotli มีตั้งแต่ประมาณ 1 KiB ถึง 16 MiB (RFC 7932). Zstd ปรับแต่งหน้าต่างและความลึกของการค้นหาตามระดับ (RFC 8878). สตรีมพื้นฐานของ gzip/zstd/brotli ได้รับการออกแบบมาสำหรับการถอดรหัสตามลำดับ; รูปแบบพื้นฐาน ไม่รับประกันการเข้าถึงแบบสุ่ม, แม้ว่าคอนเทนเนอร์ (เช่น ดัชนี tar, เฟรมแบบแบ่งส่วน, หรือดัชนีเฉพาะรูปแบบ) สามารถแบ่งชั้นได้
รูปแบบข้างต้นคือ ไม่สูญเสียข้อมูล: คุณสามารถสร้างไบต์ที่แน่นอนขึ้นมาใหม่ได้ ตัวแปลงสัญญาณสื่อมักเป็น สูญเสียข้อมูล: พวกเขาทิ้งรายละเอียดที่มองไม่เห็นเพื่อให้อัตราบิตต่ำลง ในภาพ, JPEG แบบคลาสสิก (DCT, การหาปริมาณ, การเข้ารหัสเอนโทรปี) ถูกกำหนดมาตรฐานใน ITU-T T.81 / ISO/IEC 10918-1. ในด้านเสียง, MP3 (MPEG-1 Layer III) และ AAC (MPEG-2/4) อาศัยแบบจำลองการรับรู้และการแปลง MDCT (ดู ISO/IEC 11172-3, ISO/IEC 13818-7, และภาพรวม MDCT ที่นี่). การสูญเสียและไม่สูญเสียข้อมูลสามารถอยู่ร่วมกันได้ (เช่น PNG สำหรับเนื้อหา UI; ตัวแปลงสัญญาณเว็บสำหรับภาพ/วิดีโอ/เสียง)
ทฤษฎี: แชนนอน 1948 · อัตรา-ความผิดเพี้ยน · การเข้ารหัส: ฮัฟฟ์แมน 1952 · การเข้ารหัสเลขคณิต · การเข้ารหัสช่วง · ANS. รูปแบบ: DEFLATE · zlib · gzip · Zstandard · Brotli · เฟรม LZ4 · รูปแบบ XZ. สแต็ก BWT: Burrows–Wheeler (1994) · คู่มือ bzip2. สื่อ: JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
สรุป: เลือกคอมเพรสเซอร์ที่ตรงกับข้อมูลและข้อจำกัดของคุณ วัดผลจากข้อมูลจริง และ อย่าลืมประโยชน์จากพจนานุกรมและการจัดเฟรมอย่างชาญฉลาด ด้วยการจับคู่ที่เหมาะสม คุณจะได้รับ ไฟล์ขนาดเล็กลง, การถ่ายโอนที่เร็วขึ้น, และแอปที่เร็วขึ้น — โดยไม่สูญเสียความถูกต้องหรือการพกพา
การบีบอัดไฟล์คือกระบวนการที่ลดขนาดไฟล์หรือไฟล์ทั้งหมด โดยทั่วไปจะใช้เพื่อประหยัดพื้นที่จัดเก็บหรือเร่งความเร็วในการส่งผ่านเครือข่าย
การบีบอัดไฟล์ทำงานโดยระบุและการนำข้อมูลที่ซ้ำซ้อนออก มันใช้อัลกอริทึมเพื่อเข้ารหัสข้อมูลเดิมในพื้นที่ที่เล็กกว่า
สองประเภทหลักของการบีบอัดไฟล์คือการบีบอัดแบบสูญเสียและแบบไม่สูญเสีย การบีบอัดแบบไม่สูญเสียอนุญาตให้ไฟล์เดิมสามารถถูกกู้คืนได้แบบสมบูรณ์เมื ่อการบีบอัดแบบสูญเสียช่วยลดขนาดไฟล์อย่างมากด้วยการสูญเสียคุณภาพข้อมูลบางส่วน
ตัวอย่างของเครื่องมือการบีบอัดไฟล์ที่นิยมคือ WinZip ซึ่งรองรับรูปแบบการบีบอัดหลายรูปแบบ รวมถึง ZIP และ RAR
ด้วยการบีบอัดแบบไม่สูญเสีย คุณภาพจะไม่เปลี่ยนแปลง หากแต่ด้วยการบีบอัดแบบสูญเสีย อาจมีการลดลงของคุณภาพเพราะการกำจัดข้อมูลที่ไม่สำคัญเพื่อลดขนาดไฟล์มากขึ้น
ใช่ การบีบอัดไฟล์ปลอดภัยในเชิงของความไม่เปล่าเสีย โดยเฉพาะด้วยการบีบอัดแบบไม่สูญเสีย แต่เหมือนกับไฟล์ใด ๆ ไฟล์ที่ถูกบีบอัดสามารถถูกกลายเป็นเป้าหมายของมัลแวร์หรือไวรัส ดังนั้นเสมอแล้วควรมีซอฟต์แวร์ความปลอดภัยที่น่าเชื่อถือ
แทบทุกประเภทของไฟล์สามารถบีบอัดได้ รวมถึงไฟล์ข้อความ ภาพ ข้อมูลเสียง วิดีโอ และไฟล์ซอฟต์แวร์ อย่างไรก็ตาม ระดับการบีบอัดที่สามารถทำได้สามารถแตกต่างกันอย่างมากขึ้นอยู่กับประเภทไฟล์
ไฟล์ ZIP เป็นประเภทของรูปแบบไฟล์ที่ใช้การบีบอัดแบบไม่สูญเสียเพื่อลดขนาดไฟล์หนึ่งหรือหลายไฟล์ ไฟล์หลายไฟล์ในไฟล์ ZIP ถูกจัดรวมเข้าด้วยกันเป็นไฟล์เดียวทำให้การแบ่งปันง่ายขึ้น
จริงแล้วด้วยทางเทคนิค คุณสามารถบีบอัดไฟล์ที่ถูกบีบอัดแล้ว แต่การลดขนาดเพิ่ มเติมอาจจะมีน้อยหรือแม้แต่ทำงานตรงข้าม การบีบอัดไฟล์ที่ถูกบีบอัดแล้วอาจทำให้ขนาดของมันเพิ่มขึ้นเนื่องจากมีการเพิ่มข้อมูลเมตาดาตาโดยอัลกอริทึมการบีบอัด
เพื่อถอดการบีบอัดไฟล์ คุณโดยทั่วไปจะต้องมีเครื่องมือการถอดความกดหรือ unzip เช่น WinZip หรือ 7-Zip เครื่องมือเหล่านี้สามารถแยกไฟล์เดิมออกจากรูปแบบที่ถูกบีบอัด