วันอาทิตย์ที่ 13 มีนาคม พ.ศ. 2554

การบีบอัดข้อมูล

การบีบอัดข้อมูล

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

อาศัยหลักการที่ว่าปกติข้อมูลที่ใช้อยู่มักจะมีข้อมูลที่ซ้ำกัน เช่น คำในภาษาอังกฤษมักพบอักษร 'e'
ได้บ่อยกว่า 'z' และความเป็นไปได้ที่อักษร 'q' จะตามด้วย 'z' มีน้อยมากๆ ยกตัวอย่างแบบนี้อาจไม่
เห็นภาพว่าจะลดข้อมูลได้อย่างไร ผมขอยกตัวอย่างแบบที่ผมคิดเองดีกว่าอย่างในภาษาอังกฤษใน
บทความหรือหนังสือ เล่มหนึ่งจะปรากฏคำว่า the อยู่บ่อยมาก สมมติเราให้เก็บอักษร t แทน the
หรืออาจใช้วิธีเก็บตำแหน่งที่ปรากฎคำนั้นๆแทน ก็สามารถลดความยาวข้อมูลที่จะเก็บได้
(อันนี้แค่ยกตัวอย่างให้เห็นแนวคิดแต่จริงๆ algorithm ที่ใช้บีบอัดอาจกระทำกันในระดับบิตเลย
นะครับ) จะเห็นว่าการบีบอัดข้อมูลแบบนี้ ข้อมูลต้นฉบับกับข้อมูลที่บีบอัดแล้วคลายออกมาจะ
เหมือนกันไม่ผิดเพี้ยน

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

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

หากเราจะเลือกรูปแบบการบีบอัดข้อมูล จะต้องคำนึงถึงตัวแปรหลายๆตัว เช่น ประสิทธิภาพในการ
บีบอัด อัตราการสูญเสียหรือผิดเพี้ยน(บางคนอาจสงสัยว่าข้อมูลที่บีบอัดมันเพี้ยน ด้วยหรือ อันนี้เดี๋ยวจะ
อธิบายต่อ) ทรัพยากรที่ต้องใช้ในการบีบอัดหรือคลายข้อมูล เป็นต้น

การบีบอัดแบบ Lossless กับแบบ Lossy
การบีบอัดข้อมูลแบบ Lossless อาศัยหลักการที่ว่าปกติข้อมูลที่ใช้อยู่มักจะมีข้อมูลที่ซ้ำกัน เช่น คำใน
ภาษาอังกฤษมักพบอักษร 'e' ได้บ่อยกว่า 'z' และความเป็นไปได้ที่อักษร 'q' จะตามด้วย 'z' มีน้อยมากๆ
ยกตัวอย่างแบบนี้อาจไม่เห็นภาพว่าจะลดข้อมูลได้อย่างไร ผมขอยกตัวอย่างแบบที่ผมคิดเองดีกว่าอย่าง
ในภาษาอังกฤษในบทความหรือหนังสือ เล่มหนึ่งจะปรากฏคำว่า the อยู่บ่อยมาก สมมติเราให้เก็บอักษร
 t แทน the หรืออาจใช้วิธีเก็บตำแหน่งที่ปรากฎคำนั้นๆ แทน ก็สามารถลดความยาวข้อมูลที่จะเก็บได้
(อันนี้แค่ยกตัวอย่างให้เห็นแนวคิดแต่จริงๆ algorithm ที่ใช้บีบอัดอาจกระทำกันในระดับบิตเลยนะครับ)
จะเห็นว่าการบีบอัดข้อมูลแบบนี้ ข้อมูลต้นฉบับกับข้อมูลที่บีบอัดแล้วคลายออกมาจะเหมือนกันไม่ผิดเพี้ยน

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

ยกตัวอย่างง่ายๆเพื่อเทียบการบีบอัดข้อมูลแบบ lossless กับ lossy เช่น 25.888888888 อาจบีบอัดให้เหลือ
25.[9]8 (9 ในปีกกาหมายถึงมี 8 จำนวน 9 ตัว) ซึ่งสามารถแปลงกลับเป็นข้อมูลเดิมได้ไม่ผิดเพี้ยน (lossless)
ในขณะที่ถ้าหากสามารถยอมรับได้ว่าข้อมูลผิดเพี้ยนไปบ้างก็ไม่เป็นไรก็อาจบีบ อัดให้เหลือ 26 ซึ่งจะเห็นว่า
ประหยัดพื้นที่การเก็บข้อมูลได้เยอะกว่า แต่ขณะเดียวกันข้อมูลจะไม่เหมือนเดิมเสียทีเดียว (lossy)

ข้อควรทราบอีกอย่างคือ การบีบอัดข้อมูลที่บีบอัดมาแล้ว ไม่คุ้มค่านัก เพราะขนาดของไฟล์จะเล็กลงไม่มาก
บางครั้งอาจใหญ่ขึ้นด้วย (ในการบีบอัดก็มี overhead นะครับ) นอกจากนี้ยังเสียเวลาที่จะต้องมาคลายข้อมูลอีกด้วย

algorithm ที่นิยมใช้ในการบีบอัดแบบ lossless คือ Lempel-Ziv (LZ) และ DEFLATE ซึ่งพัฒนาต่อจาก LZ เพื่อให้
บีบอัดข้อมูลได้มากขึ้นและคลายข้อมูลออกมาได้เร็วขึ้น แต่ขณะเดียวกันก็เสียเวลาในการบีบอัดมากขึ้นอีกหน่อย
(ไม่มีอะไรที่ได้มาฟรีๆ) DEFLATE ถูกใช้ใน PKZIP, gzip และ PNG (ดังๆทั้งนั้นนะครับ PKZIP เป็นโปรแกรม
บีบอัดแรกๆเลยที่ได้รับความนิยม คนมีอายุหน่อยจะรู้ อิอิ gzip ก็เช่นกันแต่ใช้ในระบบ unix ส่วน PNG เป็นรูปแบบ
ไฟล์ภาพ) algorithm ที่ควรจะกล่าวถึงอีก คือ LZW (Lempel-Ziv-Welch) ซึ่งใช้ในไฟล์ภาพ GIF และที่รู้จักกันดี
อีกตัว(ใครรู้จักหว่า) คือ LZR (LZ-Renau)

วิธีการ บีบอัดแบบ LZ ต่างๆ ที่กล่าวมาใช้หลักการบีบอัดแบบ table-based compression model ซึ่งข้อมูลในตาราง
จะแทนค่าตัวอักษรหรือข้อมูลที่ซ้ำกัน โดยส่วนใหญ่ตารางนี้จะถูกสร้างขึ้นมาจากข้อมูลที่รับเข้าไป อีกรูปแบบ
ของ LZ ที่ใช้ได้ดี คือ LZX ซึ่งถูกใช้ในไฟล์ CAB ของไมโครซอฟต์

WinZIP
จุดเด่น

    * มีอินเตอร์เฟสที่คุ้นเคย (มุมมองเหมือน Windows Explore)
    * มีคำสั่งสำหรับการ ZIP แล้วส่งเมลล์ (Std version) , ZIP ไปยัง FTP Site และ ZIP พร้อมเบิร์นลง CD/DVD ได้ (Pro only)
    * รองรับการบีบอัดไฟล์หลายรูปแบบ อีกทั้งยังสามารถเปิดและแยกไฟล์ 7z, RAR, IMG, ISO, CAB, LHA ได้อีกด้วย
    * สามารถสร้างงานที่ต้องทำเ็ป็นประจำได้ ( WinZip 11,12 Pro Job completion : http://www.winzip.com/wzdjobs.htm )
      จุดด้อย
    * การเข้ารหัสในรูปแบบไฟล์ ZIP มีอัตราการบีบอัดค่อนข้างต่ำ (แต่เป็นมาตรฐานที่ใช้กันได้ทุกระบบ)
    * การปรับแต่ง Interface ทำได้น้อย
WinRAR
จุดเด่น

    * อัตราการบีบอัดสูงกว่า ZIP Standard
    * ปรับแต่งหน้าตาเพิ่มได้ ( http://www.rarlab.com/themes.htm )
    * สามารถใช้ได้ทั้งแบบ GUI และแบบ Command line
    * มีให้ใช้งานได้หลายแพลตฟอร์ม  ( Winrar ในระบบอื่นๆ: http://www.rarlab.com/rar_add.htm )
    * สามารถใช้งาน Multi Thread ได้ ( WinRAR 3.6+ )
    * รองรับการทำงานในระบบ 64 bit ( บางระบบเท่านั้น: Unix, Linux, Windows ในแบบ Command Line)
    * มีเมนูภาษาไทย ( ต้องดาวน์โหลดมาติดตั้งเอง )

จุดด้อย

    * หากนำไฟล์ไปใช้กับระบบที่ไม่มี RAR, WinRAR อาจใช้งานไฟล์นั้นไม่ได้ (ไม่มีโปรแกรมเปิด ก็ไม่มีประโยชน์)
    * ใช้ทรัพยาการในการทำงานค่อนข้างสูง ทั้งการเข้ารหัส/ถอดรหัสไฟล์
7-Zip (Seven Zip)
จุดเด่น

    * สามารถใช้งานได้ฟรีแบบเต็มรูปแบบ ( ตามเงื่อนไข GNU LGPL License: http://www.7-zip.org/license.txt )
    * มีอัตราการบีบอัดข้อมูลสูงกว่า RAR (LZMA compression)
    * รองรับการบีบอัด: 7z, ZIP, GZIP, BZIP2 ,TAR
    * รองรับการแยกไฟล์: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR ,Z
    * รองรับการเข้ารหัสแบบ AES-256 ในไฟล์ประเภท 7z, ZIP
    * มีให้ใช้งานถึง 74 ภาษา (รวมภาษาไทย)

จุดด้อย

    * อินเตอร์เฟสค่อนข้างเรียบง่ายเกินไป (ปรับแต่งได้น้อย)
    * การทำงานบางอย่าง ใช้ทรัพยากรระบบสูงมาก (ทั้ง CPU และ RAM)
เนื่องจากกระแสลิขสิทธิ์ค่อนข้างแรง เลยมีการยกเรื่องของ OpenSource software และ Freeware ขึ้นมามากมาย
 และมีโปรแกรมหลายๆประเภทที่ได้ลองแล้ง คิดว่าใช้ทดแทนโปรแกรมเถื่อนที่มีในเครื่องได้
แต่เดี๋ยวก่อนครับ ผมไม่ได้มาบอกว่าของฟรีหรือของเถื่อนดีกว่า เรื่องนี้ต้องอยู่กับการใช้งานของแต่ละคน
เอาเป็นว่าวันนี้ผมมาเล่าเรื่องการใช้ Software ของผมละกัน

ผลการใช้งาน Winrar และ 7Zip ว่าด้วยการใช้งานทั่วไป ผลการใช้งาน Winrar และ 7Zip ว่าด้วยการใช้งานทั่วไป

ผลการใช้งาน Winrar และ 7Zip ว่าด้วยการใช้งานทั่วไป (เน้นว่าใช้งานทั่วๆไป)
การใช้งาน
- ใช้แตกไฟล์ (Extract File) เป็นส่วนมาก มีทุกขนาดและทุก part เช่น ไฟล์เอกสารไม่กี่ 100k จนถึงไฟล์ 20 part ขนาดรวมเกือบๆ 4G
- ใช้บีบอัดไฟล์ เช่น ส่งไฟล์ให้เพื่อน ใช้เก็บไฟล์บางไฟล์ที่ไม่ได้ใช้งานแล้ว และบีบอัดไฟล์อัพโหลดขึ้นอินเตอร์เน็ต

แค่นี้แหละครับ การใช้งานของผม คิดว่าหลายๆคนก็คงเป้นเหมือนผม

ผลการใช้งานเปรียบเทียบความแตกต่าง 2 ตัว
- ความเร็วในการแตกไฟล์ ทั้ง 2 ตัวทำได้ใกล้เคียงกัน ยกเว้นว่าถ้าเป็นไฟล์ใหญ่ๆ 7Zip จะทำให้เครื่องผมช้าขึ้นมาทันที
- การบีบอัด Winrar บีบอัดได้เร็วกว่าเห็นๆ แถมไม่ทำให้เครื่องหน่วงด้วย ถ้าใช้ 7Zip ก็ควรปรับการบีบอัดให้เป็นแบบ Fastest เพราะถึงจะใช้ High ไปขนาดของไฟล์ที่บีบอัดก้จะเท่ากัน(ลองมาแล้ว)
- เรื่องการแตกไฟล์ ถ้าเป้น Winrar หากมีไฟล์ใดไฟล์หนึ่งเสีย(สมมุติว่ามีหลาย part) winrar ก็จะขึ้นหน้าต่างเตือนทันทีที่เจอและหยุดการแตกไฟล์ทันที แต่ 7Zip จะแตกไฟล์อย่างสบายใจไปจนครบ และขึ้นหน้าต่างเตือนทีหลัง ส่วนไฟล์ที่แตกไฟแล้วก็ใช้งานได้บ้างไม่ได้บ้าง (แน่นอนว่ามันไม่สมบูรณ์)
- นามสกุลของไฟล์ที่บีบอัดแบบแบ่งหลายๆ part เช่น แบ่งไฟล์ Game.exe ให้เป็น 5 part
Winrar จะได้ Game.part1.rar – Game.part5.rar
7Zip จะได้ Game.7z.001 - Game.7z.005
ประมาณนี้
- จุดเด่นของ 7zip คือ อัตราการบีบอัดสูงมาก ผมเคยบีบอัดไฟล์ ISO 700MB เพื่ออัพโหลดขึ้นเว็บ ปรากฏว่าบีบแล้วเหลือแค่ 370 MB .. เหลือแค่เนี๊ย(เลือกแบบ Fastest แล้ว)
- ส่วนไฟล์พวก Video Music MP3 ต่างๆลองแล้ว ทั้ง Winrar และ 7Zip ให้ผลไม่ต่างกันมาก
- ถ้าจะบีบอัดไฟล์เป้นหลายๆ part แล้วอัพโหลดขึ้นเว็บฝากไฟล์ ผมแนะนำ 7zip ครับ เพราะบีบได้เล็กกว่า(ในบางกรณี) แต่ไฟล์ที่อัพโหลดไปแล้วพอถูกดาวน์โหลด แทบจะไม่เจอ Error เลย สามารถแตกไฟล์ได้แบบสมบูรณ์ แต่ไฟล์ .rar จะมี error เกิดขึ้น เจอบ่อยๆก็คือ CRC32 โดยเฉพาะพวกไฟล์ใหญ่ๆและแบ่งออกเป็นหลายๆ part

สรุปง่ายๆ 7zip สามารถใช้ทดแทน Winrar ได้ครับ การใช้งานต่างๆไม่ต่างกันมาก ใช้เวลาเรียนรู้สักหน่อยก็สามารถใช้งานได้แล้วครับ ถึงจะบีบอัดช้าแต่ก็ได้ไฟล์ที่มีขนาดเล็กลงมาก

ไม่มีความคิดเห็น:

แสดงความคิดเห็น