连接数据库的不只有JDBC ,反应式驱动规范ADBA 和R2DBC 了解一下

连接数据库的不只有JDBC ,反应式驱动规范ADBA 和R2DBC 了解一下

1. 前言

响应式编程已经在 Java 编程领域出现很长一段时间了。具有高性能,事件驱动,充分利用计算资源,更加优雅的异步编程体验,同时它也提供了背压机制来防止系统过载。很长一段时间 Java 的响应式只能同 MongoDBRedis 等这些非关系型数据库进行交互。而目前我们大部分的数据还是存放在关系型数据库中,大部分情况下 Java 使用 JDBC 来操作关系型数据库,而 JDBC 是阻塞的、同步的。所以迫切需要一种支持响应式的数据库驱动协议。目前市面上有两种响应式数据库驱动协议,我们来了解一下它们。

2. ADBA

ADBA [1]Oracle 主导的 Java 异步数据库访问的标准 API 。它的目的性是集成于未来 Java 的标准发行版中,目前发展比较慢,目前只提供 OpenJDK沙盒特性 [2]开发者研究之用。它不打算作为 JDBC 的扩展或替代,而是一个完全独立的 API ,该 API 提供对 JDBC 相同数据库的完全无阻塞访问。

3. R2DBC

Spring官方在 Spring 5 发布了响应式 Web 框架 Spring WebFlux 之后急需能够满足异步响应的数据库交互 API 。 由于缺乏标准和驱动, Pivotal(Spring 官方) 团队开始研究反应式关系型数据库连接( Reactive Relational Database Connectivity ),并提出了 R2DBC 规范 API 以评估可行性并讨论数据库厂商是否有兴趣支持反应式的异步非阻塞驱动程序。最开始只有 PostgreSQLH2MSSQL 三家,现在 MySQL 也加入了进来。 R2DBC 最新版本是 0.8.1.RELEASE 。除了驱动实现外还提供了 **R2DBC** 连接池 [3] R2DBC 代理 [4] 。除此之外还支持原生应用。

3.1 可用的 R2DBC 驱动实现

目前可用的驱动有:

  • cloud-spanner-r2dbc [5] :用于 Google Cloud Spanner 的驱动程序

  • jasync-sql [6]JavaKotlinR2DBC 包装器,用 Kotlin 编写的 MySQLPostgreSQL 异步数据库驱动程序。

  • r2dbc-h2 [7] :为 H2 实现的原生驱动程序,以方便作为测试数据库。

  • r2dbc-postgres [8] :为 PostgreSQL 实现的原生驱动程序。

  • r2dbc-mssql [9] :为 Microsoft SQL Server 实现的原生驱动程序。

  • r2dbc-mysql [10] :为 MySQL 实现的原生驱动程序。

4. 总结

我们需要明确一点,无论 ADBA 还是 R2DBC 都不是为了取代 JDBC 。只是为了补充在响应式编程下的空白。至于反应式的未来如何,目前还不是很明朗,但是发展很迅速,我还是很看好的。就目前来说 ADBA 具有官方加持的优势,而 R2DBC 具有活跃的社区优势,究竟谁是业界规则的领导者,相信很快就会揭晓。后续我也会实验性的来尝试使用 R2DBC 并分享其中的一些经验,多多关注

原文 

https://juejin.im/post/5e702cad51882549507b2514

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 连接数据库的不只有JDBC ,反应式驱动规范ADBA 和R2DBC 了解一下

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址