Ho un gioco iphone turnbased online, con un sacco di giochi in esecuzione allo stesso tempo. Sono in procinto di ottimizzare il codice, poiché sia io che il server sono andati in crash oggi.1.3M query/ora. Come costruiresti le domande?
Questa è la configurazione:
In questo momento ho una tabella, "incontri" (70 campi di dati per ogni riga della struttura.), Che tengono traccia di tutte le partite attive. Ogni 7 secondi, l'iPhone si connetterà, scaricherà tutte le partite nella tabella "partite" in cui è attivo e aggiornerà l'interfaccia utente nell'iPhone.
Questo ha funzionato bene fino a circa 1.000 persone hanno scaricato il gioco e giocato. Il server si è bloccato.
Quindi per ottimizzare, immagino di poter creare una nuova tabella chiamata "matches_needs_update". Questa tabella ha 2 righe; nome e id. "Id" è uguale alla corrispondenza nella tabella "matches". Quando una partita viene aggiornata, viene inserita in questa tabella.
Ora, invece di cercare attraverso l'intera tabella "partite", la query controlla solo se il giocatore ha delle partite che devono essere aggiornate e quindi ottiene quelle partite dalla tabella "partite".
La mia domanda è duplice:
- E 'questa la soluzione ottimale?
Se un giocatore è attivo, ad esempio 10 partite, c'è un buon modo per ottenere quelle 10 corrispondenze dalla tabella "partite" allo stesso tempo, o ho bisogno di un ciclo for facendo 10 query, una per ciascuna match:
"SELECT * FROM matches WHERE id =?"
Grazie in anticipo
Mentre il problema è serio, questo è uno dei migliori tipi di problemi che si possono avere, se ci pensate. Arrestarsi da troppi utenti effettivi è il miglior tipo di arresto anomalo. – Cyclone
Una soluzione che utilizza le notifiche push potrebbe essere un modo migliore per aggirare il problema di prestazioni. In questo modo non avrai molti controlli a turno ridondanti –
Sembra quasi che 1 persona possa essere attiva in più incontri e più persone possono essere attive in una partita? Sicuramente devi avere 3 tavoli? – DanRedux