Ne hızlıdır;

12 Cevap php

Hızlıdır PHP, içinde; kullanarak include('somefile.php') ya da aynı bilgileri almak için basit bir SELECT sorgu ile MySQL veritabanı sorgulama?

Örneğin, karşı maç için 3.000 koşullarını gerekli bir JavaScript otomatik tamamlama arama alanını vardı söylüyorlar. O include kullanarak başka bir dosyadan bu terimleri okumak için ya da basit bir SELECT sorguyu kullanarak bir MySQL veritabanı onları okumak için hızlı mı?

Edit: Bu benim eklemek istediğiniz veritabanı ve dosya benim kod olarak aynı yerel makinede olduğu varsayılır.

12 Cevap

Duruma göre değişir. Lütfen dosya sunucusunda yerel olarak saklanır ve veritabanı başka bir makinede yüklü değilse, daha sonra hızlı dosyasını dahil etmektir.

Buuuuut, bu sisteme bağlıdır çünkü bu doğru değil olabilir. Ben bir PHP test komut dosyası yapmak ve komut satırından bunu 100 kez çalıştırın ve (cURL kullanarak) HTTP testi tekrarlamak için size önermek

Örnek:

use_include.php

<?php

  start = microtime(true);

  include( 'somefile.php' );

  echo microtime(true)-start;

?>

use_myphp.php

<?php

  start = microtime(true);

  __put_here_your_mysql_statements_to_retrieve_the_file__

  echo microtime(true)-start;

?>

Bir dosyayı dahil hemen hemen her zaman daha çabuk olmalıdır. Veritabanı başka bir makinede (örneğin paylaşılan hosting) veya bir çoklu sunucu kurulumu ise arama ekstra bir hop yapmak zorunda kalacaktır.

Ancak, uygulamada fark muhtemelen önemli gitmiyor. Liste dinamik ise MySQL saklayarak sizin hayatınızı kolaylaştıracak. Statik listeleri (örneğin ülkeler veya devletler) bir PHP saklanabilir içerir. Liste oldukça kısa (birkaç yüz kayıt) ve sık kullanılan ise, düz JavaScript içine yüklemek ve AJAX ile uzak yapabilirdi.

Eğer MySQL yol gidiyor ve hız konusunda endişeleriniz varsa o önbelleğe kullanın.

$query = $_GET['query'];
$key = 'query' . $query;
if (!$results = apc_fetch($key))
{ 
    $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query");
    $statement->bindValue(':query', "$query%");
    $statement->execute();
    $results = $statement->fetchAll();
    apc_store($key, $results);
}

echo json_encode($results);

Bilinmeyen çok sayıda değişken vardır gibi, kesin bir cevap vermek imkansız / çok zor - dosya sistemi, bir NFS dünyanın diğer tarafında bulunan bu monte ne olur? Ya bellekte tüm MySQL veritabanı var. Veritabanının boyutu çok çarpanlarına olmalıdır.

Ama, bir daha cevap-y not, a safe guess would be that MySQL is faster, iyi bir dizin, iyi veritabanı yapısı / normalleştirme ve çok süslü değil / karmaşık sorgular verilmiştir. , Daha önce belirtildiği gibi, tüm veri kümesi zaten MySQL ile bellekte önbelleğe iken,: I / O işlemleri (yavaş okuma) her zaman pahalıdır.

Ben MySQL dizgi algoritmaları çok daha iyi PHP ile gelip ne daha optimize edilmiş arama eminim - Ayrıca, ben bir şeyler daha zahmetli kılan bu dosyalar dahil, daha ileri dize manipülasyon yaptığını düşündüm düşünün.

Bu size verilerin prefetch faydalı olabilir düzenli olarak getiriliyor gidiyoruz bir şey ise (disk veya veritabanından, farketmez) ve komut memcached gibi bir RAM önbellek çekin var.

Zamanında fark söylemek cesaret ediyorum yatan tekniğe göre sistem tasarımı daha aşağı. MySQL sonucu ve bir dosya hem de önbelleğe alınabilir ve performans farkı ihmal edilebilir kadar küçük olurdu.

Bunun yerine bakım farkı ne olacağını kendime sorardım. Hiç verileri değiştirmek olasıdır? Aksi takdirde, sadece düz bir dosyaya pop. Bu kadar sık ​​içeriğin bit değiştirmek olasıdır? Eğer öyleyse, bir veritabanı işlemek için yol kolaydır. Bu "yeniden yapılanma" ihtiyacı varsa veri yapısı için aynı şey, belki de bir veritabanında koymak için daha verimli?

Yani: Ne hissediyorum sizin ve kod ve veri gelecek sürdürücü için en uygun etmeyin. :-)

kesinlikle sürece dosya çok büyük değil ve çok fazla bellek kullanarak sonuna kadar gibi bir veritabanı tavsiye hangi durumda dahil

Dosyadan bir komut için ham veri okuma genellikle bir veritabanından daha hızlı olacaktır.

Eğer javascript dönmek için bir eşleşme bulmak için bu verileri sorgulamak isteyen gibi Ancak bu sesler. Bu veritabanı iyi bir şeydir gibi MySQL veri gerçek sorgulama / arama (doğru vb endeksli özellikle) daha hızlı olacağını bu durumda bulabilirsiniz.

Komut çalıştırır yaparken sunucu belleği çok kullanarak olacak gibi büyük bir dosyada okuma da daha az ölçeklenebilir.

Neden her iki yol yapmak ve hangisinin daha hızlı olduğunu görmüyor? Her iki çözüm de oldukça önemsiz.

Eğer terimlerin sayısının daha sonraki bir tarihte daha büyük olmak için bekliyoruz, bir fulltext search alanı ile MySQL kullanarak daha iyidir.

Ben son zamanlarda bu sorunu vardı. Ben her sayfa isteği üzerine sorgulama edildi mysql bazı verileri vardı. Benim veri seti için, MySQL kullanmak daha sabit kayıt uzunluğu dosyası yazmak için hızlıydı.

Benim için bir dosya daha hızlı MySQL daha yapılmış bir kaç farklı faktör vardı:

  1. Dosya boyutu küçük oldu - metin veri 100kb altında
  2. Ben rastgele toplama ve arama değildi - indeksleri yapılan hiçbir fark
  3. Bağlantı zaman - dosyasını açarak ve onu okuma, sunucu yükü yüksek iken veritabanına bağlanırken daha hızlı oldu. OS bellekte dosyayı önbelleğe çünkü bu özellikle geçerlidir

Alt satır Ben benchmarked ve karşılaştırıldığında sonuçlar oldu. Benim iş yükü için, dosya sistemi hızlı oldu. Benim veri şimdiye kadar set büyürse, bu değişecek sanıyorum. Ben performansı göz tutmak için gidiyorum ve ben gelecekte nasıl değiştirmeye hazırım.

Eğer dosyaya dahil APC veya XCache gibi PHP için önbellek kullanıyorsanız, daha hızlı olması muhtemeldir. PHP kullanarak konum ve performans istiyorsanız, bir bayt kodu önbellek kesinlikle bir gerekliliktir.

Eğer veritabanını çarpmamak için, dahil bir PHP komut dosyası etrafında statik veri tutmak düşünüyor gibi geliyor. Bu temelde ilkel önbelleği yapıyoruz. Bu sürece veri değişikliği yaparsa / bu dosyayı yenilemek için bir yol var gibi, tamam çalışabilir. Ayrıca daha hızlı statik veri karşı SQL sorguları yapmak için MySQL Query Cache hakkında öğrenmek istediğiniz görünebilir. Veya hafıza statik verileri tutmak için Memcached.

Ben tam olarak yavaş olabilir olsa bile içerik dinamik ise, kullanılacak Semester, biliyorum, ama benim opinio MySQL kullanarak yok. Ama dahil kullanarak, büyük içerikler için, hızlı eminim.