PHP bir dizine dosyaları büyük miktarda yazma

4 Cevap php

Ben basit bir önbellekleme sistemi yapmak için PHP kullanıyorum, ama ben komut biridir vadede 10.000 kadar dosya önbelleğe için gidiyorum. Şu anda basit bir döngü ile kullanıyorum

$file = "../cache/".$id.".htm";
$handle = fopen($file, 'w');
fwrite($handle, $temp);
fclose($handle);

($ Id veritabanındaki bir satıra atanan rasgele bir dize olmak)

ancak bunu yaparken daha iyi bir yöntem yoktur, biraz yavaş görünüyor? Ayrıca ben bazı işletim sistemlerinde Eğer tek bir dizindeki dosyaları binlerce ve binlerce saklayamazsınız olduğunu okumuştum, bu CentOS ya da Debian alakalı? Akılda çıplak Bu klasör de bunun içinde bir milyondan fazla küçük dosyalar olan sona erebilir.

Basit sorular herhalde ama ben bu kodu ölçekleme almak istiyorum ve daha sonra ben yanlış yapıyorum öğrenmek değil, ben sadece şu anda bir anda 10-30 sayfaları chaching ile test ediyorum.

4 Cevap

UNIX, her şey bir dosya olduğunu unutmayın.

Bir dizine birçok dosyaları koyduğumuzda, bir şey bu dosyaları izlemek zorundadır. Eğer yaparsanız bir: -

ls -la

Muhtemelen dikkat edeceğiz ki. ' bazı boyutu büyüdü. Senin 10000 tüm dosyalar üzerinde bilgi depolandığı yerdir.

Her aramak ve her bu büyük dizin girişi ayrıştırma içerecektir ki dizine yazma.

Dizin karma sistemin çeşit uygulamak gerekir. Bu hedef dir altında alt dizinleri oluşturma dahil edeceğiz.

örn.

/somedir/a/b/c/yourfile.txt /somedir/d/e/f/yourfile.txt

Bu oldukça küçük, her dizin girdisinin boyutu tutmak ve IO işlemleri hızlandırmak olacak.

Eğer etkili bir dizinde kullanabileceğiniz dosya sayısı op değil. Sistem ancak dosya sistemi bağımlı.

Sen bunun ilk 1, 2 veya 3 karakter alarak, dosya md5 özetini alarak etkili önbellek dir bölünmüş ve bir dizin olarak kullanabilirsiniz. Tabii ki önbellek dosyaları alınırken aynı yaklaşımı exsists ve kullanımı değilse dir oluşturmak zorunda.

Binlerce birkaç on, 2 karakter (00 FF 256 altklasörlere) yeterli olurdu.

Genel dosya I / O nispeten yavaştır. Eğer diske yazma, dosya 1000 üzerinde döngü varsa, yavaşlık, normal olabilir.

Bu uygulanabilir bir seçenek ise ben bir gece işi o üzerinde hareket olacaktır.

Sen dosya sistemleri için bir alternatif olarak memcached bakmak isteyebilirsiniz. Bellek kullanarak çok büyük bir performans artışı sağlayacaktır.

http://php.net/memcache/