Domanda

Spero che qualcuno qui possa aiutarmi.

La società per cui lavoro preferirebbe usare MySQL invece di MSSQL. Quindi ho scaricato l'ultimo driver (6.1) e sto eseguendo il porting del livello DB.

Tuttavia non riesco a trovare la funzione BeginExecuteReader che accetta un callback come parametro.

È per una ragione? O funziona diversamente con MySQL?

Per quanto posso vederlo, se il codice non genera un callback, avrei bisogno di un polling che lo rallenta. Anche l'uso di un thread di blocco per connessione è qualcosa che voglio evitare.

Qualcuno ha idee su come affrontare questo? (a parte alterare il driver che è probabilmente al di là dei miei poteri)

R

È stato utile?

Soluzione

La versione 6.3.4 del connettore MySQL implementa metodi asincroni ma sembra che invoca solo un delegato in modo asincrono, quindi non si bloccherà al thread chiamante ma non salverà alcun thread dal ThreadPool. Ecco la segnalazione di bug al riguardo .

E, come hai detto, non ha un parametro di callback. Ecco la segnalazione di bug al riguardo .

Credo che i fornitori di dati devart implementano correttamente i metodi asincroni, ma non sono gratuiti.

Comunque, le chiamate asincrone al database NON implicano una migliore scalabilità generale da sole. Consiglio di leggere l'articolo " Le chiamate del mio database devono essere asincrone? " per un'analisi approfondita.

Altri suggerimenti

Non conosco specificamente questo connettore, ma ogni altro connettore che ho visto per mysql aspetta solo che il server restituisca i dati durante la chiamata execute () o query (). il più vicino che otterrai è l'uso di " senza buffer " versione, che restituisce immediatamente da execute () o query (), ma si blocca quando si tenta di richiedere la riga successiva ma non è ancora arrivata dal server mysql.

Il supporto del thread MySQL mi sembra sostanzialmente un ripensamento.

Non è possibile, ad esempio, tramite l'API C, annullare una query emessa; piuttosto, la funzione query semplicemente blocca. Per effettuare più query simultanee, è richiesto un thread per query!

Prova a usare Postgres. Non l'ho usato (l'API C mi ha scoraggiato - tutti quei tipi di errori di battitura), ma ha sicuramente il supporto adeguato per le query multi-thread (ad esempio chiamate asincrone, ecc.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top