เป็นไปได้ที่จะวางไฟล์ทั้งหมดไว้ในไดเรกทอรีเดียว แต่บางครั้งอาจมีขนาดใหญ่ขึ้นเล็กน้อย ระบบไฟล์หลายคนมีขีด จำกัด คุณต้องการที่จะวางที่เก็บ git บนไดรฟ์ที่จัดรูปแบบ FAT32 บนแท่ง USB หรือไม่? คุณสามารถจัดเก็บไฟล์ได้ 65,535 ไฟล์ในไดเรกทอรีเดียว ซึ่งหมายความว่าจำเป็นต้องแบ่งโครงสร้างไดเรกทอรีเพื่อให้การเติมไดเรกทอรีเดียวมีโอกาสน้อยลง
สิ่งนี้จะกลายเป็นปัญหากับระบบไฟล์อื่นและที่เก็บ git ที่ใหญ่ขึ้น repo คอมไพล์ค่อนข้างเล็กที่ฉันได้ออกไปเที่ยว (ประมาณ 360MiB) และมันมี 181,546 วัตถุสำหรับไฟล์ 11k ดึงrepo Linuxและคุณมีวัตถุ 4,374,054 ชิ้น หากคุณจะใส่สิ่งเหล่านี้ไว้ในไดเรกทอรีเดียวมันจะเป็นไปไม่ได้ที่จะตรวจสอบและจะผิดพลาด (สำหรับความหมายบางอย่างของ 'ความผิดพลาด') ระบบไฟล์
ดังนั้น? คุณแยกมันทีละไบต์ วิธีการที่คล้ายกันจะทำกับแอปพลิเคชันเช่น FireFox:
~/Li/Ca/Fi/Pr/7a/Cache $ ls
0/ 4/ 8/ C/ _CACHE_001_
1/ 5/ 9/ D/ _CACHE_002_
2/ 6/ A/ E/ _CACHE_003_
3/ 7/ B/ F/ _CACHE_MAP_
นอกเหนือจากนี้มันยังเป็นคำถามของการแสดงด้วย พิจารณาประสิทธิภาพของระบบไฟล์ NTFS ด้วยชื่อไฟล์จำนวนมาก :
Windows NT ใช้เวลานานในการดำเนินการกับไดเรกทอรีในระบบไฟล์ Windows NT (NTFS) ที่จัดรูปแบบไดรฟ์ที่มีไฟล์จำนวนมากที่มีชื่อไฟล์ยาว (ชื่อที่ไม่เป็นไปตามข้อตกลง 8.3) ในไดเรกทอรีเดียว
เมื่อ NTFS ระบุไฟล์ในไดเรกทอรีมันจะต้องค้นหาชื่อ 8.3 ที่เกี่ยวข้องกับชื่อไฟล์แบบยาว เนื่องจากไดเรกทอรี NTFS นั้นยังคงอยู่ในสถานะเรียงลำดับชื่อไฟล์ที่ยาวและชื่อ 8.3 ที่สอดคล้องกันโดยทั่วไปจะไม่ติดกับชื่ออื่นในรายการไดเรกทอรี ดังนั้น NTFS ใช้การค้นหาเชิงเส้นของไดเรกทอรีสำหรับทุกไฟล์ที่มีอยู่ เป็นผลให้ระยะเวลาที่ต้องใช้ในการทำรายการไดเรกทอรีเพิ่มขึ้นด้วยกำลังสองของจำนวนไฟล์ในไดเรกทอรี สำหรับไฟล์จำนวนน้อย (น้อยกว่าสองสามร้อย) การหน่วงเวลาจะไม่สำคัญ แต่เมื่อจำนวนไฟล์ในไดเรกทอรีเพิ่มขึ้นเป็นหลายพันเวลาที่ต้องใช้ในการดำเนินการรายชื่อสามารถเพิ่มเป็นนาทีชั่วโมงหรือแม้แต่วัน ปัญหาจะรุนแรงขึ้นถ้าชื่อไฟล์ยาวคล้ายกันมาก - แตกต่างกันเพียงไม่กี่ตัวอักษรสุดท้าย
ด้วยไฟล์ที่ตั้งชื่อตาม checksum ของ SHA1 นี่อาจเป็นสูตรสำหรับภัยพิบัติและประสิทธิภาพสุดซึ้ง
ในขณะที่ด้านบนจากบันทึกเทคโนโลยีจาก Windows NT 3.5 (และ NTFS 1.2 - ใช้กันทั่วไป 1995 ช่วงต้นยุค 2000) นอกจากนี้ยังสามารถมองเห็นในสิ่งต่างๆเช่นEXT3กับการใช้งานของระบบแฟ้มที่ถูกเชื่อมโยงรายการที่กำหนด O (n) การค้นหา . และถึงแม้จะมีการเปลี่ยนแปลงต้นไม้ B:
ในขณะที่อัลกอริทึม HTree ปรับปรุงเวลาค้นหาอย่างมีนัยสำคัญ แต่อาจทำให้ประสิทธิภาพการทำงานลดลงสำหรับเวิร์กโหลดที่ใช้ readdir () เพื่อดำเนินการบางอย่างของไฟล์ทั้งหมดในไดเรกทอรีขนาดใหญ่
...
วิธีแก้ปัญหาหนึ่งที่เป็นไปได้เพื่อลดปัญหาประสิทธิภาพการทำงานซึ่งได้รับการแนะนำโดย Daniel Phillips และ Andreas Dilger แต่ยังไม่ได้ใช้งานเกี่ยวข้องกับเคอร์เนลที่เลือก inode ฟรีที่มีหมายเลข inode ตรงกับคุณสมบัติที่จัดกลุ่ม inodes ด้วยชื่อไฟล์แฮช Daniel และ Andreas แนะนำให้จัดสรร inode จากช่วงของ inodes ตามขนาดของไดเรกทอรีจากนั้นเลือก inode ที่ว่างจากช่วงนั้นโดยยึดตามชื่อไฟล์แฮช ในทางทฤษฎีควรลดจำนวนการฟาดฟันที่เป็นผลเมื่อเข้าถึง inodes ที่อ้างอิงในไดเรกทอรีตามลำดับ readdir ในไม่ชัดเจนว่ากลยุทธ์นี้จะส่งผลในการเร่งความเร็วอย่างไรก็ตาม; ในความเป็นจริงมันสามารถเพิ่มจำนวนรวมของบล็อกไอโหนดที่อาจต้องมีการอ้างอิงและทำให้ประสิทธิภาพของ readdir () + stat () เวิร์กโหลดแย่ลง เห็นได้ชัดว่า
อนึ่งบิตนี้เกี่ยวกับวิธีการปรับปรุงประสิทธิภาพมาจากปี 2005 มีการปล่อยคอมไพล์ในปีเดียวกัน
เท่าที่เห็นกับ Firefox และแอพพลิเคชั่นอื่น ๆ ที่มีไฟล์แคชจำนวนมากการออกแบบการแบ่งแคชเป็นไบต์ มันมีค่าใช้จ่ายเล็กน้อยและเมื่อใช้ cross platform กับระบบที่อาจจะเก่าไปหน่อยอาจเป็นความแตกต่างระหว่างโปรแกรมที่ทำงานหรือไม่