Ho un programma molto semplice in cui creo un'istanza Sequelize e quindi eseguo una query non elaborata su un database mysql. Il caso è che quando MySql è attivo e funzionante non ci sono problemi, posso eseguire la query senza problemi. Ma quando MySql non è in esecuzione, la query non emette alcun errore fino al raggiungimento del timeout della query e quindi emette un errore ETIMEOUT. Ma non è proprio quello che sta succedendo. Prevedo che la query emetta un errore ENOTFOUND o qualcosa del genere se mysql non è in esecuzione in modo da poter gestire l'errore ed eseguire azioni diverse se Mysql è andato giù o Mysql è molto occupato e ha un tempo di risposta molto ampio. Che cosa ho fatto per verificare se Mysql è attivo e funzionante senza dover attendere l'eccezione di timeout.Verifica connessione mysql in sequenza
sequelize = new Sequelize(db_name, db_user, db_pass, opts);
sequelize.query('SELECT * FROM some_table').success(function(result) {
console.log(result);
}).error(function(err) {
console.log(err);
});
Si dovrebbe essere il monitoraggio dei server MySQL in modo che sia tutto il tempo, non scrivere codice dell'applicazione che è inutilmente paranoico. Un timeout è il comportamento corretto per il server inattivo e la connessione non riuscita. È possibile aumentare il valore di timeout se è troppo lento. – tadman
bene in caso di paranoia, anche se il server MySQL è attivo e la query emette un errore, a causa del sovraccarico, è inutile dire che è necessaria una migliore infrastruttura di database, è possibile utilizzare il server di cache come Redis, per risposte più veloci, ma se tutte le tue query sono come quelle del tuo esempio, allora non è scritto con le prestazioni in mente, voglio dire, per 10.000 righe potrebbe essere ok, ma per un milione di righe interrogate ogni 5sec o 10sec non va bene .. IMHO dovresti riprogettare e cercare approcci migliori in quello che stai facendo, scommetto che ce n'è uno migliore. – Gntem