【问题标题】:Using Asynchronous DB call with Future and mysql-async使用带有 Future 和 mysql-async 的异步 DB 调用
【发布时间】:2017-03-20 14:11:28
【问题描述】:

据我所知,slick 3.1 目前基于 JDBC 本机驱动程序构建,该驱动程序在驱动程序级别阻止 IO 操作。我可以使用带有普通 Sql 和 playframework 的 mysql-async 驱动程序调用吗? 我是否需要使用 ExecutionContext 在每个 DB 调用上打开新线程?

【问题讨论】:

    标签: asynchronous playframework reactive-programming slick


    【解决方案1】:

    你说得对,slick 是建立在标准(阻塞)jdbc 驱动程序之上的 (见here)。但是,对于大多数工作负载来说应该没问题。

    我可以使用带有普通 Sql 和 playframework 的 mysql-async 驱动程序调用吗?

    您具体指的是哪个 java 驱动程序? 我熟悉Mauricio's async driver,它应该是完全异步的,并且如果您正在寻找 slick 的替代品,它会在其上构建一些不错的库。 (例如quill

    我是否需要使用 future 在每个 DB 调用上打开新线程 执行上下文?

    如果所有线程都阻塞,这将无济于事,新的 http 请求可能会由于阻塞 DB 查询而被饿死。更好的方法是为阻塞任务创建一个专用线程池。请参阅play's thread pool configuration 以更好地理解这一点。

    【讨论】:

    • 关于 mysql-async 驱动程序或 postgresql-async 驱动程序。它们是用于异步/非阻塞回调 MySQL 数据库和 Postgres DB link 的驱动程序。是的,我正在尝试替换 Slick,并且还希望对 DB 调用进行异步调用。我希望应用程序完全响应非阻塞 DB 调用。 Reagring ExecutionContext:是的,我还要求为数据库调用提供不同的线程池。
    • 我认为 Quill 将是完全基于异步驱动程序构建的 scala-play rest 应用程序的一个不错的选择。那么它对生产用途有好处吗?我的意思是它是否足以将它用于生产用途任何建议?
    • 哪种方法更适合最大性能和成熟度。 !带有阻塞 jdbc 调用的 Slick 3 或带有异步调用的 Quill。如果性能提升不大,那么我可以使用 Slick 3.x 版本,因为它是数据库交互的推荐版本。
    • 我认为 quill 已经为生产做好了准备,至少我们在生产中使用它:-)
    • 在检查 slick 与 quill 时,我不仅会比较异步特性,还会比较整个使用模式。看到这个比较github.com/getquill/quill/blob/master/SLICK.md(可能有点偏见,因为它是由 quill 写的,但我发现它很有用)
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2020-03-17
    • 2017-01-25
    • 2013-09-12
    • 2018-02-15
    • 1970-01-01
    • 2020-03-09
    • 2020-06-07
    相关资源
    最近更新 更多