คำตอบนั้นไม่ง่ายอย่างตัวเลือกของระบบไฟล์ ระบบไฟล์ของ Sane หยุดใช้รายการเชิงเส้นสำหรับไดเรกทอรีเมื่อนานมาแล้วซึ่งหมายความว่าจำนวนรายการในไดเรกทอรีจะไม่ส่งผลต่อเวลาในการเข้าถึงไฟล์ ....
ยกเว้นเมื่อมันทำ
ในความเป็นจริงการดำเนินการแต่ละรายการยังคงรวดเร็วและมีประสิทธิภาพไม่ว่าจะเป็นจำนวนรายการ แต่งานบางอย่างเกี่ยวข้องกับการเพิ่มจำนวนของการดำเนินการ เห็นได้ชัดว่าการทำง่ายls
ใช้เวลานานและคุณจะไม่เห็นสิ่งใดจนกว่า inodes ทั้งหมดจะถูกอ่านและเรียงลำดับ การทำls -U
(ไม่ได้เรียง) ช่วยเพียงเล็กน้อยเพราะคุณสามารถเห็นว่ามันไม่ได้ตาย แต่ไม่ลดเวลาในการรับรู้ ชัดเจนน้อยกว่าคือการขยายตัวตัวแทนใด ๆ ที่จะต้องตรวจสอบแต่ละชื่อไฟล์และทุกคนและดูเหมือนว่าในกรณีส่วนใหญ่ inode ทั้งหมดจะต้องอ่านด้วย
กล่าวโดยย่อ: หากคุณมั่นใจได้ว่าไม่มีแอปพลิเคชัน (รวมถึงการเข้าถึงเชลล์) ที่จะใช้ wildard ใด ๆ คุณจะได้รับไดเรกทอรีจำนวนมากโดยไม่มีการสำนึกผิด แต่ถ้าอาจมีไวลด์การ์ดบางส่วนแฝงตัวอยู่ในโค้ดควรเก็บไดเรคทอรี่ให้ต่ำกว่าหนึ่งพันรายการ
แก้ไข :
ระบบไฟล์ที่ทันสมัยทั้งหมดใช้โครงสร้างข้อมูลที่ดีสำหรับไดเรกทอรีขนาดใหญ่ดังนั้นการดำเนินการครั้งเดียวที่มีการค้นหา inode ของไฟล์ที่ระบุจะค่อนข้างรวดเร็วแม้ในไดเรกทอรีที่มีเนื้อความ
แต่แอพพลิเคชั่นส่วนใหญ่ไม่ได้ทำแค่การใช้งานเพียงครั้งเดียว ส่วนใหญ่จะทำไดเรกทอรีเต็มหรือจับคู่สัญลักษณ์ สิ่งเหล่านั้นช้าไม่ว่าจะเกิดอะไรขึ้นเพราะพวกเขาเกี่ยวข้องกับการอ่านรายการทั้งหมด
ตัวอย่างเช่นสมมติว่าคุณมีไดเรกทอรีที่มีไฟล์นับล้านชื่อเรียกว่า 'foo-000000.txt' ถึง 'foo-999999.txt' และ 'natalieportman.jpeg' เพียงไฟล์เดียว สิ่งเหล่านี้จะรวดเร็ว:
ls -l foo-123456.txt
open "foo-123456.txt"
delete "foo-123456.txt"
create "bar-000000.txt"
open "natalieportman.jpeg"
create "big_report.pdf"
สิ่งเหล่านี้จะล้มเหลว แต่ล้มเหลวอย่างรวดเร็วเช่นกัน:
ls -l bar-654321.txt
open bar-654321.txt
delete bar-654321.txt
สิ่งเหล่านี้จะช้าแม้ว่าพวกเขาจะได้ผลลัพธ์น้อยมากก็ตาม แม้กระทั่งสิ่งที่ล้มเหลวก็ล้มเหลวหลังจากสแกนรายการทั้งหมด:
ls
ls foo-1234*.txt
delete *.jpeg
move natalie* /home/emptydir/
move *.tiff /home/seriousphotos/
homes/u/username, homes/j/joeblow,homes/s/somebody,...
บ้าง