使用 R2DBC 的 Micronaut Data 是比经典的“每个连接一个线程”模型 Micronaut Data 更具可扩展性的方法 JDBC

Is Micronaut Data with R2DBC a more scalable approach than classical “one thread per connection” model Micronaut Data JDBC

根据micronaut-data reactive guide

”... 在反应式执行的情况下,如果支持实现是阻塞的,Micronaut Data 将使用已配置的 I/O 线程池来安排不同线程上的查询执行。

如果支持实现本机支持驱动程序级别的反应类型,则不使用 I/O 线程池,而是假定驱动程序将以非阻塞方式处理查询...”

我的直接问题:访问关系数据库(例如 PostGres R2DBC driver)抛出 R2DBC Micronaut 数据是否依赖于 R2DBC 驱动程序以非阻塞方式处理并且更具可扩展性?

假设我的微服务公开了一个基于 ReactiveX 的 Reactive 端点并且必须访问阻塞数据源抛出 Micronaut Data JDBC(例如,生产版本中还没有 Oracle R2DBC),从上面可以清楚地看出它在访问数据时“将使用配置 I/O 线程池”。我是否完全失去了反应式端点的好处?

这是我使用 Micronaut 的第一个项目,我很少有使用 Reactive 方法的项目。我远不是 Reactive 最佳实践方面的专家,但我记得读过几篇博客:如果你有阻塞源代码,请避免使用反应式堆栈。我还记得读过,将非阻塞与阻塞设计混合使用可能会产生更糟糕的结果,这主要是因为 Eventloop(例如 Netty)的设计方式。由于我将 Micronaut 与 ReactiveX 和关系数据库一起使用,某些情况下使用 R2DBC,而其他情况下使用 JDBC,我将不胜感激任何对我的疑问的评论。

您并没有完全失去优势,因为如果您有未阻塞的 HTTP 请求,您可以使用您的 JDBC 逻辑组合这些操作。

但是,如果您想要使用 R2DBC 实现真正的非阻塞,请参阅 https://github.com/micronaut-projects/micronaut-r2dbc/