2012-02-19 18 views
9

Desidero sviluppare un gioco complesso con possibilmente migliaia di funzioni e chiamate al database.Accesso al database sincrono o asincrono

Mi chiedo se sia davvero necessario eseguire le query del database in asincrono. È un problema da codificare e tutte le mie funzioni dovranno utilizzare le callback anziché il metodo pulito return. È un approccio normale?

Stanno codificando queste chiamate in asincrono molto più velocemente, considerando che un database MySQL elabora una singola query alla volta?

+0

"Il database MySQL elabora una singola query alla volta" - per connessione. Mysql genera un nuovo thread per ogni connessione, avendo almeno tanto connessioni quante il numero di core su mysql box dovrebbe aumentare le prestazioni. –

+1

Perché considerare node.js se non si vendono le virtù della programmazione asincrona? Per favore assicurati di non essere solo un altro fan senza ragione, guarda video http://www.youtube.ug/watch?v=bzkRVzciAZg –

risposta

11

A meno che qualcosa è cambiato drasticamente nel Node.JS di recente, sei praticamente costretti ad usare l'accesso al database asincrona per scalare bene in quanto tutti vostre richieste degli utenti verrà eseguito in modo sincrono one single thread e in attesa per il database sarà davvero cadere le prestazioni . Se un utente esegue un'operazione lenta, tutti gli altri utenti dovranno attendere fino al termine.

Node.JS è davvero progettato per un flusso guidato da eventi asincroni, con prestazioni che funzionano molto meglio che lavorare intorno ad esso.

0

La velocità del motore del database + i tempi di trasmissione saranno praticamente uguali in entrambi i casi. Il problema è che le chiamate asincrone non bloccano il chiamante. Quindi l'arco asincrono è la strada da percorrere per ogni sistema "in tempo reale" che deve essere altamente reattivo agli altri input. (Come i giochi che dovrebbero sempre essere molto sensibili all'umano.)

1

Le query verranno messe in coda a livello di database in MySQL. Ci sono molte più opzioni se puoi pensare di usare Mongo DB per alcuni dei tuoi dati.

3

Le richieste asincrone non sono più veloci di quelle sincrone, indipendentemente da come le si fanno fanno sempre la stessa identica cosa. L'unica cosa che cambia è piuttosto il blocco sulla richiesta o meno.

Quando si passa con un metodo sincrono, il metodo che ha reso la richiesta interrompe l'esecuzione in attesa del ritorno della richiesta, solo quando sarà superata continuerà con la sua esecuzione. Anche se quando si utilizza la richiesta asincrona, non è necessario attendere il completamento della richiesta, è possibile continuare e al termine verrà richiamata la richiamata.

Un'altra cosa è che di solito il database è il collo di bottiglia quando l'applicazione sta effettuando molte chiamate al dbms, a causa di questo si potrebbe voler considerare l'utilizzo di tipo cache per ridurre il carico dai dbms.

1

Come Nitzan, è necessario sapere che "le richieste asincrone non sono più veloci di quelle sincrone, indipendentemente da come le si fanno fanno sempre la stessa identica cosa".

Nessuno parlato, ma se ci sono un sacco di utenti e un sacco di richieste, si hanno altre soluzioni per limitare l'accesso al database:

Creazione di file di cache

e aggiornarli dagli utenti azioni o da attività CRON.

  • Utenti informazioni
  • avvisa gli utenti
  • Utenti azioni
  • Utenti inventario ...

magazzino processo di database

Per alcune richieste ricorrenti è possibile immagazzinare in MySQL. Questi saranno eseguiti più velocemente di una richiesta utente.

Problemi correlati