Bu veritabanını sorgulamak veya dosyadan kapmak için daha iyidir?

5 Cevap php

Ben makaleleri kadar maç istediğiniz bir veritabanında kelimelerin büyük bir miktarda tutuyorum. Ben sadece bir dizide bu kelimeleri tutmak ve yerine veritabanını (kelime o kadar değişiyor olmayacak çünkü) her zaman sorgulamak gerektiğinde bu diziyi kapmak için daha iyi olacağını düşünüyordum.

Bunu yaparken çok performans farkı var mı?

Bunu yapmak için olsaydı, nasıl aa yeni php dosyasına dizi yazar bir senaryo yazmak için. Ben şöyle bir dizi yazmaya çalıştım:

while( $row = mysql_fetch_assoc($query))
{

 $newArray[] = $row;

}


$fp = fopen('noWordsArr.php', 'w');
fwrite($fp, $newArray);
fclose($fp);

Ama diğer dosya olsun tüm "Array" dir.

Yani ben bunu yazmak ve sonra her şey değişti bir chron durumda her birkaç gün ya da öylesine dosyasını vurmak zorunda yazabilirsiniz düşündüm. Ama hiçbir performans avantajı varsa o zaman prob gerekli olmayacak ve ben sadece veritabanını ben kelimeleri erişmek için gereken her zaman sorgulayabilirsiniz sanırım.

5 Cevap

Böyle dosyaya bir dizi yazabilirsiniz:

fwrite($fp, var_export($newArray, true));

Update Based On Comment:

Ayrıca haklı olarak Bill Karwin tarafından önerilen orada serialize() işlevini kullanabilirsiniz.

Bir dosyaya veri yapılarını yazmak için, serialize kullanın ve unserialize. Yani:

fwrite($fp, serialize($newArray));

Ve daha sonra, dosyayı aldığınızda:

$newArray = unserialize(file_get_contents("noWordsArr.php"));

, Umut olur

Thanks, Joe

Açıklandığı gibi dosyaya yazma başarısız nedeni fwrite(), bir parametre olarak bir dize alır, bu yüzden dizi dönüştüren bir dize 'Array' içine ve o yazıyor olmasıdır.

Bir dize kendiniz için dönüşüm yapmak gerekir - deneyin:

fwrite($fp, print_r($newArray, true));

Belirli bir kelime listenizde eğer işin çoğu sadece arıyor olacak, en hızlı yolu muhtemelen bir karma endeksi ile alfabetik liste depoluyor. Siz geçici bir dosyada her güncelleme de listeyi yeniden ve atomik bir eski güncellemek için yeni oluşturulan dosyayı kullanmak olacaktır.

DJB's cdb format (ayrıca in postfix uygulanan) ya da benzeri bir şey postfix diğer list formats - onlar hızlı readonly aramalarını ve seyrek atom güncellemeleri için optimize edilmiş tüm dosya formatları konum ve ben emin aynı kavramlar diğer birçok uygulamaları vardır.

Eğer SQL kullanıyorsanız uygulaması ve listesi arasında herhangi bir SQL tabaka sadece havai katacak ve (sql db kelime listesinde satırları bulmak için, bir dizin arıyor olacak) aynı şeyi yapıyor sona erecek, daha hızlı sadece olacak İki fiziksel sistemde (biri üzerinde uygulaması ve diğeri sql server) arasındaki iş yükünü bölmek.

Liste bellekte tutulacak kadar küçük olacak, sadece sizin gibi hangi formatta olursa olsun onu yüklemek ve bahsettiğim endekslenen dosyalarınızın bir yapı eşdeğer saklayın.

Liste çok büyük ya da aramaları bir sürü yapmak sürece Öte yandan, bu yaklaşımlar arasındaki performans farkı önemsiz olacaktır.

Ben bazı önbelleğe alma çözüm bakarak tavsiye ederim. Örneğin PEAR Cache_List kullanımı çok kolaydır ve gerekenleri yapmak istiyorum. Sadece bir dosya önbelleğinde kelimeleri tutmak ve zamanla veya talep üzerine ya da yenileyin.