Berapa banyak file dalam direktori yang terlalu banyak? (Mengunduh data dari internet)

19

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)

steve
sumber
terkait: superuser.com/q/453348/453247
Stephen R

Jawaban:

12

Kinerja bervariasi sesuai sistem file yang Anda gunakan.

  • FAT: lupakan saja :) (ok, saya kira batasnya adalah 512 file per direktori)
  • NTFS: Meskipun dapat menampung 4 miliar file per folder, ini akan mengalami penurunan relatif cepat - sekitar seribu Anda akan mulai melihat masalah kinerja, beberapa ribu dan Anda akan melihat explorer terlihat menggantung cukup lama.
  • 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).

gbjbaanb
sumber
6
Ini salah. Tidak ada batasan 32.000 file di EXT3. Ada batas 32000 subdirektori. Saya punya direktori di sini dengan lebih dari 300.000 file dan berkinerja baik.
davidsheldon
1
cukup benar - batas file adalah batas seluruh sistem file pada inode, tetapi Anda terbatas pada tautan 32k (yaitu subdir).
gbjbaanb
Pernyataan untuk NTFS saat ini juga tidak benar, dapat menyimpan hingga 4294967295 (2 ^ 32 - 1): technet.microsoft.com/en-us/library/cc781134%28WS.10%29.aspx
Fleshgrinder
JANGAN membingungkan Sub-direktori dengan file, pada mesin CentOS saya memiliki 32000 sub-direktori, mencapai batasnya, saya memindahkan semua FILES dalam satu direktori dan masih berfungsi dengan baik.
adrianTNT
8

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 rsyncseluruh direktori, dan tidak bisa hanya mengatakannya untuk menyinkronkan sebuah sub direktori yang berisi ribuan atau lebih.

davidsheldon
sumber
Nah, untuk menyinkronkan dengan server kedua saya pikir Anda harus membuat struktur dan algoritma yang menyimpan perubahan, maka log ini dapat menghemat banyak waktu.
Bahadir Tasdemir
+1 Ini sebenarnya menjawab pertanyaan.
kubanczyk
Satu kelemahan, jika Anda menggunakan klien FTP seperti FileZilla dan ingin membuat daftar isi folder, itu butuh waktu.
Kai Noack
3

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.

Wim sepuluh Brink
sumber
Tetapi apakah mengakses file secara langsung menghapus hambatan dengan mencari direktori atau akan mengakses directy masih memiliki panggilan pencarian yang mendasarinya? (Linux, debian)
steve
3
Mengakses file secara langsung akan mengurangi masalah ini. Saya telah melakukan tes pada ext3, dan mengakses file dengan nama di direktori yang berisi 500000 file tidak jauh lebih lambat dari yang berisi 1000. Jelas melakukan suatu lsmasalah.
davidsheldon
Saat mengetahui nama pastinya, akses harus cepat. Masalahnya kebanyakan kode atau perintah yang ingin mendapatkan daftar file.
Wim ten Brink
1

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.

Bip bip
sumber
0

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:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/
diciu
sumber
1
Terima kasih, saya pasti punya sesuatu di tempat begitu dir memiliki lebih dari 2k file! :)
steve
Pertanyaan ini memiliki beberapa jawaban yang baik: serverfault.com/questions/95444/...
davey
Aturan umum saya adalah bahwa lebih dari sekitar 20.000 file dalam direktori bukan ide yang baik. Kebanyakan filesystem modern tidak masalah dengan banyak file itu. Setelah Anda menekan file 32k dalam direktori, beberapa filesystem seperti ext3 akan mulai mengalami masalah kinerja yang serius.
Phil Hollenback
Phil - apakah Anda memiliki informasi tentang masalah kinerja dengan lebih dari 32k file dengan ext3, saya tidak melihat ada saat ini dengan lebih dari 300k Mungkin itu adalah sesuatu yang tidak mempengaruhi pola penggunaan saya.
davidsheldon
Pada pekerjaan saya sebelumnya, perangkat lunak ilmiah akan menghasilkan banyak file kecil (masing-masing beberapa k) dalam suatu direktori. Kami benar-benar melihat bahwa untuk> 32k kali direktori, waktu baca akan meningkat pesat. Hanya menjalankan 'ls' pada direktori dengan banyak file akan memakan waktu satu menit atau lebih.
Phil Hollenback
0

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

Janusz
sumber
0

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.

Vil
sumber