PROZONE powered by Tophost
  Home   Forum   Regolamento Help Login Registrati   *
Statistiche
Utenti
Utenti Totali: 1707
Ultimo utente: xal
Statistiche
Posts Totali: 29470
Topics Totali: 3404
Online Oggi: 51
Presenze Massime Online: 559
(23 Luglio 2008, 14:24:28)
Utenti Online
Utenti: 1
Visitatori: 37
Totale: 38
Siti amici
Design & Multimedia

Dire e Fare il blog che ti aiuta

Wordpress
Pagine: [1]
 
Autore Topic: Guide per principianti: diminuire le query al db  (Letto 2472 volte)
doGmaI
Utente Attivo
****
Posts: 280


Guide per principianti: diminuire le query al db
« il: 26 Agosto 2007, 19:11:05 »

Uno dei parametri critici, solitamente, è il numero di query che si fanno al database del proprio sito.

A tal proposito, una soluzione (banale finchè volete), può essere una funzione come questa

Codice:
function caricaParametro($nomeParametro) {
  if (!isset($_SESSION[$nomeParametro)) {
    //caricamento da archivio
    return $valoreParametro;
  } else {
    return $_SESSION[$nomeParametro];
  }
}

Requisiti:
  • ovviamente un archivio (mySQL o altro)
  • la possibilità di sfruttare le sessioni

L'idea alla base di questa funzione è quella di sfruttare le sessioni. Visto che i siti di una certa complessità, molto probabilmente già sfrutteranno le sessioni, si può pensare di caricare in sessione via via i parametri che servono, e solo quando servono. Infatti con una funzione strutturata come quella sopra, se un parametro non è presente in $_SESSION viene caricato dall'archivio (va inserito il codice apposito al posto del commento), altrimenti, viene restituito il valore che già sta nella sessione.

Un esempio:
Se nel nostro sito, abbiamo alcune pagine che utilizzano certi parametri e altre che ne utilizzano altri, sarebbe inutile caricare subito tutti i parametri in memoria (un trasferimento inutile di dati), come sarebbe dispendioso, ogni volta che viene caricata una pagina, leggersi i parametri da db (anche fosse solo quelli che servono alla pagina stessa). Con la caricaParametro, man mano che le pagine vengono visitate, si caricano in sessione i parametri che servono alla pagina stessa. Il grosso vantaggio è che se una pagina non viene visitata i suoi parametri non verranno mai caricati (risparmi di query al db). Analogamente se si torna ad una pagina visitata in precedenza, i parametri non vengono ricaricati dal db, ma vengono restituiti quelli già in sessione

Note: ovviamente questa funzione è solo un'idea abbozzata. Come sempre bisogna prestare molta attenzione a cosa e come si memorizza in sessione (evitare password o codice critico). Ma, ad esempio, per memorizzare le dimensioni dell'immagina da visualizzare in una pagina, può essere una buona idea, tanto non viene modificata ogni due secondi. E' altresì scontato, che vanno effettuati tutti i controlli del caso, sia sul valore di $nomeParametro, sia sul valore di $valoreParametro

Buon coding
Loggato

lacellula
Moderatore
*
Posts: 1 138


Re: Guide per principianti: diminuire le query al db
« Risposta #1 il: 26 Agosto 2007, 19:33:29 »

Note: ovviamente questa funzione è solo un'idea abbozzata. Come sempre bisogna prestare molta attenzione a cosa e come si memorizza in sessione (evitare password o codice critico).
Perché?
Loggato

Diavolo_Rosso
Utente Avanzato
*****
Posts: 816


Re: Guide per principianti: diminuire le query al db
« Risposta #2 il: 26 Agosto 2007, 19:40:56 »

Uno dei parametri critici, solitamente, è il numero di query che si fanno al database del proprio sito.

A tal proposito, una soluzione (banale finchè volete), può essere una funzione come questa

Codice:
function caricaParametro($nomeParametro) {
  if (!isset($_SESSION[$nomeParametro)) {
    //caricamento da archivio
    return $valoreParametro;
  } else {
    return $_SESSION[$nomeParametro];
  }
}

Requisiti:
  • ovviamente un archivio (mySQL o altro)
  • la possibilità di sfruttare le sessioni

L'idea alla base di questa funzione è quella di sfruttare le sessioni. Visto che i siti di una certa complessità, molto probabilmente già sfrutteranno le sessioni, si può pensare di caricare in sessione via via i parametri che servono, e solo quando servono. Infatti con una funzione strutturata come quella sopra, se un parametro non è presente in $_SESSION viene caricato dall'archivio (va inserito il codice apposito al posto del commento), altrimenti, viene restituito il valore che già sta nella sessione.

Un esempio:
Se nel nostro sito, abbiamo alcune pagine che utilizzano certi parametri e altre che ne utilizzano altri, sarebbe inutile caricare subito tutti i parametri in memoria (un trasferimento inutile di dati), come sarebbe dispendioso, ogni volta che viene caricata una pagina, leggersi i parametri da db (anche fosse solo quelli che servono alla pagina stessa). Con la caricaParametro, man mano che le pagine vengono visitate, si caricano in sessione i parametri che servono alla pagina stessa. Il grosso vantaggio è che se una pagina non viene visitata i suoi parametri non verranno mai caricati (risparmi di query al db). Analogamente se si torna ad una pagina visitata in precedenza, i parametri non vengono ricaricati dal db, ma vengono restituiti quelli già in sessione

Note: ovviamente questa funzione è solo un'idea abbozzata. Come sempre bisogna prestare molta attenzione a cosa e come si memorizza in sessione (evitare password o codice critico). Ma, ad esempio, per memorizzare le dimensioni dell'immagina da visualizzare in una pagina, può essere una buona idea, tanto non viene modificata ogni due secondi. E' altresì scontato, che vanno effettuati tutti i controlli del caso, sia sul valore di $nomeParametro, sia sul valore di $valoreParametro

Buon coding

io non credo che la tua funzione vada molto bene per risparmiare il numero di query
se c'è bisogno di caricare 20 impostazioni, si vanno a fare 20 query differenti per inserirle via via nella sessione. a questo punto non si fa prima a fare 1 query sola e caricare tutto nella sessione in modo che siano già pronte da utilizzare dove e quando sia + opportuno?
Loggato

doGmaI
Utente Attivo
****
Posts: 280


Re: Guide per principianti: diminuire le query al db
« Risposta #3 il: 26 Agosto 2007, 20:05:11 »

Uno dei parametri critici, solitamente, è il numero di query che si fanno al database del proprio sito.

A tal proposito, una soluzione (banale finchè volete), può essere una funzione come questa

Codice:
function caricaParametro($nomeParametro) {
  if (!isset($_SESSION[$nomeParametro)) {
    //caricamento da archivio
    return $valoreParametro;
  } else {
    return $_SESSION[$nomeParametro];
  }
}

Requisiti:
  • ovviamente un archivio (mySQL o altro)
  • la possibilità di sfruttare le sessioni

L'idea alla base di questa funzione è quella di sfruttare le sessioni. Visto che i siti di una certa complessità, molto probabilmente già sfrutteranno le sessioni, si può pensare di caricare in sessione via via i parametri che servono, e solo quando servono. Infatti con una funzione strutturata come quella sopra, se un parametro non è presente in $_SESSION viene caricato dall'archivio (va inserito il codice apposito al posto del commento), altrimenti, viene restituito il valore che già sta nella sessione.

Un esempio:
Se nel nostro sito, abbiamo alcune pagine che utilizzano certi parametri e altre che ne utilizzano altri, sarebbe inutile caricare subito tutti i parametri in memoria (un trasferimento inutile di dati), come sarebbe dispendioso, ogni volta che viene caricata una pagina, leggersi i parametri da db (anche fosse solo quelli che servono alla pagina stessa). Con la caricaParametro, man mano che le pagine vengono visitate, si caricano in sessione i parametri che servono alla pagina stessa. Il grosso vantaggio è che se una pagina non viene visitata i suoi parametri non verranno mai caricati (risparmi di query al db). Analogamente se si torna ad una pagina visitata in precedenza, i parametri non vengono ricaricati dal db, ma vengono restituiti quelli già in sessione

Note: ovviamente questa funzione è solo un'idea abbozzata. Come sempre bisogna prestare molta attenzione a cosa e come si memorizza in sessione (evitare password o codice critico). Ma, ad esempio, per memorizzare le dimensioni dell'immagina da visualizzare in una pagina, può essere una buona idea, tanto non viene modificata ogni due secondi. E' altresì scontato, che vanno effettuati tutti i controlli del caso, sia sul valore di $nomeParametro, sia sul valore di $valoreParametro

Buon coding

io non credo che la tua funzione vada molto bene per risparmiare il numero di query
se c'è bisogno di caricare 20 impostazioni, si vanno a fare 20 query differenti per inserirle via via nella sessione. a questo punto non si fa prima a fare 1 query sola e caricare tutto nella sessione in modo che siano già pronte da utilizzare dove e quando sia + opportuno?

Si e no

Io ho preparato la funzione nell'ottica che un certo numero di pagine non venga visualizzato tutte le volte che l'utente entra nel sito.
Nel mio caso, molti passano dalla homepage del sito per accedere al forum o al gioco. Se io caricassi subito tutti i 20 parametri scaricherei (ad esempio) 20K di dati, mentre magari per visualizzare correttamente l'homepage me ne bastano 2. In questo caso meglio fare due sole query (o una che scarica entrambi i parametri, insomma come preferite)

Chiaramente se tu sai che tutte le volte ti devi scaricare tutti i parametri allora non ha senso fare una cosa del genere.

L'idea mi è venuta perchè in questi giorni un paio di "nuovi adepti" che stanno iniziando a lavorare con i db, hanno avuto la pensata di inserire certi dati nel db, e ad ogni caricamento di qualsiasi pagina del sito si fanno X query per scaricarseli tutti. Ovviamente nel loro caso non tutti i parametri servono...

@lacellula: beh, per esperienza personale, so che alcuni si fanno prendere la mano e ci salvano tutto in sessione, dalle password (in chiaro) alle query pronte per l'sql.

Io, per non saper nè leggere nè scrivere salvo solo quello che mi serve e non è sensibile... non si sa mai (magari sono un po' paranoico...)
Loggato

lacellula
Moderatore
*
Posts: 1 138


Re: Guide per principianti: diminuire le query al db
« Risposta #4 il: 26 Agosto 2007, 20:40:01 »

Per quanto riguarda le password effettivamente potrebbe essere una buona idea non inserirle in chiaro in una variabile di sessione ma il codice deve essere scritto proprio male per poterle ottenere. Come ad esempio un var_dump($_SESSION) di troppo. Tornando all'esempio devo dire che non chiara la dinamica perché di per sé la funzione restituisce un determinato parametro ma non tiene conto della pagina. In altre parole:

index.php
 # commenti= false;
 # registrati = false;
 # header = 'BlahBlahBlah';

index2.php
# commenti= true;
 # registrati = true;
 # header = 'Arma Virumque Cano';

Ora se andiamo su index.php vengono messi nella sessione i tre dati (commenti, registrati, header). Per esempio i commenti sono un tipo bool settato a false. Detto questo passiamo a index2.php ma se non piglio pesci ad una prima occhiata la tua function restituisce false anche se in realtà dovrebbe essere true!

C'è qualcosa che mi sfugge?
Loggato

doGmaI
Utente Attivo
****
Posts: 280


Re: Guide per principianti: diminuire le query al db
« Risposta #5 il: 27 Agosto 2007, 16:46:59 »

Per quanto riguarda le password effettivamente potrebbe essere una buona idea non inserirle in chiaro in una variabile di sessione ma il codice deve essere scritto proprio male per poterle ottenere. Come ad esempio un var_dump($_SESSION) di troppo. Tornando all'esempio devo dire che non chiara la dinamica perché di per sé la funzione restituisce un determinato parametro ma non tiene conto della pagina. In altre parole:

index.php
 # commenti= false;
 # registrati = false;
 # header = 'BlahBlahBlah';

index2.php
# commenti= true;
 # registrati = true;
 # header = 'Arma Virumque Cano';

Ora se andiamo su index.php vengono messi nella sessione i tre dati (commenti, registrati, header). Per esempio i commenti sono un tipo bool settato a false. Detto questo passiamo a index2.php ma se non piglio pesci ad una prima occhiata la tua function restituisce false anche se in realtà dovrebbe essere true!

C'è qualcosa che mi sfugge?

Infatti.
Forse non sono stato chiaro su questo.
Io parlavo di parametri che non variano da pagina a pagina.
Esempio (banale).
Nella pagina X devo visualizzare l'immagina di qualcosa, e il parametro che mi indica le dimensioni è 400 (pixel, byte, patate, quello che vi pare).
Le soluzioni sono due
1° metto una costante con il valore 400 e buonanotte al secchio. Pro: non richiede query. Contro: devo modificare il codice se mi prende lo schizzo di cambiare le dimensioni dell'immagine
2° metto una parametro nel DB con scritto 400. Con la mia funzione, il parametro viene caricato solo se l'utente arriva alla pagina X, altrimenti se ne sta buono nel DB e non viene usata la query per recuperarlo. Se passo più volte dalla pagina X, il parametro viene recuperato dal DB solo al primo caricamento, dopo di che viene restituito il valore in $_SESSION. Pro: esegue una sola query al db per sessione di navigazione sul sito per parametro. Contro: funziona solo per parametri che non variano durante la sessione

E' ovvio che se tu hai parametri con lo stesso nome, ma il cui valore dipende dalla pagina in cui ti trovi, non ha senso usare questa funzione.

Io solitamente preferisco avere poche costanti, e magari mettere i parametri in un db in modo che poi possa fare una pagina php per la modifica degli stessi (visto che alcune sezioni le faccio gestire a degli iscritti, preferisco non dare loro la motivazione per mettere mano direttamente al codice, ma controllarne le modifiche con pagine ad hoc).

Spero stavolta di essere stato più chiaro (eventuali errori di battitura passatemeli perchè sono in ufficio e non ho tempo di rileggere il tutto Linguaccia )
Loggato

Pagine: [1]
 
 
Salta a:  

Oggetto Iniziato da Risposte Visto Ultimo Post
Link Utili guardaqua 5 11851 Ultimo Post 25 Ottobre 2009, 17:27:51
da Sonia D
Guida A Mod_rewrite (parte 4) doGmaI 10 13643 Ultimo Post 20 Novembre 2008, 13:37:10
da abbeyschool
Due Problemi Con Tophost « 1 2 » paolino 24 6461 Ultimo Post 14 Settembre 2006, 18:13:09
da gja
SMF 2.0 Beta 3 Public Released Darknico 2 2465 Ultimo Post 21 Marzo 2008, 11:59:50
da Darknico
Scrivere Articoli E Guadagnare Con Adsense guardaqua 0 3414 Ultimo Post 2 Febbraio 2006, 13:18:33
da guardaqua
Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC
Traduzione Italiana a cura di SMItalia

TinyPortal v0.9.8 © Bloc
XHTML 1.0 Valido! CSS Valido!


Ultima visita di Google a questa pagina 1 Agosto 2010, 00:21:09