Jumlah file per direktori

19

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.

carlosdc
sumber
6
Pertanyaan langsung Anda dijawab dengan baik oleh Giles, tetapi secara keseluruhan, sistem file Linux membuat pengganti yang buruk untuk basis data ketika Anda menggunakan nama file sebagai kunci untuk bit kecil data. Anda tidak mengontrol generasi, tetapi Anda dapat memposting-proses data ke dalam bentuk yang lebih bisa dianalisis; jika tidak, Anda akan membayar overhead sistem file di setiap langkah. Anda dapat mengurangi overhead tetapi Anda mungkin paling bahagia jika Anda menghilangkannya.
msw

Jawaban:

22

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_indexopsi 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 menjalankannya tune2fs -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 tanpa dir_indexdan 20000 dengan dir_indexatau reiserfs. Jika Anda tidak dapat mengontrol bagaimana file dibuat, pindahkan ke direktori terpisah sebelum melakukan hal lain.

Gilles 'SANGAT berhenti menjadi jahat'
sumber