database scala asynchronous slick reactive-programming

database - ¿Slick 3.0 es reactivo/asíncrono en el nivel del controlador de la base de datos? ¿Para qué bases de datos?



scala asynchronous (1)

Históricamente, Slick se ha basado en los controladores JDBC, que bloquean internamente la espera de E / S de socket en respuesta a las consultas. Cada llamada de base de datos pendiente requiere un hilo para bloquear en un socket; por lo tanto, no es realmente reactivo en el mismo sentido que ReactiveMongo, postgresql-async y mysql-async, que son asíncronos en su totalidad.

¿Ha cambiado algo en este sentido en Slick 3.0? ¿O estoy confundido acerca de esto?


No es asincrónico hasta el nivel del controlador, pero eso no es un problema. Se supone que el número de subprocesos de bloqueo que esperan conexiones de bases de datos es pequeño en una buena configuración. Por lo tanto, no consumen muchos recursos. Slick los gestiona y programa el bloqueo de subprocesos en su propio grupo de subprocesos, por lo que no están en el camino de los cálculos. Un controlador asíncrono "nativo" probablemente agregaría una aceleración menor, pero no una mayor. Slick puede apoyar eso en algún momento en el futuro. El mayor beneficio de "reactivo" proviene de lo que Slick ya implementa en 3.0. Una explicación más extensa se puede encontrar aquí: https://www.parleys.com/tutorial/reactive-slick-database-programming