Bir Klasördeki Optimum Dosya Sayısı (optimum file count in a directory)

Bir sunucunuz varsa, içerisinde bir sürü hesabınız varsa veya bir sunucudaki birden çok hesabı yönetiyorsanız, bu anlatacağım en çok sizi ilgilendiriyor. Herkes için de faydalı bir bilgi tabi ki.

Bir yazılımda cache, temp vb. klasörler olmaktadır. Yalnız, bu klasörlerin içeriği dinamik olarak kısıtlanmadığından veya kısıtlanmasının maliyetinden dolayı, klasördeki dosya sayısı çok dinamik olarak artacaktır.

Normalde bir klasöre elle de çok fazla dosya atmış olabilirsiniz. Bu da benzer bir durumdur. Örneğin, bir ürün kataloğunuz var ve resimleri katalog klasörünün altına koydunuz.

Bu noktada önerimiz bir klasör içine 3000-5000 den fazla dosya koymayın. Bu tabi direkt bu sayı olarak söylemem zor ama yine de 10000’den kesinlikle fazla olmasın. Alt klasörden bahsetmiyorum, dosyadan bahsediyorum. Burada alternatif olarak katalog klasörünün içine 01/, 02/ diye klasörler açıp 500 500 koymakta yarar var.

Kendinizi işletim sisteminin yerine koyun. Elinizde bir adres var, içinde yığınla insan var. Siz içlerinden daha önce tanışmadığınız birini arıyorsunuz, kendisinden bir bilgi alacaksınız. Bulmanız çok zor. Özellikle bu içerideki kişilerin isimlerinin ilk birkaç karakteri aynı ise, o zaman iş daha da zorlaşır. Bu noktada belirtilen adreste odalar koysanız, insanları da alakalı oldukları yere göre odalara koysanız, (odalar burada klasör manasına geliyor, yapılan işlem de klasör oluşturarak manuel indeks oluşturmak) aradığınız şeyi hangi odada arayacağınızı bildiğiniz sürece işlemini hızlanacaktır. Ki zaten klasör ismini biz veriyorsak, olumlu etki edecektir.

Benim gibi bir cache klasöründe 40000 tane dosya oluşmasını ve hatayı tespit etmek için serverda cirit atmanız gerekmeden bu bilgiyi öğrenebilirseniz ne güzel. 40000 dosya (zend_cache dosyası) içinden php, ilgili dosyayı load edesiye kadar mysqlden çekse çok daha hızlı olacaktı halbuki. (cache tamamen ters bir mantığa dönmüştü). Dinamik bir cache mantığı vardı.

Olayı da şöyle tespit ettim ; mysqlde doğru düzgün query düşmüyordu. Sunucuda top komutu çalıştırdığımızda httpd isteklerinin normalden 2-3 kat cpu harcadığını gördük, bağlantı sayısı da normalden azdı. Biz de ilk önce mail sunucusu veya yedekleme ile ilgili bir sorun oluştuğunu düşündük fakat, gelen isteklerin yoğunluk yaratan hesaplardan birinin cache klasörüne girip baktığımda bu tabloyla karşılaştık. Bu dosyaları temizlediğimizde ise makinadaki stres tamamen gitti. (Bu konuda yazılım geliştirmesi ile görev oluşturduk, ve gelişimi için gerekli aşamalara başladık.)

Bu bilgiyi tecrübe ederek öğrenmemeniz dileğiyle, iyi çalışmalar dilerim.