หนึ่ง การทำความเข้าใจแหล่งที่มาและผลกระทบของข้อมูลที่ซ้ำกัน
ก่อนอื่น เราต้องเข้าใจว่าทำไมจึงมีข้อมูลที่ซ้ำกันมากมาย ในระหว่างการสร้างไฟล์พจนานุกรม อาจมีการรวบรวมข้อมูลจากหลายแหล่ง ซึ่งข้อมูลเหล่านี้มีการทับซ้อนกันบางส่วน เช่น เมื่อรวบรวมข้อมูลจากรายการคำต่าง ๆ ชุดรหัสผ่านทั่วไป หรือรายการการรวมกันของอักขระต่าง ๆ เป็นต้น
ข้อมูลที่ซ้ำกันนี้จะส่งผลเสียในหลาย ๆ ด้าน จากด้านการจัดเก็บข้อมูล หากมีข้อมูลที่ซ้ำกันจำนวนมากในไฟล์ขนาด 2TB ก็เหมือนกับการสูญเสียพื้นที่เก็บข้อมูลที่มีค่าอย่างสิ้นเชิง ในขณะที่ใช้ไฟล์พจนานุกรมนี้ในการถอดรหัสรหัสผ่านหรือการดำเนินการอื่น ๆ ข้อมูลที่ซ้ำกันจะทำให้ต้องมีการค้นหาและเปรียบเทียบข้อมูลซ้ำ ๆ ซึ่งจะทำให้กระบวนการถอดรหัสช้าลง
สอง การกรองโดยใช้เครื่องมือแก้ไขข้อความ
ใช้เครื่องมือบนระบบ Windows
- ใช้ PowerShell
- ในระบบ Windows PowerShell มีฟังก์ชันการประมวลผลข้อความที่หลากหลาย เราสามารถใช้สคริปต์ PowerShell ต่อไปนี้เพื่อลบบรรทัดที่ซ้ำได้
```powershell
" "
foreach ($line in $lines) {
if ($uniqueLines -notcontains $line) {
}
}
}
$uniqueLines | ชุด - เนื้อหา "unique_dictionary.txt"
```
สคริปต์นี้จะอ่านทุกบรรทัดใน "dictionary.txt" เข้าไปในอาร์เรย์ "$lines" ก่อน จากนั้นจึงเรียกซ้ำทุกบรรทัดโดยใช้ลูป หากบรรทัดใดไม่อยู่ในอาร์เรย์ใหม่ "$uniqueLines" ก็จะเพิ่มลงไปในอาร์เรย์นี้ แล้วจึงบันทึกเนื้อหาของอาร์เรย์ใหม่ลงใน "unique_dictionary.txt"
อัลกอริธึมการแบ่งส่วน
- เนื่องจากไฟล์ดิกชันของเรามีขนาดใหญ่มาก (2T) การประมวลผลโดยตรงอาจประสบปัญหาเช่น การขาดหน่วยความจำ อัลกอริธึมการแบ่งส่วนจึงเป็นวิธีแก้ปัญหาที่ดี เราสามารถแบ่งไฟล์ขนาดใหญ่นี้ออกเป็นไฟล์ย่อยขนาดเล็ก ๆ หลายไฟล์ เช่น ตามจำนวนบรรทัดหรือขนาดไฟล์
- จากนั้นจึงกรองที่ไม่ซ้ำกันในแต่ละไฟล์ย่อย แล้วนำไฟล์ที่กรองแล้วมารวมเข้าด้วยกันอีกครั้ง ในระหว่างการรวม เราจำเป็นต้องตรวจสอบอีกครั้งว่าไม่มีข้อมูลที่ซ้ำกันระหว่างไฟล์ย่อยต่าง ๆ หรือไม่
IV. การตรวจสอบผลการกรอง
หลังจากกรองแล้ว เราจำเป็นต้องตรวจสอบผลลัพธ์ว่าถูกต้องหรือไม่ โดยสามารถใช้วิธีง่าย ๆ เช่น สุ่มเลือกบรรทัดบางส่วนออกมา แล้วตรวจสอบว่าบรรทัดเหล่านั้นปรากฏในไฟล์ดั้งเดิมหรือไฟล์ที่กรองแล้วกี่ครั้ง หากปรากฏในไฟล์ดั้งเดิมหลายครั้ง แต่ในไฟล์ที่กรองแล้วเพียงครั้งเดียว ก็หมายความว่าการกรองนั้นมีประสิทธิภาพ และ
นอกจากนี้ เรายังสามารถเปรียบเทียบขนาดของไฟล์ดั้งเดิมกับไฟล์ที่กรองแล้วได้ หากขนาดของไฟล์ที่กรองแล้วมีขนาดน้อยกว่าไฟล์ดั้งเดิมอย่างเห็นได้ชัด และทำงานได้ตามปกติในการทดสอบต่อมา (เช่น การใช้ไฟล์ดิกชันนี้ในการค้นหารหัสผ่านอย่างง่าย ๆ และดูว่ามันทำงานได้หรือไม่โดยไม่มีการสูญเสียรหัสผ่านที่ควรอยู่ในนั้น) ก็หมายความว่าการกรองซ้ำนั้นมีผลดีเช่นกัน
เซิร์ฟเวอร์ของเราใช้หน่วยความจำ 512GB และฮาร์ดดิสก์ SSD ที่มีโปรโตคอล NVMe ใช้เวลาครึ่งเดือนในการประมวลผลเสร็จสิ้น และสามารถสร้างสคริปต์ที่มีประสิทธิภาพได้ หากมีความต้องการประเภทนี้ สามารถติดต่อฝ่ายบริการลูกค้าของเว็บไซต์เพื่อขอคำปรึกษาได้ นอกจากนี้ยังสามารถดูการทดสอบที่เราทำเพื่อกรองไฟล์ดิกชันนี้ได้อีกด้วย!