Saya memiliki direktori dengan sekitar 100.000 file kecil (setiap file dari 1-3 baris, setiap file adalah file teks). Dalam ukuran direktori tidak terlalu besar (<2GB). Data ini hidup di server NFS yang dikelola secara profesional. Server menjalankan Linux. Saya pikir filesystem ext3, tapi saya tidak tahu pasti. Juga, saya tidak memiliki akses root ke server.
File-file ini adalah hasil dari percobaan ilmiah skala besar, yang saya tidak punya kendali. Namun, saya harus menganalisis hasilnya.
Operasi / pemrosesan I / O dalam direktori ini sangat, sangat lambat. Membuka file (buka di python), membaca dari file yang terbuka, menutup file, semuanya sangat lambat. Dalam bash ls, du, dll. Tidak berfungsi.
Pertanyaannya adalah:
Berapa jumlah maksimum file dalam direktori di Linux sedemikian rupa sehingga praktis untuk melakukan pemrosesan, membuka, membaca, dll? Saya mengerti bahwa jawabannya tergantung pada banyak hal: tipe fs, versi kernel, versi server, perangkat keras, dll. Saya hanya ingin aturan praktis, jika memungkinkan.
sumber
Jawaban:
Ketika Anda menduga, itu memang tergantung pada banyak hal, sebagian besar jenis dan opsi sistem file dan sampai batas tertentu versi kernel. Dalam seri ext2 / ext3 / ext4, ada peningkatan besar ketika
dir_index
opsi muncul (beberapa saat setelah rilis awal ext3): itu membuat direktori disimpan sebagai pohon pencarian (akses waktu logaritmik) daripada daftar linear (akses waktu linier) ). Ini bukan sesuatu yang bisa Anda lihat melalui NFS, tetapi jika Anda memiliki kontak dengan admin, Anda dapat meminta mereka untuk menjalankannyatune2fs -l /dev/something |grep features
(bahkan mungkin meyakinkan mereka untuk meningkatkan?). Hanya jumlah file yang penting, bukan ukurannya.Bahkan dengan
dir_index
100000 terasa besar. Idealnya, dapatkan penulis dari program yang membuat file untuk menambahkan tingkat subdirektori. Tanpa degradasi kinerja, saya akan merekomendasikan batas sekitar 1000 file per direktori untuk ext2 atau ext3 tanpadir_index
dan 20000 dengandir_index
atau reiserfs. Jika Anda tidak dapat mengontrol bagaimana file dibuat, pindahkan ke direktori terpisah sebelum melakukan hal lain.sumber