Saya mengelola aplikasi yang berisi filestore di mana semua file disimpan dengan nama file yang sama dengan jumlah md5 mereka. Semua file disimpan dalam satu direktori. Saat ini ada ribuan, tetapi segera mereka akan menjadi jutaan file di server. Server saat ini menjalankan Ubuntu 11.10 pada sistem file ext4.
Seseorang mengatakan kepada saya bahwa tidak bijaksana untuk meletakkan banyak file dalam direktori, karena ini akan menciptakan peningkatan waktu dan keandalan pencarian yang signifikan (dia punya cerita tentang file maks yang bisa ditunjukkan oleh satu dir, menghasilkan daftar yang ditautkan besar). Sebagai gantinya ia menyarankan untuk membuat sub direktori dengan misalnya substring dari nama file. Namun, ini akan membuat beberapa hal dalam aplikasi saya jauh lebih rumit.
Apakah ini masih benar, atau apakah sistem file modern (misalnya ext4) memiliki cara yang lebih efisien untuk menangani ini dan skala secara alami? Wikipedia memiliki beberapa perincian tentang sistem file, tetapi tidak benar-benar mengatakan apa-apa tentang file maks per direktori, atau waktu pencarian.
sumber
Sistem file modern menangani direktori yang sangat besar dengan sangat baik, bahkan hingga jutaan file. Tetapi alat konvensional tidak. Misalnya mendaftarkan direktori besar dengan "ls" akan memakan waktu yang cukup lama karena biasanya membaca seluruh direktori dan mengurutkannya (walaupun Anda dapat menggunakan ls -f untuk menghindari pengurutan). Itu tidak akan mulai menampilkan file sampai semua dibaca. Membagi nama membantu dalam beberapa kasus, tetapi tidak sama sekali (misalnya replikasi rsync masih perlu mengumpulkan seluruh pohon nama).
sumber
Bisakah saya menyarankan menggunakan database SQL saja? Ini kemungkinan akan mengubah kelemahan yang dirasakan ini dalam aplikasi Anda menjadi suatu kekuatan.
sumber