Salam pembuka,
Saya sedang menulis beberapa skrip untuk memproses gambar dari berbagai situs foto. Saat ini saya sedang menyimpan semua data ini dalam file teks individual di direktori yang sama.
Direktori ini dapat diakses web. Pengguna akhir melakukan panggilan ke layanan web yang mengembalikan jalur ke file yang dibutuhkan pengguna.
Saya bertanya-tanya pada tahap apa saya akan melihat dampak kinerja dengan memiliki semua file ini di direktori yang sama? (Jika ada)
Jawaban:
Kinerja bervariasi sesuai sistem file yang Anda gunakan.
EXT3: batas fisik adalah 32.000 file, tetapi perf juga menderita setelah beberapa ribu file.
EXT4: secara teori tidak terbatas
ReiserFS, XFS, JFS, BTRFS: ini adalah yang baik untuk banyak file dalam direktori karena lebih modern dan dirancang untuk menangani banyak file (yang lain dirancang kembali pada masa ketika HDD diukur dalam MB bukan GB) . Kinerja jauh lebih baik untuk banyak file (bersama dengan ext4) karena keduanya menggunakan algoritma tipe pencarian biner untuk mendapatkan file yang Anda inginkan (yang lain menggunakan yang lebih linier).
sumber
Saya menyimpan gambar untuk dilayani oleh server web, dan saya memiliki lebih dari 300.000 gambar dalam satu direktori di EXT3. Saya tidak melihat masalah kinerja. Sebelum mengatur ini, saya melakukan tes dengan gambar 500k dalam direktori, dan secara acak mengakses file dengan nama, dan tidak ada penurunan signifikan dengan 500k lebih dari 10k gambar dalam direktori.
Satu-satunya downside yang saya lihat adalah bahwa untuk menyinkronkan yang baru dengan server kedua saya harus menjalankan
rsync
seluruh direktori, dan tidak bisa hanya mengatakannya untuk menyinkronkan sebuah sub direktori yang berisi ribuan atau lebih.sumber
Jumlah file dalam folder secara teori bisa tidak terbatas. Namun, setiap kali ketika OS akan mengakses folder tertentu untuk mencari file, ia harus memproses semua file dalam folder. Dengan kurang dari 500 file, Anda mungkin tidak melihat adanya keterlambatan. Tetapi ketika Anda memiliki puluhan ribu file dalam satu folder, perintah daftar folder sederhana (ls atau dir) bisa memakan waktu terlalu lama. Ketika folder ini dapat diakses melalui FTP, itu akan sangat lambat ...
Masalah kinerja tidak akan benar-benar bergantung pada OS Anda tetapi pada kecepatan prosesor sistem Anda, kapasitas disk, dan memori. Jika Anda memiliki banyak file, Anda mungkin ingin menggabungkannya menjadi satu arsip, dan menggunakan sistem pengarsipan yang dioptimalkan untuk menampung banyak data. Ini bisa berupa file ZIP tetapi lebih baik lagi, simpan sebagai gumpalan dalam database dengan nama file sebagai kunci utama.
sumber
ls
masalah.Aturan praktis saya adalah untuk membagi folder jika ada lebih dari 1000 file dan folder tersebut akan diakses (yaitu melalui internet atau Explorer) atau 5000 file sebaliknya.
sumber
Seperti yang ditunjukkan @skaffman, batasannya tergantung pada sistem operasi. Anda kemungkinan akan terpengaruh oleh batasan pada OS yang lebih lama. Saya ingat versi lama Solaris terbatas pada 32768 file per direktori.
Solusi yang biasa adalah dengan menggunakan semacam hashing, yaitu server Cyrus imap membagi pengguna dengan hash alfabet:
sumber
Jika Anda secara langsung mengakses file, jumlah file dalam direktori bukanlah masalah kecepatan.
Jumlah file yang dapat Anda buat dalam satu direktori tergantung pada sistem file yang Anda gunakan. Jika Anda mendaftar semua file di direktori atau mencari, menyortir, dll. Memiliki banyak file akan memperlambat operasi tersebut.
gbjbaanb salah dalam jawabannya tentang ukuran file maksimum ext3. Ext umumnya membatasi jumlah file pada disk Anda secara umum. Anda tidak dapat membuat lebih banyak file maka Anda memiliki inode di tabel inode Anda. Dia benar dalam menyarankan reiserfs untuk kinerja lebih banyak dengan banyak file
sumber
Folder yang diperiksa dengan file 10K di NTFS (Windows 7, 64 bit). Folder dengan gambar 10K dalam tampilan apa pun (Daftar, Ikon dll.) Berfungsi dan menggulir tanpa penundaan yang masuk akal.
sumber