เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

ผู้ใช้รายอื่นต้องการเขียนข้อมูลใหม่ลงในฮาร์ดไดรฟ์ แต่เขามีพื้นที่ว่างไม่เพียงพอที่จะทำเช่นนี้ ฉันไม่ต้องการลบสิ่งใดเลยเนื่องจาก “ทุกสิ่งมีความสำคัญและจำเป็นมาก” และเราควรทำอย่างไรกับมัน?

ไม่มีใครมีปัญหานี้ ข้อมูลในฮาร์ดไดรฟ์ของเรามีเทราไบต์ และจำนวนนี้ไม่น่าจะลดลง แต่มีเอกลักษณ์เฉพาะตัวขนาดไหน? ในท้ายที่สุดไฟล์ทั้งหมดเป็นเพียงชุดบิตที่มีความยาวที่แน่นอนและเป็นไปได้มากว่าไฟล์ใหม่จะไม่แตกต่างจากไฟล์ที่จัดเก็บไว้แล้วมากนัก

เป็นที่ชัดเจนว่าการค้นหาชิ้นส่วนข้อมูลที่จัดเก็บไว้ในฮาร์ดไดรฟ์นั้น หากไม่ล้มเหลว อย่างน้อยก็ไม่ใช่งานที่มีประสิทธิภาพ ในทางกลับกันหากความแตกต่างเล็กน้อยก็สามารถปรับเปลี่ยนได้เล็กน้อย...

เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

TL; DR - ความพยายามครั้งที่สองในการพูดคุยเกี่ยวกับวิธีการแปลก ๆ ในการเพิ่มประสิทธิภาพข้อมูลโดยใช้ไฟล์ JPEG ซึ่งขณะนี้อยู่ในรูปแบบที่เข้าใจได้ง่ายขึ้น

เกี่ยวกับบิตและความแตกต่าง

หากคุณสุ่มเลือกข้อมูลสองชิ้นโดยสมบูรณ์ โดยเฉลี่ยแล้วครึ่งหนึ่งของบิตเหล่านั้นจะมีข้อมูลตรงกัน จริงๆ แล้ว ในบรรดาเลย์เอาต์ที่เป็นไปได้สำหรับแต่ละคู่ ('00, 01, 10, 11′) ครึ่งหนึ่งมีค่าเท่ากัน ทุกอย่างเรียบง่ายที่นี่

แต่แน่นอนว่า ถ้าเราเอาสองไฟล์มาพอดีกัน เราก็จะเสียไฟล์หนึ่งไป ถ้าเราบันทึกการเปลี่ยนแปลง เราก็จะสร้างสรรค์สิ่งใหม่ขึ้นมา การเข้ารหัสเดลต้าซึ่งดำรงอยู่ได้อย่างสมบูรณ์แบบหากไม่มีเรา แม้ว่าจะไม่ได้ใช้เพื่อจุดประสงค์เดียวกันก็ตาม เราสามารถลองฝังลำดับที่เล็กกว่าลงในลำดับที่ใหญ่กว่าได้ แต่ถึงอย่างนั้นเราก็ยังเสี่ยงที่จะสูญเสียส่วนข้อมูลที่สำคัญหากเราใช้มันอย่างไม่ระมัดระวังกับทุกสิ่ง

ความแตกต่างระหว่างอะไรกับอะไรสามารถกำจัดได้? นั่นคือไฟล์ใหม่ที่ผู้ใช้เขียนเป็นเพียงลำดับของบิตซึ่งเราไม่สามารถทำอะไรได้ด้วยตัวเอง จากนั้นคุณเพียงแค่ต้องค้นหาบิตดังกล่าวในฮาร์ดไดรฟ์ที่สามารถเปลี่ยนแปลงได้โดยไม่ต้องเก็บส่วนต่างเพื่อให้คุณสามารถอยู่รอดได้โดยไม่มีผลกระทบร้ายแรง และมันก็สมเหตุสมผลที่จะเปลี่ยนแปลงไม่เพียงแค่ไฟล์ใน FS เท่านั้น แต่ยังรวมถึงข้อมูลที่ละเอียดอ่อนน้อยกว่าภายในด้วย แต่อันไหนและอย่างไร?

วิธีการติดตั้ง

ไฟล์บีบอัดที่สูญหายมาเพื่อช่วยเหลือ jpeg, mp3 และอื่นๆ เหล่านี้ทั้งหมด แม้ว่าจะมีการบีบอัดข้อมูลแบบสูญเสีย แต่ก็มีบิตจำนวนหนึ่งที่สามารถเปลี่ยนแปลงได้อย่างปลอดภัย คุณสามารถใช้เทคนิคขั้นสูงที่ปรับเปลี่ยนส่วนประกอบในขั้นตอนต่างๆ ของการเข้ารหัสได้อย่างไม่น่าเชื่อ รอ. เทคนิคขั้นสูง...ดัดแปลงจนแทบมองไม่เห็น...ทีละนิด...แทบจะเป็นแบบนั้น อัตชีวประวัติ!

แท้จริงแล้วการฝังข้อมูลหนึ่งลงในอีกข้อมูลหนึ่งทำให้นึกถึงวิธีการของเธอที่ไม่เหมือนใคร ฉันยังรู้สึกประทับใจกับความเปลี่ยนแปลงที่เกิดขึ้นกับประสาทสัมผัสของมนุษย์ที่ไม่อาจรับรู้ได้ ในกรณีที่เส้นทางแตกต่างกันเป็นความลับ: งานของเราอยู่ที่ผู้ใช้ป้อนข้อมูลเพิ่มเติมลงในฮาร์ดไดรฟ์ของเขา มันจะเป็นอันตรายต่อเขาเท่านั้น เขาจะลืมอีกครั้ง

ดังนั้นแม้ว่าเราจะสามารถใช้งานได้ แต่เราจำเป็นต้องทำการแก้ไขบางอย่าง จากนั้นฉันจะบอกและแสดงให้พวกเขาเห็นโดยใช้ตัวอย่างวิธีใดวิธีหนึ่งที่มีอยู่และรูปแบบไฟล์ทั่วไป

เกี่ยวกับหมาจิ้งจอก

ถ้าคุณบีบมันจริงๆ มันคือสิ่งที่บีบอัดได้มากที่สุดในโลก แน่นอนว่าเรากำลังพูดถึงไฟล์ JPEG ไม่เพียงแต่มีเครื่องมือและวิธีการฝังข้อมูลที่มีอยู่มากมายเท่านั้น แต่ยังเป็นรูปแบบกราฟิกที่ได้รับความนิยมมากที่สุดในโลกอีกด้วย

เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

อย่างไรก็ตาม เพื่อที่จะไม่มีส่วนร่วมในการผสมพันธุ์สุนัข คุณจะต้องจำกัดสาขากิจกรรมของคุณในไฟล์รูปแบบนี้ ไม่มีใครชอบสี่เหลี่ยมขาวดำที่ปรากฏขึ้นเนื่องจากมีการบีบอัดมากเกินไป ดังนั้นคุณต้องจำกัดตัวเองให้ทำงานกับไฟล์ที่บีบอัดแล้ว หลีกเลี่ยงการบันทึกซ้ำ. โดยเฉพาะอย่างยิ่งด้วยค่าสัมประสิทธิ์จำนวนเต็มซึ่งยังคงอยู่หลังจากการดำเนินการที่รับผิดชอบต่อการสูญหายของข้อมูล - DCT และการหาปริมาณซึ่งแสดงอย่างสมบูรณ์แบบในรูปแบบการเข้ารหัส (ขอบคุณวิกิของหอสมุดแห่งชาติบาวแมน):
เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

มีหลายวิธีที่เป็นไปได้ในการเพิ่มประสิทธิภาพไฟล์ JPEG มีการเพิ่มประสิทธิภาพแบบไม่สูญเสีย (jpegtran) มีการเพิ่มประสิทธิภาพ "ไม่มีการสูญเสีย“ ซึ่งจริงๆ แล้วมีส่วนสนับสนุนอย่างอื่น แต่เราไม่สนใจเกี่ยวกับสิ่งเหล่านั้น ท้ายที่สุดหากผู้ใช้พร้อมที่จะฝังข้อมูลหนึ่งลงในอีกข้อมูลหนึ่งเพื่อเพิ่มพื้นที่ว่างในดิสก์เขาก็จะปรับภาพให้เหมาะสมเมื่อนานมาแล้วหรือไม่ต้องการทำเช่นนี้เลยเพราะกลัวว่าจะสูญเสียคุณภาพ

F5

อัลกอริธึมทั้งตระกูลสอดคล้องกับเงื่อนไขเหล่านี้ ซึ่งคุณสามารถทำความคุ้นเคยได้ ในการนำเสนอที่ดีนี้. ขั้นสูงที่สุดคืออัลกอริธึม F5 โดย Andreas Westfeld โดยทำงานร่วมกับค่าสัมประสิทธิ์ขององค์ประกอบความสว่าง เนื่องจากดวงตาของมนุษย์มีความไวต่อการเปลี่ยนแปลงน้อยที่สุด นอกจากนี้ ยังใช้เทคนิคการฝังตามการเข้ารหัสเมทริกซ์ ซึ่งทำให้สามารถทำการเปลี่ยนแปลงน้อยลงเมื่อฝังข้อมูลในปริมาณเท่ากัน ยิ่งขนาดของคอนเทนเนอร์ที่ใช้มีขนาดใหญ่ขึ้น

การเปลี่ยนแปลงจะเกิดขึ้นเพื่อลดค่าสัมประสิทธิ์สัมประสิทธิ์ลงหนึ่งค่าภายใต้เงื่อนไขบางประการ (นั่นคือไม่เสมอไป) ซึ่งช่วยให้คุณใช้ F5 เพื่อเพิ่มประสิทธิภาพการจัดเก็บข้อมูลบนฮาร์ดไดรฟ์ของคุณ ประเด็นก็คือค่าสัมประสิทธิ์หลังการเปลี่ยนแปลงดังกล่าวมักจะครอบครองบิตน้อยลงหลังจากการเข้ารหัส Huffman เนื่องจากการกระจายค่าทางสถิติใน JPEG และค่าศูนย์ใหม่จะให้กำไรเมื่อเข้ารหัสโดยใช้ RLE

การแก้ไขที่จำเป็นคือการกำจัดส่วนที่รับผิดชอบในการรักษาความลับ (การจัดเรียงรหัสผ่านใหม่) ซึ่งช่วยประหยัดทรัพยากรและเวลาดำเนินการ และเพิ่มกลไกในการทำงานกับไฟล์หลายไฟล์แทนที่จะเป็นทีละไฟล์ ผู้อ่านไม่น่าจะสนใจกระบวนการเปลี่ยนแปลงโดยละเอียด ดังนั้นเรามาดูคำอธิบายของการนำไปปฏิบัติกันดีกว่า

เทคโนโลยีขั้นสูง

เพื่อสาธิตวิธีการทำงานของวิธีนี้ ฉันได้นำวิธีการนี้ไปใช้ในภาษา C ล้วนๆ และทำการปรับปรุงหลายอย่างทั้งในแง่ของความเร็วในการดำเนินการและหน่วยความจำ (คุณไม่สามารถจินตนาการได้เลยว่าภาพเหล่านี้จะมีน้ำหนักเท่าไรหากไม่มีการบีบอัด แม้กระทั่งก่อนที่จะมี DCT ด้วยซ้ำ) ข้ามแพลตฟอร์มได้โดยใช้ไลบรารีร่วมกัน libjpeg, PCRE и จิ๋วเดียร์ซึ่งเราขอขอบคุณพวกเขา ทั้งหมดนี้รวบรวมโดย 'make' ดังนั้นผู้ใช้ Windows ต้องการติดตั้ง Cygwin บางส่วนสำหรับตนเองเพื่อการประเมินผลหรือจัดการกับ Visual Studio และไลบรารีด้วยตนเอง

การใช้งานมีอยู่ในรูปแบบของยูทิลิตี้คอนโซลและไลบรารี ผู้ที่สนใจสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการใช้อย่างหลังใน readme ในพื้นที่เก็บข้อมูลบน Github ซึ่งเป็นลิงก์ที่ฉันจะแนบท้ายโพสต์

วิธีการใช้งาน?

อย่างระมัดระวัง. รูปภาพที่ใช้สำหรับบรรจุภัณฑ์จะถูกเลือกโดยการค้นหาโดยใช้นิพจน์ทั่วไปในไดเร็กทอรีรากที่กำหนด เมื่อเสร็จสิ้น ไฟล์สามารถย้าย เปลี่ยนชื่อ และคัดลอกได้ตามต้องการภายในขอบเขต เปลี่ยนไฟล์และระบบปฏิบัติการ ฯลฯ อย่างไรก็ตาม คุณควรใช้ความระมัดระวังอย่างยิ่งและไม่เปลี่ยนแปลงเนื้อหาที่เกิดขึ้นทันทีไม่ว่าในทางใด การสูญเสียค่าแม้แต่บิตเดียวอาจทำให้ไม่สามารถกู้คืนข้อมูลได้

เมื่อเสร็จสิ้นยูทิลิตี้จะทิ้งไฟล์เก็บถาวรพิเศษซึ่งมีข้อมูลทั้งหมดที่จำเป็นสำหรับการแตกไฟล์รวมถึงข้อมูลเกี่ยวกับรูปภาพที่ใช้ โดยตัวมันเองจะมีน้ำหนักประมาณสองสามกิโลไบต์และไม่มีผลกระทบอย่างมีนัยสำคัญต่อพื้นที่ดิสก์ที่ถูกครอบครอง

คุณสามารถวิเคราะห์ความจุที่เป็นไปได้โดยใช้แฟล็ก '-a': './f5ar -a [โฟลเดอร์ค้นหา] [นิพจน์ทั่วไปที่เข้ากันได้กับ Perl]' การบรรจุเสร็จสิ้นด้วยคำสั่ง './f5ar -p [ค้นหาโฟลเดอร์] [นิพจน์ทั่วไปที่เข้ากันได้กับ Perl] [ไฟล์ที่แพ็ก] [ชื่อไฟล์เก็บถาวร]' และทำการแตกไฟล์ด้วย './f5ar -u [ไฟล์เก็บถาวร] [ชื่อไฟล์ที่กู้คืน ]' .

สาธิตการทำงาน

เพื่อแสดงประสิทธิภาพของวิธีการนี้ ฉันจึงอัปโหลดคอลเลกชันภาพถ่ายสุนัขฟรีจำนวน 225 ภาพจากบริการนี้ Unsplash และพบในเอกสารเป็น PDF ขนาดใหญ่ความยาว 45 เมตร เล่มที่ XNUMX ศิลปะแห่งการเขียนโปรแกรม คนุตา

ลำดับนั้นค่อนข้างง่าย:

$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/

$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok

$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok

$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf

$ du -sh dogs/
551M dogs/

ภาพหน้าจอสำหรับแฟน ๆ

เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

ไฟล์ที่คลายแพ็กแล้วสามารถและควรอ่านได้:

เกี่ยวกับวิธีการแปลก ๆ ในการประหยัดพื้นที่ฮาร์ดดิสก์

อย่างที่คุณเห็นจากข้อมูลดั้งเดิม 633 + 36 == 669 เมกะไบต์บนฮาร์ดไดรฟ์เรามาถึง 551 ที่น่าพึงพอใจมากขึ้น ความแตกต่างที่รุนแรงดังกล่าวอธิบายได้จากการลดลงของค่าสัมประสิทธิ์ซึ่งส่งผลกระทบต่อพวกเขา การบีบอัดแบบไม่สูญเสียข้อมูลในภายหลัง: การลดขนาดลงทีละหนึ่งสามารถ "ตัดไบต์สองสามไบต์ออกจากไฟล์สุดท้ายได้อย่างง่ายดาย อย่างไรก็ตาม นี่ยังคงเป็นข้อมูลสูญหาย แม้ว่าจะเป็นเพียงข้อมูลเล็กๆ น้อยๆ ที่คุณจะต้องทนรับ

โชคดีที่พวกมันมองไม่เห็นด้วยตาเปล่าเลย ภายใต้สปอยเลอร์ (เนื่องจาก habrastorage ไม่สามารถจัดการไฟล์ขนาดใหญ่ได้) ผู้อ่านสามารถประเมินความแตกต่างทั้งด้วยตาและความเข้มของมันได้โดยการลบค่าของส่วนประกอบที่เปลี่ยนแปลงจากต้นฉบับ: ต้นฉบับ, พร้อมข้อมูลภายใน, ความแตกต่าง (ยิ่งสีคล้ำ ความแตกต่างในบล็อกก็จะยิ่งน้อยลง)

แทนการสรุป

เมื่อพิจารณาถึงปัญหาเหล่านี้ การซื้อฮาร์ดไดรฟ์หรือการอัปโหลดทุกอย่างไปยังคลาวด์อาจดูเหมือนเป็นวิธีแก้ปัญหาที่ง่ายกว่ามาก แม้ว่าเราจะอยู่ในช่วงเวลาที่ยอดเยี่ยมเช่นนี้ แต่ก็ไม่รับประกันว่าพรุ่งนี้จะยังสามารถออนไลน์และอัปโหลดข้อมูลเพิ่มเติมทั้งหมดของคุณที่ไหนสักแห่งได้ หรือไปที่ร้านแล้วซื้อฮาร์ดไดรฟ์เพิ่มอีกพันเทราไบต์ให้ตัวเอง แต่คุณสามารถใช้บ้านที่มีอยู่ได้ตลอดเวลา

-> GitHub

ที่มา: will.com

เพิ่มความคิดเห็น