Bir dizinde birçok dosya?

7 Cevap php

Ben Linux platformu üzerinde bazı PHP projesi geliştirmek. Bir dizin birkaç bin görüntüleri (dosyalar) koyarak herhangi bir dezavantajları var mı? Bu büyüme olmaz kapalı bir set. Alternatif (en bir dizin sadece 100 say orada izin olurdu bu şekilde) bazı kimliği dayalı dizin yapısını kullanarak bu dosyaları ayırmak olacaktır.

Ben farklı sitelerde görüntüleri URL'ler bakmak çoğu zaman böyle ayrılık görüyorum, çünkü ben, bu soruyu sormak. Bunu dizin ayrılık yok daha sonra yüzlerce görüntüler bir dizinde olduğunu, bu şekilde yapılır görebilirsiniz.

Ben bir dizinde (set büyüyen değil) birkaç bin dosyaları koyarak ama örneğin gruplar halinde ayırarak değil tarafından ne kazanabilir 100? O şeyler zorlaştıran değer mi?

UPDATE:

  • (Bu dosya bulunuyor ederek görüntüye sadece doğrudan erişim) bir dizindeki dosyaları üzerinde herhangi bir programatik yineleme olmayacak
  • Ben görüntü kümesi kapalı olduğunu vurgulamak istiyorum. Bu az sonra 5000 görüntüler, ve o kadar.
  • Bu görüntüleri hiçbir mantıklı kategorizasyon yok
  • İnsan erişim / Tarama gerekli değildir
  • Görüntüler benzersiz dosya adlarına sahip
  • OS: Debian / Linux 2.6.26-2-686, Dosya Sistemi: ext3

VALUABLE INFORMATION FROM THE ANSWERS:

Farklı dizinlere Neden ayrı birçok dosya:

  • "Nfs üzerinde ext3 kullanırken 32k dosya dizin başına sınırlamak"
  • performans nedeni (erişim hızı) [ancak birkaç bin dosyaları için bu ölçüm olmadan, bu değer olmadığını söylemek zor]

7 Cevap

usually the reason for such splitting is file system performance. for a closed set of 5000 files I am not sure it's worth the hassle. I suggest that you try the simple approach of putting all the files in one directory thing, but keep an eye open on the actual time it takes to access the files.

Eğer sizin ihtiyaçlarınız için yeterince hızlı olmadığını görmek eğer önerilen gibi, bunu ayırabilirsiniz.

I had to split files myself for performance reasons. in addition I bumped into a 32k files limit per directory when using ext3 over nfs (not sure if it's a limit of nfs or ext3). so that's another reason to split into multiple directories. in any case, try with a single dir and only split if you see it's not fast enough.

Alt içine görüntüleri ayırarak hızlı dosya erişimi ek olarak, aynı zamanda dramatik dosya sisteminin doğal sınırlarına isabet önce izleyebilirsiniz dosya sayısını uzatmak.

Basit bir yaklaşım md5() dosya adı, daha sonra dizin adı olarak ilk n karakterleri kullanmak için (örneğin, substr(md5($filename), 2)). Bu (düz dosya adının ilk n karakterleri alarak vs) makul dağılımını sağlar.

Eğer herhangi bir noktada bu görüntüleri üzerinde yineleme gerekmez eğer herhangi bir dosya adı çakışmalarını beklemek olmaz ise, birden fazla dizin içine bu dosyaları bölmek ve için hiçbir sebep yoktur.

Ama yine de, bir müstehcen kategorizasyon düşünüyorsanız eğer, bu sadece bakım nedenlerle olsa bile, görüntüleri biraz sıralamak için kötü bir fikir değil.

Ben bu sorunun iki yönü olduğunu düşünüyorum:

  1. Verimli kullanarak konum Linux dosya sistemi binlerce dosya ile dizinleri desteklemiyor. Ben bir uzman değilim, ama ben daha yeni dosya sistemleri sorun olmayacağını düşünüyorum.

  2. Özel PHP fonksiyonları ile performans sorunları var mı? Ben dosyalara doğrudan erişim tamam olması gerektiğini düşünüyorum, ancak dizin listeleri yapıyoruz o zaman sonunda zaman ya da bellek sorunlarla olabilir.

Rehberde üzerinde yineleme zaman zararlı olacağını düşünebiliriz tek nedeni oldu. Daha fazla dosya, daha yineleme demektir. Ama bu temelde bir programlama açısından aklınıza gelebilecek tüm bulunuyor.

Birkaç bin görüntüleri hala tamam. Eğer bir dizin eriştiğinizde, işletim sistemleri 4K bloklar tarafından dosyaların listesini okur. Eğer düz dizin yapısı varsa çok (örneğin yüz bin) dosyaları içinde varsa, bu tüm dosya listesini okumak için zaman alabilir.

Dosya sistemini değiştirme bir seçenek ise, ben bir ReiserFs dosya sistemindeki tüm görüntüleri depolamak yerde hareketli tavsiye ederim. Bu küçük dosyalar sürü hızlı depolama / erişim de mükemmel.

Değilse, klasörler halinde onları kırma MightyE yanıtı en mantıklı ve önemli bir farkla erişim süreleri artacaktır.