Adakah batasan untuk memiliki banyak file dalam direktori di Mac OS X?

9

Saya memiliki 100.000 file dalam direktori di MacOS X saya dan terlihat lambat bagi skrip saya untuk membaca file di dalamnya.

Apakah ada batasan atau rekomendasi untuk memiliki banyak file? Haruskah saya membaginya ke beberapa direktori?

Keterbatasan yang saya temukan adalah bahwa saya tidak bisa mv * foountuk semua 100.000 file. Ini menunjukkan kesalahan, mengatakan "argumen terlalu panjang." Ini bekerja dengan sekitar kurang dari 20.000 file.

Daisuki Honey
sumber
Saat ini saya memiliki 380.000 file dalam direktori dan menyadari bahwa bahkan membuka file hanya membutuhkan waktu 10+ detik. Saya telah memutuskan untuk memisahkannya ke beberapa direktori.
Daisuki Honey
1
Sistem file HFS + harus dapat menyimpan dan mengakses sejumlah besar file dalam direktori dengan nama lengkapnya tanpa terlalu banyak kesulitan. Tapi Anda harus berhati-hati dengan wildcard. Ketika Anda menggunakan *atau ?sebagai bagian dari argumen ke perintah, sistem operasi mencari seluruh direktori untuk file yang cocok (lambat), dan kemudian menggantikan argumen Anda dengan daftar setiap file yang cocok (panjang), yang kemudian diteruskan ke perintah. Anda mungkin melakukan yang lebih baik dengan loop atau dengan beberapa perintah mv, misalnya mv a* foo && mv b* foo,.
Matthias Fripp

Jawaban:

1

Menurut jawaban Stack Overflow ini dan perincian spesifik di situs Apple , folder individual dapat berisi hingga 2,1 miliar item.

Yang mengatakan, hanya karena dapat menyimpan hingga 2,1 miliar item tidak berarti dapat mempertahankan kinerja pada tingkat itu. Menurut Wikipedia ; penekanan adalah milikku:

File Katalog, yang menyimpan semua catatan file dan direktori dalam struktur data tunggal, menghasilkan masalah kinerja ketika sistem memungkinkan multitasking, karena hanya satu program yang dapat menulis ke struktur ini sekaligus, yang berarti bahwa banyak program mungkin menunggu dalam antrian karena satu program "memonopoli" sistem. Ini juga masalah keandalan yang serius, karena kerusakan pada file ini dapat menghancurkan seluruh sistem file.

Jadi kinerjanya menurun secara alami berkat fakta bahwa file katalog hanya dapat digunakan oleh satu program pada satu waktu. Dan jika direktori tumbuh dalam ukuran, risiko / degradasi yang disebabkan oleh masalah itu hanya akan meningkat; lebih banyak file berarti lebih banyak kesempatan bagi program untuk mengakses file dalam satu direktori itu. Konfirmasi lebih lanjut dari gagasan itu di sini ; lagi-lagi penekanan adalah milikku:

File katalog adalah struktur yang rumit. Karena ia menyimpan semua informasi file dan direktori, itu memaksa serialisasi sistem file — bukan situasi yang ideal ketika ada sejumlah besar utas yang ingin melakukan file I / O. Di HFS, operasi apa pun yang membuat file atau memodifikasi file dengan cara apa pun harus mengunci file katalog, yang mencegah utas lainnya dari bahkan akses hanya baca ke file katalog. Akses ke file katalog harus menjadi penulis tunggal / multireader.

JakeGould
sumber
Terima kasih banyak. Saya mengerti akses ke file katalog akan menjadi hambatan dan dapat menyebabkan masalah kinerja yang serius terutama untuk multitasking.
Daisuki Honey
@DaisukiHoney Sama-sama! Jadi, jika Anda menemukan jawaban saya bermanfaat, harap ingat untuk memilihnya. Dan jika itu adalah jawaban yang memecahkan masalah Anda, harap diingat untuk memeriksanya.
JakeGould
Ya, pasti saya memilih jawaban Anda dan memeriksanya. Sekali lagi terima kasih banyak.
Daisuki Honey
Bagian Wikipedia yang Anda kutip berbicara tentang batas skalabilitas per sistem file, bukan per direktori: hanya ada satu File Katalog per sistem file dan semua akses harus diserialisasi tentang itu. Ini tidak relevan dengan pertanyaan.
poolie
@poolie Pertanyaannya adalah tentang per direktori yang ada di sistem file. File katalog ada per sistem file tetapi direktori itu sendiri ada di sistem file yang sama juga. Ini relevan dengan pertanyaan yang berhubungan dengan 10.000+ file dalam direktori yang ada pada sistem file tunggal. Tetapi pertanyaan ini berumur 2+ tahun, jadi terima kasih atas tautan Wiki. Saya telah memperbarui jawaban saya untuk memasukkan kata-kata baru serta tautan langsung ke bagian yang dimaksud.
JakeGould
4

Jawaban Singkat: Ya, jika Anda membaca 100.000 file, saya mungkin berharap skripnya lambat.

Jawaban Panjang: Untuk menjawab pertanyaan ini lebih menyeluruh, Anda harus melihat sistem file pada Mac. Mac menggunakan HFS + ( Hierarchical File System Plus ), yang merupakan sistem file modern yang memiliki keterbatasan, tetapi hanya dalam situasi ekstrem.

Dari pengalaman saya, ini sangat mirip dengan sistem file journaling Linux EXT. Ini mendukung direktori pemasangan, izin seperti UNIX, dll. Ini membahas file dalam format 32-bit, membuat jumlah maksimum file yang dapat disimpan dalam volume 4.294.967.295, menurut sumber ini .

Sistem file mulai rusak dengan file yang lebih besar dari 8 EB pada sistem modern dan hingga 2,1 miliar file dan folder di satu lokasi sebagaimana diuraikan di sini .

Mengingat cara HFS + —atau benar-benar ada sistem file mana pun yang mengaturnya — memiliki banyak file di folder seharusnya tidak melakukan sesuatu yang 'aneh'.

Sejujurnya, saya tidak berpikir akan ada peningkatan kinerja mendistribusikan file di hierarki folder yang lebih kompleks. Sebenarnya, teknik ini mungkin kurang efisien karena skrip Anda harus membuat panggilan untuk mengubah direktori pada pertengahan proses.

James Taylor
sumber
Baik. Saya berpikir tentang mengubah hierarki direktori tetapi itu menyebabkan algoritma yang lebih rumit dan saya menduga banyak peningkatan kinerja. Terima kasih atas jawabannya. Saat ini saya memiliki 200.000 file dalam direktori dan mungkin memiliki 1.000.000 pada akhirnya. Saya harap ini bekerja dengan baik tanpa kinerja yang buruk.
Daisuki Honey
@DaisukiHoney Jika Anda bekerja dengan banyak file, mungkin ada baiknya untuk melihat apakah Anda dapat membagi hal-hal menjadi direktori. Mungkin sulit dilakukan pada tahap ini, tetapi mungkin membuat segalanya sedikit lebih stabil bergerak maju.
JakeGould
@JakeGould Terima kasih atas sarannya. Saya telah memikirkan restrukturisasi karena saya mungkin menambahkan beberapa file lagi. Terima kasih.
Daisuki Honey