Carico di lavoro su MySQL
Carico di lavoro su MySQL postato il 23/08/2010 10:28:21 nel forum programmazione, open source e hosting
Salve a tutti. Sto realizzando un browser game, e volevo sapere da voi che "limiti" si devono rispettare in termini di carico di lavoro di MySQL.
Prima di effettuare una ottimizzazione seria del codice, mi sono ritrovato ad eseguire una quantità vergognosa di query =). Con vergognosa intendo anche oltre 150. Se io che gioco da solo testando ho 150 query, non oso immaginare che cosa potrebbe succedere se a giocare fossero anche solo 3 o 4 persone che cliccano come delle dannate. Ogni secondo avrei una quantità mostruosa di query.
Sicuramente farò la mia parte di ottimizzazione, ma secondo voi, che limiti bisogna rispettare?
50 query al secondo?
Già che ci sono volevo chiedere a tutti se conosciete un servizio di hosting gratuito che mi possa permettere di utilizzare cron.
Pagine → 1
23/08/2010 11:38:27
Ciao, non c'è un numero preciso, pero' basta ricordare che minore è il numero meglio è!
Per il servzio cron, no, non conosco ancora nessun hosting gratuito che te lo offra...
Avevo parlato con un admin di altervista e mi aveva detto che poteva essere una implementzione futura, ma per adesso ancora niente!
23/08/2010 12:32:46
hireblade ha scritto: Ciao, non c'è un numero preciso, pero' basta ricordare che minore è il numero meglio è!
Per il servzio cron, no, non conosco ancora nessun hosting gratuito che te lo offra...
Avevo parlato con un admin di altervista e mi aveva detto che poteva essere una implementzione futura, ma per adesso ancora niente!
Astragon =). Ci ho giocato un po' di volte.
Beh, quello che so è che ho 60 celle e per ciascuna faccio dei controlli diretti su MySQL. Potrei fare tutto in una query un po' complessa, ma che richiederebbe uno sforzo decisamente inferiore al database. In una vecchia versione assolutamente ingiocabile del giochino ero già partito da query e codice ottimizzato. Ora, però, devo fare un bel po' di refactoring =(.
23/08/2010 12:52:24
Di che giochino si tratta ?
23/08/2010 13:50:07
hireblade ha scritto: Di che giochino si tratta ?
Nulla di particolare: dovevo realizzare un progetto in UML per un esame all'università e mi sono messo a fare l'UML di questo gioco. Sto appunto cercando spunti per scrivere l'ambientazione. E' talmente alla base che non so proprio che direzione fargli prendere =).
Di sicuro un gioco di ruolo. Però voglio dare sia la possibilità di giocare per realizzare delle città, che la possibilità di fare gli avventurieri. Così chi preferisce giochi in stile travian, può creare il proprio villaggio, gli altri giocatori, invece, penseranno a girare per il "mondo" o a lavorare per il "signore" che vuole costruire il suo maniero.
In verità non si tratta ancora di un gioco =). E' tutto da decidere.
24/08/2010 14:29:33
Un giochino del genere lo stavo facendo anke io^^....
Però poi abbandonai in quanto mi sto dedicando alla creazione di un gdr :-D...
Anke xk di Ajax so assolutamente 0 ehehehe,e dovrei impararlo assolutamente <.<..
Spero che dopo l'apertura,se avrò tempo,inizio ad impararlo come si deve e a modificare un po il gdr sotto questo aspetto eheheh!
24/08/2010 23:02:32
nodd ha scritto: Un giochino del genere lo stavo facendo anke io^^....
Però poi abbandonai in quanto mi sto dedicando alla creazione di un gdr :-D...
Anke xk di Ajax so assolutamente 0 ehehehe,e dovrei impararlo assolutamente <.<..
Spero che dopo l'apertura,se avrò tempo,inizio ad impararlo come si deve e a modificare un po il gdr sotto questo aspetto eheheh!
L'acronimo Ajax altro non è che Asincronous Javascript And Xml. Appreso questo e subito dimenticato... Se usi jquery e due o tre miei consigli ... puoi imparare a fare qualche rudimento di applicazione web 2.0 in pochissimo tempo.
25/08/2010 08:17:39
Quando inizierò ad ottimizzare le query terrò senza meno conto di questi consigli. Oltre ad ottimizzare le query e ridurle al numero minimo ... credete che possa essere assurdo memorizzare ogni query eseguita tramite il suo md5, al fine di creare una tabella hash (nelle sessioni) che mi impedisca di fare due volte la stessa query e di recuperare direttamente da esse i risultati???
Al di la di questa pazza idea che mi è venuta sul momento ... voi avete mai fatto profiling di php?
25/08/2010 14:34:15 e modificato da blancks il 25/08/2010 14:40:54
sensorario ha scritto: Quando inizierò ad ottimizzare le query terrò senza meno conto di questi consigli. Oltre ad ottimizzare le query e ridurle al numero minimo ... credete che possa essere assurdo memorizzare ogni query eseguita tramite il suo md5, al fine di creare una tabella hash (nelle sessioni) che mi impedisca di fare due volte la stessa query e di recuperare direttamente da esse i risultati???
Non è necessario, visto che basta eseguire quelle query una volta e piazzi i risultati in sessione. Se poi sono dati in aggiornamento costante (anche se lento) non si scappa, devi eseuire un pollig anche se non è traumatica come cosa appoggiandosi alle tabelle con engine di memorizzazione MEMORY come suggerito da razù.
Edit: Alla fine l'ottimizzazione vera e propria non sta nel ridurre il numero di query, ma nel ridurre il carico di utilizzo complessivo dell'applicazione per quel che sono le prestazioni del server su cui ti appoggi (quindi attenzione anche a non abusare eccessivamente della sssione) e le cose non sempre coincidono.
26/08/2010 22:45:20
Ottimo =) ho trovato quello che speravo: persone competenti in php e mysql =). Sono molto contento di essermi iscritto a questo forum.
Il mio codice php è "interessante". Anche perchè, come dicevo, per realizzarlo ho prima "implementato" la struttura usando l'UML. Certamente uso MVC. Ma l'ho esteso un pochino di più sfruttando cose carucce come i magic methods di php...
Così per darCi uno spunto di riflessione, vi racconto che cosa ho fatto:
tutto inizia qui:
<?php
session_start();
function __autoload($c) {
require_once 'classes/'.(ucfirst($c)).'.php';
}
echo new gdr();
e la classe cdr ovviamente implementa il proprio __toString();
Non solo, nel costruttore controllo $_GET e $_POST gestisco le azioni e carico dinamicamente le varie interfacce. Ogni interfaccia è una classe che ha il suo costruttore ... ed il suo __toString. Tutti i template stanno nella cartella /html/ e così via anche per javascript, css, img o altro. Ha ancora bisgno di qualche ritocchino come codice ma è abbastanza pratico. A corredo ho qualche classettina fatta da me. Sono anni che programmo ma non ho troppa esperienza di programmazione.
Bon =). Spero che quelle poche cose che ho scritto vi siano di spunto =). Se avete qualche "barbatrucco" php avrei piacere di discuterne. Amo questo linguaggio e non mi dispiacerebbe condividere con altri le mie "esperienze".
Già che ci sono, quindi, pongo una domanda:
come organizzate le vostre query? Secondo voi, può avere senso sviluppare una classe di questo tipo:
class Sql {
public static function getAllUser() {
return "select * from users";
}
public static function <DESCRIZIONE_DELLA_QUERY>() {
return QUERY;
}
}
... che serva solo a contenere tutte le query in un unico punto?
27/08/2010 11:24:22 e modificato da blancks il 27/08/2010 11:25:12
sensorario ha scritto:
Non solo, nel costruttore controllo $_GET e $_POST gestisco le azioni e carico dinamicamente le varie interfacce. Ogni interfaccia è una classe che ha il suo costruttore ... ed il suo __toString. Tutti i template stanno nella cartella /html/ e così via anche per javascript, css, img o altro. Ha ancora bisgno di qualche ritocchino come codice ma è abbastanza pratico. A corredo ho qualche classettina fatta da me. Sono anni che programmo ma non ho troppa esperienza di programmazione.
Sto sviluppando un simile software engine che però non si basa interamente sulla OOP, al contrario sto abbondando con un po di procedurale ma è una scelta di sviluppo per rendere piu' semplificate le cose per chi ne usufruirà. ( al posto di una classe per pagina ho una procedura dedicata, lasciando ad una manciata di classi libreria la gestione di mezzi primari come il template engine e dialogo col dbms, chiaro sempre secondo paradigma MVC )
Per quanto riguarda la domanda sull'archiviazione delle query dipende in primis dalla tua applicazione, ad esempio se prevedi di manipolare spesso la struttura del database ti può tornare sicuramente comodo, ma in ogni caso sicuramente ti sconsiglierei l'utilizzo di una classe per questo fine in quanto una classe richiede una maggiore impiego di risorse e mi sembra sprecato usarla per una banale 'lista', un array è ugualmente strutturato e funziona decisamente bene per questi propositi.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Storie di Agarthi ↗
AlterEgo ↗
World of the Sea Battle ↗
CRSED: F.O.A.D. ↗
Foundation Galactic Frontier ↗
Sea of Conquest ↗
Hero Wars ↗
The Coven ↗
Raja Dunia ↗