2015-04-13 9 views
26

Slick è storicamente basato sui driver JDBC, che bloccano internamente l'attesa per l'I/O del socket in risposta alle query. Ogni chiamata di database in sospeso richiede un thread da bloccare su un socket; quindi, non è realmente reattivo nello stesso senso di ReactiveMongo, postgresql-async e mysql-async, che sono completamente asincroni.Slick 3.0 reattivo/asincrono a livello di driver di database? Per quali database?

È cambiato qualcosa in questo senso in Slick 3.0? O sono confuso riguardo a tutto ciò?

+1

3.x slick 3.x ha prestazioni di transazione molto scarse. Ho realizzato un micro benchmark [qui] (http://jilen.github.io/sdb/). – jilen

risposta

25

Non è async fino al livello del driver, ma quello non è un problema. Il numero di thread di blocco in attesa di connessioni al database dovrebbe essere piccolo in una buona configurazione. Quindi non consumano molte risorse. Slick li gestisce e pianifica il blocco dei thread nel proprio pool di thread, quindi non si tratta di calcoli. Un driver asincrono "nativo" probabilmente aggiungerebbe una minore accelerazione, ma non maggiore. Slick potrebbe supportarlo in futuro. Il principale vantaggio di "reattivo" deriva da ciò che Slick già implementa in 3.0. Una spiegazione più ampia può essere trovata qui: https://www.parleys.com/tutorial/reactive-slick-database-programming

+6

Vedo il punto, ma manca un grosso asterisco, credo, nella sottostante [analisi] (https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing) che porta a un piccolo pool di connessioni dimensione: _ * presupponendo che i vincoli hardware siano l'unica causa della latenza basata sul carico sul server database_. Anche se questo può essere vero in alcune applicazioni, qualsiasi cosa che incorre in una quantità significativa di conflitto di blocco, specialmente dalle transazioni, potrebbe richiedere molte più connessioni per evitare il deadlock indotto dalla saturazione del pool. Almeno, questo è quello che penso. –

+2

Ho deciso di [chiedere un'autorità superiore] (https://github.com/brettwooldridge/HikariCP/issues/304) sul problema del deadlock. –

+3

Aggiunto un ticket qui per la revisione di slick reattivo per quanto riguarda i dubbi espressi: https://github.com/slick/slick/issues/1131 Esempi concreti per la contesa di blocco menzionata e molte connessioni di vecchia data (in qualsiasi numero che sarebbe un problema per l'utilizzo delle risorse del thread) sarebbe molto utile qui. – cvogt