2012-02-19 45 views
9

Quiero desarrollar un juego complejo con posiblemente miles de funciones y llamadas a bases de datos.Acceso a bases de datos síncronas vs. asíncronas

Me pregunto si es realmente necesario hacer las consultas de mi base de datos en modo asíncrono. Me duele codificar, y todas mis funciones necesitarán utilizar devoluciones de llamada en lugar del método limpio return. ¿Es este un enfoque normal?

¿Están estas llamadas en asincronización realmente mucho más rápido, considerando que una base de datos MySQL procesa una sola consulta a la vez?

+0

"La base de datos MySQL procesa una sola consulta a la vez" - por conexión. Mysql genera un nuevo hilo para cada conexión, que tiene al menos tantas conexiones como el número de núcleos en el cuadro de MySQL debería aumentar el rendimiento. –

+1

¿Por qué considerar node.js si no se venden las virtudes de la programación asíncrona? Asegúrate de no ser solo un fanático más sin la debida razón, mira el video http://www.youtube.ug/watch?v=bzkRVzciAZg –

Respuesta

11

A menos que algo ha cambiado drásticamente en Node.JS recientemente, que está bastante forzado a usar la base de datos de acceso asíncrono a escala bien desde todos los sus peticiones de usuario se ejecutará en one single thread y sincrónicamente a la espera de la base de datos realmente dejar su desempeño . Si un usuario hace una operación lenta, todos los demás usuarios tendrán que esperar hasta que finalice.

Node.JS está realmente diseñado para un flujo impulsado por eventos asíncronos, obtendrá un rendimiento mucho mejor trabajando con él que trabajando a su alrededor.

0

La velocidad del motor de la base de datos + los tiempos de transmisión serán más o menos los mismos. El problema es que las llamadas asincrónicas no bloquean a la persona que llama. Por lo tanto, async arch es el camino a seguir para cualquier sistema "en tiempo real" que necesite ser altamente sensible a otras entradas. (Como los juegos que siempre deben ser muy receptivos al humano.)

1

Las consultas se pondrán en cola en el nivel de la base de datos en MySQL. Hay muchas más opciones si puede pensar en usar Mongo DB para algunos de sus datos.

3

Las solicitudes asincrónicas no son más rápidas que las síncronas, sin importar cómo las hagas, siguen haciendo exactamente lo mismo. Lo único que cambia es más bien bloquear en la solicitud o no.

Cuando vaya con un sincrónico, el método que realizó la solicitud detendrá su ejecución a la espera de la devolución de la solicitud, solo cuando eso haya pasado continuará con su ejecución. Sin embargo, al usar una solicitud asíncrona, no hay necesidad de esperar a que se complete la solicitud, puede continuar y cuando se realice la devolución de llamada será invocada.

Otra cosa es que generalmente la base de datos es el cuello de botella cuando la aplicación está realizando muchas llamadas a la base de datos, por lo que es posible que desee utilizar el tipo de almacenamiento en caché para reducir la carga de la base de datos.

1

Al igual que Nitzan, debe saber que "las solicitudes asincrónicas no son más rápidas que las síncronas, sin importar cómo las haga, siguen haciendo exactamente lo mismo".

nadie hablaba, pero si hay una gran cantidad de usuarios y una gran cantidad de solicitudes, tiene otras soluciones para limitar el acceso de base de datos:

Creación de archivos de caché

y actualizarlos por los usuarios acciones o por tareas CRON.

  • Usuarios informaciones
  • alerta a los usuarios
  • Las acciones del usuario
  • Usuarios de inventario ...

Disponible proceso de base de datos de

Para algunas solicitudes recurrentes se puede almacenar en MySQL. Esas se ejecutarán más rápido que una solicitud del usuario.

Cuestiones relacionadas