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
PROZONE
>
Forum
>
Zona Operativa
>
Programmazione
(Moderatore:
lacellula
) > Topic:
Guide per principianti: diminuire le query al db
Pagine: [
1
]
« precedente
successivo »
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
doGmaI
iSketch Italian Community
lacellula
Moderatore
Posts: 1 138
Re: Guide per principianti: diminuire le query al db
«
Risposta #1 il:
26 Agosto 2007, 19:33:29 »
Citato da: doGmaI - 26 Agosto 2007, 19:11:05
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
Guide programmazione
Diavolo_Rosso
Utente Avanzato
Posts: 816
Re: Guide per principianti: diminuire le query al db
«
Risposta #2 il:
26 Agosto 2007, 19:40:56 »
Citato da: doGmaI - 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
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
Psycotic.it
doGmaI
Utente Attivo
Posts: 280
Re: Guide per principianti: diminuire le query al db
«
Risposta #3 il:
26 Agosto 2007, 20:05:11 »
Citato da: Diavolo_Rosso - 26 Agosto 2007, 19:40:56
Citato da: doGmaI - 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
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
doGmaI
iSketch Italian Community
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
Guide programmazione
doGmaI
Utente Attivo
Posts: 280
Re: Guide per principianti: diminuire le query al db
«
Risposta #5 il:
27 Agosto 2007, 16:46:59 »
Citato da: lacellula - 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?
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
)
Loggato
doGmaI
iSketch Italian Community
Pagine: [
1
]
PROZONE
>
Forum
>
Zona Operativa
>
Programmazione
(Moderatore:
lacellula
) > Topic:
Guide per principianti: diminuire le query al db
« precedente
successivo »
Salta a:
Seleziona una destinazione:
-----------------------------
Zona Operativa
-----------------------------
=> Nomi a Dominio
=> Web Hosting
=> VPS, Serverd Dedicati, Housing
=> Rivendita Hosting
=> E-commerce
=> Sicurezza
=> Programmazione
=> CMS, forum, blog & C.
=> Grafica
=> Come promuovere i siti web
=> Internet News
-----------------------------
Zona Provider
-----------------------------
=> *Tophost
===> Script e C.
-----------------------------
Zona Promozioni
-----------------------------
=> Hosters: annunci dal settore
=> Hosters: offerte speciali e limitate
=> Webmaster: cerco & offro
=> Webmaster: fai conoscere il tuo sito
-----------------------------
Zona Annunci & Relax
-----------------------------
=> Pizzeria
=> Salotto tecnico
=> Domande, suggerimenti e presentazioni
=> Novità e annunci ufficiali
Oggetto
Iniziato da
Risposte
Visto
Ultimo Post
Link Utili
guardaqua
5
11851
25 Ottobre 2009, 17:27:51
da
Sonia D
Guida A Mod_rewrite (parte 4)
doGmaI
10
13643
20 Novembre 2008, 13:37:10
da
abbeyschool
Due Problemi Con Tophost
«
1
2
»
paolino
24
6461
14 Settembre 2006, 18:13:09
da
gja
SMF 2.0 Beta 3 Public Released
Darknico
2
2465
21 Marzo 2008, 11:59:50
da
Darknico
Scrivere Articoli E Guadagnare Con Adsense
guardaqua
0
3414
2 Febbraio 2006, 13:18:33
da
guardaqua
Caricando...