2008-10-03 8 views
8

In PHP, che è più veloce; utilizzando include('somefile.php') o interrogando un database MySQL con una semplice query SELECT per ottenere le stesse informazioni?Cosa c'è di più veloce; includendo un altro file o interrogando un database MySQL in PHP?

Ad esempio, supponiamo di disporre di un campo di ricerca del completamento automatico di JavaScript che necessitava di 3000 termini da abbinare. È più veloce leggere questi termini da un altro file usando include o leggerli da un database MySQL usando una semplice query SELECT?

Modifica: Si presume che il database e il file che voglio includere si trovino sulla stessa macchina locale del mio codice.

+0

Si noti che la lettura dei dati è una cosa, ma la corrispondenza con i dati è un altro passo importante per le prestazioni. Quindi la tua domanda potrebbe non invitare la risposta che ti serve. – bart

risposta

14

Dipende. Se il file è archiviato localmente nel server e il database è installato in un'altra macchina, più veloce è includere il file.

Buuuuut, poiché dipende dal sistema, potrebbe non essere vero. Suggerisco a voi di fare uno script di test PHP ed eseguirlo 100 volte dalla linea di comando, e ripetere il test tramite HTTP (utilizzando cURL)

Esempio:

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; 

?> 
-3

Io proprio non lo so, ma nel mio opinio usando MySQL, anche se può essere più lento, potrebbe essere usato se il contenuto è dinamico. Ma sono abbastanza sicuro che sia più veloce, per grandi contenuti, usando include.

0

assolutamente includere fino a quando il file non è troppo grande e si finisce per utilizzare troppa memoria nel qual caso una banca dati sarebbe raccomandato

2

E 'molto difficile/impossibile dare una risposta esatta, in quanto vi sono troppe variabili sconosciute - cosa succede se il filesystem è montato su un NFS che risiede dall'altro lato del mondo? O hai l'intero database MySQL in memoria. Anche la dimensione del database dovrebbe essere presa in considerazione.

Ma, su un maggiore risposta-y nota, una supposizione sicuro sarebbe che MySQL è più veloce, dato buoni indici, di buona struttura del database/normalizzazione e le query non troppo di fantasia/complessi. Le operazioni di I/O sono sempre costose (leggi: lenta), mentre, come accennato in precedenza, l'intero set di dati è già memorizzato nella cache da MySQL.

Inoltre, immagino che tu abbia pensato di eseguire ulteriori manipolazioni delle stringhe con i file inclusi, il che rende le cose ancora più problematiche. Sono convinto che gli algoritmi di ricerca delle stringhe di MySQL siano ottimizzati molto meglio di quanto potresti ottenere in PHP.

0

La lettura dei dati non elaborati in uno script da un file sarà generalmente più veloce di un database.

Tuttavia sembra che tu voglia interrogare quei dati per trovare una corrispondenza per tornare al javascript. In tal caso, è possibile che MySQL sia più veloce per l'effettiva ricerca/interrogazione dei dati (specialmente se indicizzati correttamente, ecc.) In quanto questo è un buon database.

La lettura in un file di grandi dimensioni è anche meno scalabile in quanto si utilizzerà molta memoria del server durante l'esecuzione dello script.

1

Se questo è qualcosa che si sta andando ad essere il recupero su base regolare potrebbe essere utile per precaricare i dati (dal disco o il database, non importa) e hanno lo script tirarlo da una cache RAM come memcached.

3

La differenza di tempo dipende più dalla progettazione del sistema che dalla tecnica di base che oserei dire. Sia un risultato MySQL che un file possono essere memorizzati nella cache e la differenza di prestazioni non sarebbe trascurabile.

Invece vorrei chiedermi quale sarebbe la differenza nella manutenzione. È probabile che cambierai mai i dati? In caso contrario, basta inserirlo in un file normale. È probabile che cambi bit del contenuto così spesso? Se è così, un database è molto più facile da manipolare. Stessa cosa per la struttura dei dati, se ha bisogno di "ristrutturazione", forse è più efficiente inserirla in un database?

Quindi: fai ciò che ritieni più conveniente per te e per il futuro manutentore del codice e dei dati. :-)

4

Includere un file dovrebbe quasi sempre essere più veloce. Se il tuo database si trova su un'altra macchina (ad esempio in hosting condiviso) o in una configurazione multi-server, la ricerca dovrà fare un salto extra.

Tuttavia, in pratica, la differenza probabilmente non ha importanza. Se la lista è dinamica, la sua memorizzazione in MySQL ti semplificherà la vita. Gli elenchi statici (ad es. Paesi o stati) possono essere memorizzati in una inclusione di PHP. Se la lista è piuttosto breve (alcune centinaia di voci) e viene spesso utilizzata, è possibile caricarla direttamente in JavaScript e eliminare AJAX.

Se si sta seguendo la rotta MySQL e si preoccupano della velocità, utilizzare la memorizzazione nella cache.

$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); 
+0

Questo è il modo migliore che io possa immaginare. anche se inizialmente il filesystem è più veloce, non si scriverà una logica di selezione dei file più veloce rispetto ai ragazzi che hanno creato il driver PDO che si sta utilizzando. – Kris

0

Perché non farlo in entrambi i modi e vedere quale è più veloce? Entrambe le soluzioni sono piuttosto banali.

0

Se si prevede che il numero di termini per diventare più grande in un secondo momento, è meglio utilizzare MySQL con un campo fulltext search.

0

Recentemente ho avuto questo problema. Ho avuto alcuni dati in mysql che stavo interrogando su ogni richiesta di pagina. Per il mio set di dati, era più veloce scrivere un file di lunghezza record fisso piuttosto che usare MySQL.

Ci sono stati alcuni fattori che hanno reso un file più veloce di MySQL per me:

  1. dimensione del file era piccola - sotto 100kb dei dati di testo
  2. ero casualmente in ripresa e non ricerca - gli indici
  3. Tempo di connessione: aprire il file e leggerlo era più veloce della connessione al database quando il carico del server era alto. Ciò era particolarmente vero dal momento che il sistema operativo memorizzava il file nella cache

La linea di fondo era che l'ho confrontato e confrontato i risultati. Per il mio carico di lavoro, il file system era più veloce. Sospetto che se il mio set di dati crescerà, cambierà. Ho intenzione di tenere d'occhio le prestazioni e sono pronto a cambiare il modo in cui funziona in futuro.

0

Se si utilizza una cache bytecode PHP come APC o Xcache, è probabile che il file sia più veloce. Se stai usando PHP e vuoi prestazioni, una cache bytecode è assolutamente un requisito.

Sembra che stiate considerando di mantenere i dati statici in giro in uno script PHP incluso, per evitare di colpire il database. Stai fondamentalmente facendo un cache rudimentale. Questo può funzionare, a patto che tu abbia un modo per aggiornare quel file se/quando i dati cambiano. Potrebbe anche sembrare che vogliate conoscere MySQL Query Cache per rendere più veloci le query SQL contro i dati statici. O Memcached per conservare i dati statici in memoria.

Problemi correlati