อ่าน 5 นาที
ซปาคิว
ZPAQ เป็น โปรแกรมบีบ อัดไฟล์แบบ โอเพนซอร์สที่ทำงานบน บรรทัดคำสั่ง สำหรับ Windows และ Linux มันใช้รูปแบบการบันทึกการเปลี่ยนแปลงหรือการเพิ่มข้อมูลเท่านั้น...
ซปาคิว
| ซปาคิว | |
|---|---|
| นักพัฒนา | แมตต์ มาโฮนีย์ |
| เวอร์ชันเสถียร | 7.15 [ 1 ] |
| เขียนเป็น | ซี++ |
| ระบบปฏิบัติการ | ไมโครซอฟต์ วินโดวส์ , ลินุกซ์ |
| แพลตฟอร์ม | IA-32 , x86-64 , AArch64 |
| พิมพ์ | โปรแกรมจัดเก็บไฟล์ |
| ใบอนุญาต | MIT , สาธารณสมบัติ |
| เว็บไซต์ | mattmahoney.net/dc/zpaq.html |
| ที่เก็บข้อมูล |
|
ZPAQเป็นโปรแกรมบีบ อัดไฟล์แบบ โอเพนซอร์สที่ทำงานบนบรรทัดคำสั่ง สำหรับWindowsและLinuxมันใช้รูปแบบการบันทึกการเปลี่ยนแปลงหรือการเพิ่มข้อมูลเท่านั้น ซึ่งสามารถย้อนกลับไปยังสถานะก่อนหน้าเพื่อเรียกคืนไฟล์และไดเร็กทอรีเวอร์ชันเก่าได้ รองรับการอัปเดตแบบเพิ่มทีละน้อยอย่างรวดเร็วโดยการเพิ่มเฉพาะไฟล์ที่มีวันที่แก้ไขล่าสุดเปลี่ยนแปลงไปจากการอัปเดตครั้งก่อน มันบีบอัดโดยใช้การลดความซ้ำซ้อนและอัลกอริทึมหลายแบบ ( LZ77 , BWTและการผสมบริบท ) ขึ้นอยู่กับประเภทข้อมูลและระดับการบีบอัดที่เลือก เพื่อรักษาความเข้ากันได้ทั้งไปข้างหน้าและย้อนหลังระหว่างเวอร์ชันต่างๆ ในขณะที่อัลกอริทึมการบีบอัดได้รับการปรับปรุง มันจะจัดเก็บอัลกอริทึมการคลายการบีบอัดไว้ในไฟล์เก็บถาวร ซอร์สโค้ดของ ZPAQ มีAPI สาธารณะlibzpaqซึ่งให้บริการการบีบอัดและการคลายการบีบอัดแก่ แอปพลิเคชัน C++เชื่อกันว่ารูปแบบนี้ไม่มีข้อจำกัดด้าน สิทธิบัตร
รูปแบบไฟล์เก็บถาวร
ไฟล์จะถูกบันทึกในรูปแบบบันทึกประจำวันระดับ 2 ของ ZPAQ [ 2 ]มาตรฐานกำหนดรูปแบบไว้สองแบบ คือ สตรีมมิ่งและบันทึกประจำวัน มีเพียงรูปแบบบันทึกประจำวันเท่านั้นที่รองรับการลบข้อมูลซ้ำ คุณลักษณะของไดเร็กทอรี และไฟล์หลายเวอร์ชันที่มีวันที่กำกับ
รูปแบบไฟล์เก็บข้อมูลแบบสตรีมมิ่งถูกออกแบบมาให้สามารถแตกไฟล์ได้ในรอบเดียว ไฟล์เก็บข้อมูลจะถูกแบ่งออกเป็นบล็อกตามลำดับ ซึ่งสามารถคลายการบีบอัดได้อย่างอิสระพร้อมกัน บล็อกจะถูกแบ่งออกเป็นส่วนย่อยๆ ที่ต้องคลายการบีบอัดตามลำดับ ส่วนหัวของแต่ละบล็อกจะมีคำอธิบายของอัลกอริทึมการคลายการบีบอัด แต่ละส่วนย่อยจะมีส่วนหัวที่ประกอบด้วยชื่อไฟล์ (ถ้ามี) และคำอธิบายเพิ่มเติมสำหรับข้อมูลเมตา เช่น ขนาด วันที่ และคุณลักษณะต่างๆ รวมถึงค่าตรวจสอบความถูกต้องSHA-1ของข้อมูลต้นฉบับ (ถ้ามี) สำหรับการตรวจสอบความสมบูรณ์ หากละเว้นชื่อไฟล์ จะถือว่าเป็นส่วนต่อเนื่องจากไฟล์ที่มีชื่อสุดท้าย ซึ่งอาจอยู่ในบล็อกก่อนหน้า ดังนั้น การแทรก การลบ หรือการจัดเรียงลำดับบล็อกใหม่ในไฟล์เก็บข้อมูลแบบสตรีมมิ่งจะมีผลเช่นเดียวกับการดำเนินการกับข้อมูลที่บล็อกเหล่านั้นแสดงถึง
รูปแบบการบันทึกข้อมูลประกอบด้วยลำดับของธุรกรรมหรือการอัปเดต การอัปเดตแต่ละครั้งประกอบด้วยบล็อก 4 ประเภท ได้แก่ บล็อกส่วนหัวของธุรกรรม ลำดับของบล็อกข้อมูล ลำดับของตารางส่วนย่อยที่สอดคล้องกัน และลำดับของบล็อกดัชนี บล็อกส่วนหัวของธุรกรรมประกอบด้วยวันที่ของธุรกรรมและตัวชี้ที่ข้ามบล็อกข้อมูลเพื่อให้สามารถอ่านดัชนีของไฟล์เก็บถาวรได้อย่างรวดเร็ว บล็อกข้อมูลประกอบด้วยลำดับของส่วนย่อยของไฟล์ที่ถูกบีบอัดเข้าด้วยกัน ตารางส่วนย่อยแสดงขนาดและค่าแฮช SHA-1 ของแต่ละส่วนย่อย บล็อกดัชนีประกอบด้วยรายการแก้ไขดัชนีไฟล์เก็บถาวรโดยรวม การแก้ไขอาจเป็นการอัปเดตไฟล์หรือการลบไฟล์ การอัปเดตประกอบด้วยชื่อไฟล์ วันที่แก้ไขล่าสุด คุณสมบัติ และรายการตัวชี้ส่วนย่อยไปยังธุรกรรมปัจจุบันและธุรกรรมก่อนหน้า ส่วนย่อยอาจถูกใช้ร่วมกันโดยไฟล์มากกว่าหนึ่งไฟล์ การลบไม่ได้ลบข้อมูลใดๆ ออกจากไฟล์เก็บถาวร แต่เป็นการระบุว่าไฟล์นั้นจะไม่ถูกดึงออกมาเว้นแต่จะย้อนกลับไฟล์เก็บถาวรไปยังวันที่ก่อนหน้า
มาตรฐาน ZPAQ ไม่ได้ระบุอัลกอริทึมการบีบอัด แต่ระบุรูปแบบสำหรับการแสดงอัลกอริทึมการคลายการบีบอัดในส่วนหัวของบล็อก อัลกอริทึมการคลายการบีบอัดเขียนด้วยภาษาที่เรียกว่า ZPAQL และจัดเก็บเป็นไบต์โค้ด ซึ่งสามารถตีความหรือแปลงโดยตรงเป็นโค้ด x86 32 หรือ 64 บิตและเรียกใช้งานได้ โปรแกรม ZPAQL ประกอบด้วย 3 ส่วน
- COMP - ชุดส่วนประกอบการสร้างแบบจำลองบริบทที่เป็นตัวเลือกเสริม
- HCOMP - รหัสเครื่องสำหรับคำนวณบริบทของส่วนประกอบ COMP
- PCOMP - รหัสเครื่องเสริมสำหรับประมวลผลข้อมูลที่ถอดรหัสแล้วเพิ่มเติม
โมเดล COMP นั้นใช้ PAQเป็นพื้นฐานซึ่งบีบอัดข้อมูลทีละบิตโดยใช้การเข้ารหัสแบบเลขคณิตมีส่วนประกอบทั้งหมด 9 ประเภท แต่ละส่วนประกอบจะรับบริบทและอาจรวมถึงการคาดการณ์จากส่วนประกอบก่อนหน้า และส่งออกการคาดการณ์หรือความน่าจะเป็นที่บิตถัดไปจะเป็น 1 เอาต์พุตของส่วนประกอบสุดท้ายจะถูกเข้ารหัสแบบเลขคณิต ประเภทของส่วนประกอบมีดังนี้:
- CONST - การคาดการณ์แบบคงที่
- CM - โมเดลบริบท (Context model) บริบทนี้ใช้ในการค้นหาการทำนายในตาราง เมื่อมีการอัปเดต ข้อมูลที่เลือกจะถูกปรับเพื่อลดข้อผิดพลาดในการทำนาย
- ICM - โมเดลบริบททางอ้อม (Indirect context model) บริบทนี้ใช้ในการค้นหาสถานะ 8 บิตที่แสดงถึงประวัติบิตล่าสุด ประวัติจะเลือกการคาดการณ์เช่นเดียวกับ CM
- MIX - กลุ่มของการคาดการณ์จะถูกรวมเข้าด้วยกันโดยใช้การหาค่าเฉลี่ยถ่วงน้ำหนักในโดเมนโลจิสติก หรือ log(p/(1-p)) โดยน้ำหนักจะถูกเลือกตามบริบท เมื่อมีการอัปเดต น้ำหนักจะถูกปรับเพื่อให้ค่าป้อนเข้าที่แม่นยำกว่าได้รับความสำคัญมากขึ้น
- MIX2 - วงจร MIX ที่มีอินพุต 2 ตัว โดยกำหนดค่าน้ำหนักให้รวมกันได้ไม่เกิน 1
- AVG - MIX2 ที่มีการกำหนดน้ำหนักคงที่
- SSE - ตัวประมาณค่าสัญลักษณ์รอง (Secondary symbol estimator) ค้นหาค่าทำนายจากตารางค่าประมาณแบบสอดแทรก (interpolated table) โดยพิจารณาจากบริบทและค่าทำนายแบบควอนไทซ์จากส่วนประกอบอื่น
- ISSE - ตัวประมาณสัญลักษณ์รองทางอ้อม (Indirect Secondary Symbol Estimator) บริบทจะเลือกประวัติบิตเช่นเดียวกับ ICM จากนั้นประวัติบิตจะเลือกคู่ของน้ำหนักเพื่อผสมอินพุตกับค่าคงที่ 1
- MATCH - ค้นหาการปรากฏก่อนหน้าของบริบทและทำนายบิตที่ตามมา โดยความแม่นยำจะขึ้นอยู่กับความยาวของการจับคู่
ส่วน HCOMP ทำหน้าที่คำนวณบริบทสำหรับส่วนประกอบต่างๆ ในส่วน COMP มันเป็นเครื่องเสมือนที่มีสถานะเป็นรีจิสเตอร์ 32 บิต 4 ตัว (A, B, C, D) ตัวนับโปรแกรม 16 บิต บิตแฟล็กเงื่อนไข และอาร์เรย์หน่วยความจำสองชุด ชุดหนึ่งเป็นไบต์ (M) และอีกชุดเป็นเวิร์ด 32 บิต (H) ส่วนต้นของ H จะเป็นอาร์เรย์ของบริบท โปรแกรมที่คล้ายกับ ภาษาแอสเซมบลีจะถูกเรียกใช้หนึ่งครั้งสำหรับแต่ละไบต์ที่เข้ารหัสหรือถอดรหัส โดยใช้ไบต์นั้นเป็นอินพุตใน A บริบทสุดท้ายที่ส่วน COMP เห็นคือบริบทที่คำนวณได้รวมกับบิตที่เห็นก่อนหน้านี้ของไบต์ปัจจุบัน
ส่วน PCOMP ซึ่งเป็นส่วนเสริม ใช้สำหรับประมวลผลข้อมูลที่ถอดรหัสแล้ว โดยจะทำงานในเครื่องเสมือนแยกต่างหากเช่นเดียวกับ HCOMP อย่างไรก็ตาม แตกต่างจากส่วน COMP และ HCOMP ซึ่งใช้ทั้งการบีบอัดและการคลายการบีบอัด ส่วน PCOMP จะทำงานเฉพาะในระหว่างการคลายการบีบอัดเท่านั้น ส่วนบีบอัดมีหน้าที่ดำเนินการย้อนกลับกับข้อมูลอินพุตก่อนการเข้ารหัส
ตัวอย่าง ZPAQL
ซอร์สโค้ดของ ZPAQL ใช้ไวยากรณ์แบบข้อความ โดยแต่ละคำที่คั่นด้วยช่องว่างจะประกอบกันเป็นหนึ่งไบต์ในกรณีส่วนใหญ่ และมีคำอธิบายอยู่ในวงเล็บ ตัวอย่างต่อไปนี้เป็นการ กำหนดค่า ระดับกลางซึ่งคล้ายกับการบีบอัดระดับ 5 โดยอธิบายถึงลำดับของส่วนประกอบ ICM-ISSE ที่รับบริบทแฮชลำดับที่ 0 ถึง 5 การจับคู่ (MATCH) ที่รับบริบทลำดับที่ 7 และขั้นตอนสุดท้ายคือการหาค่าเฉลี่ยของการคาดการณ์บิตเหล่านี้โดยใช้การผสมผสาน (MIX) ไม่มีการประมวลผลภายหลัง
comp 3 3 0 0 8 (hh hm ph pm n) 0 icm 5 (order 0...5 chain) 1 isse 13 0 2 isse 17 1 3 isse 18 2 4 isse 18 3 5 isse 19 4 6 match 22 24 (order 7) 7 mix 16 0 7 24 255 (order 1) hcomp c++ *c=a b=c a=0 (save in rotating buffer M) d= 1 hash *d=a (orders 1...5 for isse) b-- d++ hash *d=a b-- d++ hash *d=a b-- d++ hash *d=a b-- d++ hash *d=a b-- d++ hash b-- hash *d=a (order 7 for match) d++ a=*c a<<= 8 *d=a (order 1 for mix) halt endพารามิเตอร์ COMP อธิบายขนาดฐาน 2 ของอาร์เรย์คำและไบต์ (hh, hm) โดยแต่ละอาร์เรย์มีขนาด 8 ไบต์ในส่วน HCOMP และไม่ได้ใช้ในส่วน PCOMP มีส่วนประกอบที่กำหนดหมายเลขไว้ n = 8 ส่วน ส่วนประกอบแต่ละส่วนรับพารามิเตอร์ที่อธิบายขนาดตารางและอินพุต โดยเฉพาะอย่างยิ่ง ISSE แต่ละตัวจะรับอินพุตจากส่วนประกอบก่อนหน้า และ MIX จะรับอินพุตจากส่วนประกอบทั้ง 7 ส่วน เริ่มต้นที่ 0 บรรทัด "5 isse 19 4" หมายความว่า ISSE มีขนาดตาราง 2 19+6บิตประวัติ และรับอินพุตจากส่วนประกอบที่ 4
ในส่วน HCOMP รีจิสเตอร์ B และ C ชี้ไปยังอาร์เรย์หมุนขนาด 8 ไบต์ M และ D ชี้ไปยังอาร์เรย์ขนาด 8 คำ H โดย M ใช้สำหรับเก็บข้อมูล 8 ไบต์สุดท้ายจากรีจิสเตอร์ A และ C ชี้ไปยังส่วนหัวของบัฟเฟอร์นี้ คำสั่ง HASH จะคำนวณ:
a = (a + *b + 512) * 773;
ดังนั้น รหัสจึงจัดเก็บแฮชบริบทของลำดับต่างๆ ใน H[0]...H[7]
การลบข้อมูลซ้ำซ้อน
ในระหว่างการอัปเดต ZPAQ จะแบ่งไฟล์อินพุตออกเป็นส่วนย่อย คำนวณค่าแฮช SHA-1 ของแต่ละส่วน และเปรียบเทียบกับค่าแฮชที่จัดเก็บไว้ในไฟล์เก็บถาวร หากตรงกัน จะถือว่าส่วนย่อยเหล่านั้นเหมือนกัน และจะเก็บเพียงตัวชี้ไปยังส่วนย่อยที่ถูกบีบอัดก่อนหน้านี้เท่านั้น มิฉะนั้น ส่วนย่อยนั้นจะถูกบรรจุลงในบล็อกเพื่อทำการบีบอัด ขนาดบล็อกสามารถมีได้ตั้งแต่ 16 MiB ถึง 64 MiB ขึ้นอยู่กับระดับการบีบอัด
ไฟล์จะถูกแบ่งออกเป็นส่วนย่อยตามขอบเขตที่ขึ้นอยู่กับเนื้อหา แทนที่จะใช้ลายนิ้วมือแบบ Rabinนั้น ZPAQ ใช้แฮชแบบหมุนเวียนซึ่งขึ้นอยู่กับ 32 ไบต์สุดท้ายที่ไม่ถูกทำนายโดยบริบทลำดับที่ 1 บวกกับไบต์ที่ทำนายได้ระหว่างนั้น หาก 16 บิตแรกของแฮช 32 บิตเป็น 0 ทั้งหมด ขอบเขตของส่วนย่อยจะถูกทำเครื่องหมายไว้ ซึ่งจะทำให้ขนาดส่วนย่อยโดยเฉลี่ยอยู่ที่ 64 KiB
แฮชแบบหมุนเวียนใช้ตารางขนาด 256 ไบต์ ซึ่งประกอบด้วยไบต์ที่พบครั้งสุดท้ายในแต่ละบริบทลำดับที่ 1 ที่เป็นไปได้ แฮชจะได้รับการอัปเดตโดยการเพิ่มไบต์ถัดไป แล้วคูณด้วยค่าคงที่คี่หากไบต์นั้นถูกทำนายไว้ หรือคูณด้วยเลขคู่ที่ไม่ใช่พหุคูณของ 4 หากไบต์นั้นไม่ถูกทำนายไว้
การบีบอัด
ZPAQ มีระดับการบีบอัด 5 ระดับ ตั้งแต่เร็วที่สุดไปจนถึงดีที่สุด ในทุกระดับยกเว้นระดับที่ดีที่สุด จะใช้สถิติจากตารางการทำนายลำดับที่ 1 ที่ใช้สำหรับการกำจัดข้อมูลซ้ำซ้อนเพื่อทดสอบว่าข้อมูลที่ป้อนเข้ามานั้นดูเหมือนสุ่มหรือไม่ หากเป็นเช่นนั้น ข้อมูลจะถูกจัดเก็บโดยไม่บีบอัดเพื่อเพิ่มประสิทธิภาพความเร็ว
ZPAQ จะใช้การแปลง E8E9 (ดู: BCJ ) เพื่อปรับปรุงการบีบอัดโค้ด x86 ที่มักพบในไฟล์ .exe และ .dll การแปลง E8E9 จะสแกนหาคำสั่ง CALL และ JMP (รหัสคำสั่ง E8 และ E9 ในเลขฐานสิบหก) และแทนที่ที่อยู่สัมพัทธ์ด้วยที่อยู่สัมบูรณ์ จากนั้นจะแทรกโค้ดลงในส่วน PCOMP เพื่อทำการแปลงผกผัน
การกู้คืนข้อผิดพลาด
ZPAQ ขาดระบบแก้ไขข้อผิดพลาด แต่มีคุณสมบัติหลายอย่างที่ช่วยจำกัดความเสียหายหากไฟล์เก็บข้อมูลเสียหาย ในระหว่างการคลายไฟล์ ระบบจะตรวจสอบค่าแฮช SHA-1 ทั้งหมด หากค่าแฮชไม่ตรงกันหรือเกิดข้อผิดพลาดอื่น ๆ ระบบจะแสดงคำเตือนและละเว้นบล็อกนั้น บล็อกเริ่มต้นด้วย "แท็กระบุตำแหน่ง" ขนาด 13 ไบต์ ซึ่งประกอบด้วยสตริงที่เลือกแบบสุ่มแต่คงที่ เพื่อให้สามารถค้นหาจุดเริ่มต้นของบล็อกถัดไปได้โดยการสแกน หากส่วนข้อมูลสูญหาย ไฟล์ทั้งหมดที่อ้างอิงถึงส่วนนั้นและส่วนที่เหลือในบล็อกก็จะสูญหายไปด้วย หากตารางส่วนข้อมูลสูญหาย สามารถกู้คืนได้จากรายการขนาดส่วนข้อมูลที่ซ้ำซ้อนซึ่งจัดเก็บไว้ในบล็อกข้อมูลที่เกี่ยวข้อง และโดยการคำนวณค่าแฮชใหม่ ในกรณีนี้ ระบบจะตรวจสอบค่าแฮชที่สองของบล็อกข้อมูลทั้งหมด หากบล็อกดัชนีสูญหาย ไฟล์ที่เกี่ยวข้องก็จะสูญหายไปด้วย บล็อกดัชนีมีขนาดเล็ก (16 KiB) เพื่อจำกัดความเสียหาย
การอัปเดตจะดำเนินการโดยการเพิ่มส่วนหัวธุรกรรมชั่วคราว จากนั้นจึงอัปเดตส่วนหัวนั้นเป็นขั้นตอนสุดท้าย หากการอัปเดตถูกขัดจังหวะ ส่วนหัวชั่วคราวจะส่งสัญญาณไปยัง ZPAQ ว่าไม่พบข้อมูลที่มีประโยชน์หลังจากนั้น การอัปเดตครั้งถัดไปจะเขียนทับข้อมูลส่วนเกินนี้
การใช้งานพื้นฐาน
การสร้างคลังข้อมูล และการอัปเดตคลังข้อมูล
zpaq add directory/archive.zpaq directory/source_directory -mX -key password
ตัวเลือก-mX(โดยที่ X คือระดับการบีบอัดตั้งแต่ 0 ถึง 5) และ-key(ซึ่งทำการ เข้ารหัส AES-256 ) สามารถละเว้นได้ ระดับการบีบอัด 0 จะไม่บีบอัดข้อมูล แต่ยังคงทำการลดความซ้ำซ้อนของข้อมูล ระดับการบีบอัด 4 และ 5 อาจใช้เวลานานมาก ค่าเริ่มต้น (1) ใช้การบีบอัด LZ77 แบบง่าย
แสดงรายการเนื้อหาในคลังเก็บข้อมูล
zpaq list archive.zpaqคำสั่งนี้จะแสดงรายการไฟล์และไดเร็กทอรีของเวอร์ชันล่าสุด การเพิ่ม คำสั่งนี้ -allจะแสดงรายการทุกเวอร์ชันของไฟล์และไดเร็กทอรีทั้งหมดในรูปแบบ <ชื่อไฟล์> version_number/directory/file_name.<ชื่อไฟล์> .< ชื่อไดเร็กทอรี>.<ชื่อไฟล์ ...
การแตกไฟล์
zpaq extract archive.zpaqคำสั่งนี้จะแตกไฟล์เวอร์ชันล่าสุดของไฟล์เก็บถาวรทั้งหมดในไดเร็กทอรีที่ใช้งานอยู่ ส่วนคำสั่งนี้zpaq extract backup.zpaq pathจะแตกไฟล์เฉพาะไดเร็กทอรี (หรือไฟล์) ที่ระบุเท่านั้น การเพิ่ม-until Nตัวเลือกจะเลือกเวอร์ชัน โดยสามารถใช้ตัวเลขติดลบได้ เช่น -2 จะแตกไฟล์เวอร์ชันที่สามจากเวอร์ชันล่าสุด ตัวเลือกเสริม-toจะบอก ZPAQ ว่าจะบันทึกไฟล์ที่แตกออกมาไว้ที่ใด
zpaq extract backup.zpaq -all -only "*muppet*"จะแตกไฟล์และไดเร็กทอรีทุกเวอร์ชันที่มีชื่อประกอบด้วยคำว่า "muppet" ไฟล์เวอร์ชันต่างๆ จะถูกจัดเก็บไว้ในไดเร็กทอรีที่แตกต่างกัน ( 0001/ 0002/ 0003/เป็นต้น) -onlyตัวเลือกนี้เป็นตัวเลือกเสริม
ประวัติศาสตร์
- 15 กุมภาพันธ์ 2552 - zpaq เวอร์ชัน 0.01 รุ่นทดลอง
- 12 มี.ค. 2552 - ข้อกำหนด zpaq 1.00 ได้รับการสรุปเรียบร้อยแล้ว โดยรับประกันความเข้ากันได้กับเวอร์ชันก่อนหน้า
- 29 กันยายน 2552 - zpaq 1.06 ปรับปรุงข้อกำหนดเป็นเวอร์ชัน 1.01 เพิ่มแท็กระบุตำแหน่งเพื่อรองรับไฟล์เก็บถาวรแบบแตกไฟล์ได้เอง
- 14 ตุลาคม 2552 - zpaq 1.09 เพิ่ม ZPAQL ลงในตัวแปลภาษา C++ เพื่อเพิ่มความเร็ว
- 27 กันยายน 2553 - แยก API ของ libzpaq เวอร์ชัน 0.01 ออกมาต่างหาก
- 21 มกราคม 2554 - pzpaq 0.01 เวอร์ชันมัลติเธรดตัวแรก ซึ่งต่อมาได้นำกลับมารวมเข้ากับ zpaq อีกครั้ง
- 13 พ.ย. 2554 - zpaq 4.00 เพิ่มคอมไพเลอร์ JIT (ZPAQL สำหรับ x86) ทำให้ไม่จำเป็นต้องใช้คอมไพเลอร์ C++ ภายนอกสำหรับการปรับแต่งประสิทธิภาพอีกต่อไป
- 1 กุมภาพันธ์ 2555 - zpaq 5.00 อัปเดตข้อกำหนดเป็นเวอร์ชัน 2.00 เพื่ออนุญาตให้ส่วน COMP ว่างเปล่า (เฉพาะการประมวลผลภายหลัง)
- 28 กันยายน 2555 - zpaq 6.00 อัปเดตข้อกำหนดเป็นเวอร์ชัน 2.01 โดยเพิ่มรูปแบบการบันทึกข้อมูล (journaling format)
- 23 มกราคม 2556 - zpaq 6.19 แยกฟังก์ชันการพัฒนาออกเป็นโปรแกรมแยกต่างหากชื่อ zpaqd
โครงการที่เกี่ยวข้อง
- Squashคือเลเยอร์นามธรรมสำหรับการบีบอัดข้อมูลที่รองรับโคเดก หลายประเภท
- PeaZipเป็นโปรแกรมบีบอัดไฟล์ที่รองรับมากกว่า 150 รูปแบบ รวมถึงการแตกไฟล์ในรูปแบบสตรีมมิ่ง ZPAQ
- fastqzซึ่งเป็น โปรแกรมบีบอัด ไฟล์ FASTQที่สร้างขึ้นโดยใช้ libzpaq [ 3 ]
- zpaqfranzเครื่องมือสารพัดประโยชน์สำหรับผู้จัดการด้านการสำรองข้อมูลและการกู้คืนระบบอย่างจริงจัง
- wcx_zpaqปลั๊กอินแพ็คเกอร์ (wcx) สำหรับ Total Commander [ 4 ]
- Bandizipเป็นโปรแกรมจัดเก็บไฟล์ที่มีความเร็วในการประมวลผลที่รวดเร็วเป็นพิเศษและคุณสมบัติที่สะดวกสบาย รวมถึงการรองรับรูปแบบ ZPAQ [ 5 ]
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ

- สำเนาสำรองที่ไม่เป็นทางการบนGitHub
- บทนำเกี่ยวกับ zpaql กับภาพขาวดำ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ซปาคิว
ZPAQ เป็น โปรแกรมบีบ อัดไฟล์แบบ โอเพนซอร์สที่ทำงานบน บรรทัดคำสั่ง สำหรับ Windows และ Linux มันใช้รูปแบบการบันทึกการเปลี่ยนแปลงหรือการเพิ่มข้อมูลเท่านั้น...
รูปแบบไฟล์เก็บถาวร
ไฟล์จะถูกบันทึกในรูปแบบบันทึกประจำวันระดับ 2 ของ ZPAQ [ 2 ] มาตรฐานกำหนดรูปแบบไว้สองแบบ คือ สตรีมมิ่งและบันทึกประจำวัน มีเพียงรูปแบบบันทึกประจำวันเท่านั้นที่รองรับการลบข้อมูลซ้ำ คุณลักษณะของไดเร็กทอรี และไฟล์หลายเวอร์ชันที่มีวันที่กำกับ
ตัวอย่าง ZPAQL
ซอร์สโค้ดของ ZPAQL ใช้ไวยากรณ์แบบข้อความ โดยแต่ละคำที่คั่นด้วยช่องว่างจะประกอบกันเป็นหนึ่งไบต์ในกรณีส่วนใหญ่ และมีคำอธิบายอยู่ในวงเล็บ ตัวอย่างต่อไปนี้เป็นการ กำหนดค่า ระดับกลาง ซึ่งคล้ายกับการบีบอัดระดับ 5 โดยอธิบายถึงลำดับของส่วนประกอบ ICM-ISSE...
การลบข้อมูลซ้ำซ้อน
ในระหว่างการอัปเดต ZPAQ จะแบ่งไฟล์อินพุตออกเป็นส่วนย่อย คำนวณค่าแฮช SHA-1 ของแต่ละส่วน และเปรียบเทียบกับค่าแฮชที่จัดเก็บไว้ในไฟล์เก็บถาวร หากตรงกัน จะถือว่าส่วนย่อยเหล่านั้นเหมือนกัน และจะเก็บเพียงตัวชี้ไปยังส่วนย่อยที่ถูกบีบอัดก่อนหน้านี้เท่านั้น มิฉะนั้น...