Ciao a tutti!
Sto sviluppando un browsergame e mi sono trovato davanti un problema quando, dopo le prime prove, ho cominciato a creare una struttura che ospitasse una mappa di dimensioni adatte ad un discreto numero di utenti.
Il tutto è gestito tramite un demone php e uno scambio di socket tra server e client, questo per far sì di avere i dati in una serie di matrici anziché dover fare query su DB per ogni richiesta, per ovvie motivazioni. Di conseguenza tutti i dati sono immagazzinati nella ram e sempre accessibili.
Il problema si è presentato quando questa matrice ha cominciato ad ospitare una mappa consistente: circa 7.000.000 di chiavi. So che può sembrare un numero esagerato, ma secondo i conti, a livello di giocabilità, non sono poi così tanti
Facendo così il server richiede diversi GB di memoria solo per creare la mappa. Si è pensato ovviamente di fare un a mappa che si riempisse gradualmente e quindi evitare di occupare questo spazio anche a mappa vuota, però il dubbio è di stare facendo la struttura in modo sbagliato, o che magari ce ne fosse uno migliore...
Sto sviluppando un browsergame e mi sono trovato davanti un problema quando, dopo le prime prove, ho cominciato a creare una struttura che ospitasse una mappa di dimensioni adatte ad un discreto numero di utenti.
Il tutto è gestito tramite un demone php e uno scambio di socket tra server e client, questo per far sì di avere i dati in una serie di matrici anziché dover fare query su DB per ogni richiesta, per ovvie motivazioni. Di conseguenza tutti i dati sono immagazzinati nella ram e sempre accessibili.
Il problema si è presentato quando questa matrice ha cominciato ad ospitare una mappa consistente: circa 7.000.000 di chiavi. So che può sembrare un numero esagerato, ma secondo i conti, a livello di giocabilità, non sono poi così tanti
Facendo così il server richiede diversi GB di memoria solo per creare la mappa. Si è pensato ovviamente di fare un a mappa che si riempisse gradualmente e quindi evitare di occupare questo spazio anche a mappa vuota, però il dubbio è di stare facendo la struttura in modo sbagliato, o che magari ce ne fosse uno migliore...
PHP:
$x=1;
$y=1;
for($z=1; $z<7372800;$z++){
if($x>3840){$x=1;$y++;}
$mat = rand(12,19);
$quantita = rand(1, 10);
$MAPPA[$x.'-'.$y] = array(
'materiali'=>array(
'nome'=>$mat,
'quantita'=>($quantita/5)
)
);
$x++;
}
Ultima modifica di un moderatore: