ฉันเขียนratarmountทางเลือกที่เร็วกว่าซึ่ง "ใช้งานได้สำหรับฉัน" เพราะปัญหานี้ทำให้ฉันหยุดชะงัก
คุณสามารถใช้สิ่งนี้:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
เมื่อเสร็จแล้วคุณสามารถ unmount ได้เหมือนเมานต์ FUSE:
fusermount -u mount-folder
ทำไมมันเร็วกว่าจำนวนที่เก็บถาวร?
ขึ้นอยู่กับสิ่งที่คุณวัด
นี่คือมาตรฐานของรอยเท้าหน่วยความจำและเวลาที่จำเป็นสำหรับการติดตั้งครั้งแรกเช่นเดียวกับเวลาในการเข้าถึงcat <file-in-tar>
คำสั่งง่าย ๆและfind
คำสั่งง่าย ๆ
โฟลเดอร์ที่มีไฟล์ 1k แต่ละไฟล์ถูกสร้างขึ้นและจำนวนโฟลเดอร์จะเปลี่ยนแปลง
ที่ต่ำกว่าพล็อตแถบข้อผิดพลาดทางด้านซ้ายแสดงให้เห็นว่าชี้ไปที่ต่ำสุดและสูงสุดวัดครั้งที่cat <file>
10 ไฟล์สุ่มเลือก
ไฟล์ค้นหาเวลา
การเปรียบเทียบนักฆ่าคือเวลาที่ใช้ในcat <file>
การทำให้เสร็จ ด้วยเหตุผลบางอย่างการทำเช่นนี้จะขยายขนาดเชิงเส้นด้วยขนาดไฟล์ TAR (ประมาณไบต์ต่อไฟล์ x จำนวนไฟล์) สำหรับเก็บถาวรขณะที่มีเวลาคงที่ใน ratarmount สิ่งนี้ทำให้ดูเหมือนว่าที่เก็บถาวรนับไม่สนับสนุนการค้นหาเลยแม้แต่น้อย
สำหรับไฟล์ TAR ที่ถูกบีบอัดจะเห็นได้ชัดเจนเป็นพิเศษ
cat <file>
ใช้เวลานานกว่าสองเท่าในการติดตั้งไฟล์. tar.bz2 ทั้งหมด! ตัวอย่างเช่นไฟล์ TAR พร้อม 10k empty (!) ใช้เวลา 2.9 วินาทีในการเมานต์ด้วยไฟล์เก็บถาวร แต่ขึ้นอยู่กับไฟล์ที่เข้าถึงได้การเข้าถึงด้วยcat
เวลาระหว่าง 3ms ถึง 5 วินาที เวลาที่ใช้ดูเหมือนจะขึ้นอยู่กับตำแหน่งของไฟล์ภายใน TAR ไฟล์ที่ส่วนท้ายของ TAR ใช้เวลานานในการค้นหา ระบุว่า "ค้นหา" ถูกลอกเลียนแบบและเนื้อหาทั้งหมดใน TAR ก่อนที่ไฟล์จะถูกอ่าน
การรับเนื้อหาไฟล์อาจใช้เวลานานกว่าสองเท่าเมื่อติดตั้ง TAR ทั้งหมดโดยไม่คาดคิด อย่างน้อยก็ควรเสร็จในเวลาเดียวกับการติดตั้ง มีคำอธิบายอย่างหนึ่งคือไฟล์กำลังถูกค้นหามากกว่าหนึ่งครั้งบางทีอาจถึงสามครั้ง
ดูเหมือนว่า Ratarmount จะใช้เวลาเท่ากันเสมอในการรับไฟล์เพราะมันรองรับการค้นหาที่แท้จริง สำหรับ bzip2 ที่ถูกบีบอัด TARs มันจะพยายามบล็อก bzip2 ซึ่งมีที่อยู่จะถูกเก็บไว้ในไฟล์ดัชนีด้วย ในทางทฤษฎีส่วนเดียวที่ควรขยายด้วยจำนวนไฟล์คือการค้นหาในดัชนีและควรปรับขนาดด้วย O (log (n)) เนื่องจากมีการเรียงลำดับตามพา ธ และชื่อไฟล์
หน่วยความจำรอยเท้า
โดยทั่วไปถ้าคุณมีไฟล์มากกว่า 20k ใน TAR แล้วรอยเท้าหน่วยความจำของ ratarmount จะเล็กลงเพราะดัชนีจะถูกเขียนลงดิสก์ในขณะที่มันถูกสร้างขึ้น
ข้อยกเว้นเล็กน้อยคือแบ็กเอนด์ตัวถอดรหัส gzip ซึ่งด้วยเหตุผลบางอย่างต้องใช้ความทรงจำมากขึ้นเมื่อ gzip มีขนาดใหญ่ขึ้น โอเวอร์เฮดหน่วยความจำนี้อาจเป็นดัชนีที่จำเป็นสำหรับการค้นหาภายใน TAR แต่จำเป็นต้องมีการตรวจสอบเพิ่มเติมเนื่องจากฉันไม่ได้เขียนแบ็กเอนด์นั้น
ในทางตรงกันข้ามการเก็บถาวรเมานท์จะเก็บดัชนีทั้งหมดซึ่งก็คือเช่น 4GB สำหรับไฟล์ 2M ในหน่วยความจำอย่างสมบูรณ์ตราบใดที่ TAR ถูกเมาท์
เวลาติดตั้ง
คุณสมบัติที่ฉันชอบคือ ratarmount ที่สามารถติดตั้ง TAR ได้โดยไม่ล่าช้าอย่างเห็นได้ชัดในการลองครั้งต่อไป เนื่องจากดัชนีซึ่งแม็พชื่อไฟล์กับข้อมูลเมตาและตำแหน่งภายใน TAR จะถูกเขียนไปยังไฟล์ดัชนีที่สร้างขึ้นถัดจากไฟล์ TAR
เวลาที่ต้องการสำหรับการติดตั้งจะทำงานแปลก ๆ ในไฟล์เก็บถาวร เริ่มต้นจากไฟล์ขนาด 20k โดยประมาณมันเริ่มขยายเป็นสองส่วนแทนที่จะเป็นแบบเชิงเส้นเทียบกับจำนวนไฟล์ ซึ่งหมายความว่าเริ่มต้นจากไฟล์ 4M โดยประมาณ ratarmount เริ่มเร็วกว่าเก็บถาวรแม้ว่าไฟล์ TAR ขนาดเล็กจะช้ากว่ามากถึง 10 เท่า! จากนั้นอีกครั้งสำหรับไฟล์ขนาดเล็กมันไม่สำคัญว่าจะใช้เวลา 1 วินาทีหรือ 0.1 วินาทีในการเมาต์ tar (ครั้งแรก)
เวลาในการเมานท์สำหรับไฟล์บีบอัด bz2 นั้นเทียบได้มากที่สุดตลอดเวลา สิ่งนี้มีโอกาสมากเพราะมันถูกผูกไว้ด้วยความเร็วของตัวถอดรหัส bz2 Ratarmount ช้าลงประมาณ 2 เท่า ฉันหวังว่าจะทำให้ ratarmount เป็นผู้ชนะที่ชัดเจนด้วยการใช้ตัวถอดรหัส bz2 ในอนาคตอันใกล้ซึ่งแม้สำหรับระบบ 8 ปีของฉันก็สามารถเพิ่มความเร็วได้ 4x
ได้เวลารับเมตะดาต้าแล้ว
เมื่อเพียงแค่แสดงรายการไฟล์ทั้งหมดที่มีfind
อยู่ใน TAR (ค้นหาก็ดูเหมือนว่าจะเรียก stat สำหรับแต่ละไฟล์! ฉันหวังว่าจะปรับปรุงสิ่งนี้ในอนาคต แต่ปัจจุบันดูเหมือนว่าปัญหาการออกแบบเนื่องจากการใช้ Python และ SQLite แทนที่จะเป็นโปรแกรม C บริสุทธิ์