Tengo un juego basado en el iPhone en línea, con muchos juegos corriendo al mismo tiempo. Estoy en el proceso de optimizar el código, ya que tanto el servidor como yo hemos fallado hoy.1.3M consultas/Hora. ¿Cómo construirías las consultas?
Esta es la configuración:
Ahora mismo tengo una tabla, "coincidencias" (70 campos de datos para cada fila de la estructura.), Que mantienen un registro de todos los partidos activos. Cada 7 segundos, el iphone se conectará, descargará todas las coincidencias en la tabla de "coincidencias" en la que esté activo y actualizará la interfaz de usuario en el iPhone.
Esto funcionó muy bien hasta que aproximadamente 1000 personas descargaron el juego y jugaron. El servidor se colgó.
Para optimizar, creo que puedo crear una nueva tabla llamada "matches_needs_update". Esta tabla tiene 2 filas; nombre e id. El "id" es el mismo que el partido en la tabla "coincidencias". Cuando se actualiza una coincidencia, se coloca en esta tabla.
Ahora, en lugar de buscar en toda la tabla de "coincidencias", la consulta solo verifica si el jugador tiene alguna coincidencia que deba actualizarse, y luego obtiene esas coincidencias de la tabla "coincidencias".
Mi pregunta es doble:
- Es esta la solución óptima?
Si un jugador está activo en, digamos 10 partidos, hay una buena manera de obtener esos 10 partidos de la tabla de "partidos" al mismo tiempo, o necesito un bucle para hacer 10 consultas, una para cada partido:
"SELECCIONAR * FROM coincide con WHERE id =?"
Gracias de antemano
Si bien el problema es grave, este es uno de los mejores tipos de problemas que puede tener, si lo piensa. El bloqueo de demasiados usuarios reales es el mejor tipo de bloqueo. – Cyclone
Una solución que utiliza las Notificaciones Push podría ser una mejor manera de evitar el problema de rendimiento. De esta manera no tendrá muchos controles de giro redundantes –
Parece que una persona puede estar activa en varias coincidencias y varias personas pueden estar activas en una coincidencia. Sin duda debe tener 3 tablas? – DanRedux