1. 前言
响应式编程已经在Java编程领域出现很长一段时间了。具有高性能,事件驱动,充分利用计算资源,更加优雅的异步编程体验,同时它也提供了背压机制来防止系统过载。很长一段时间Java的响应式只能同MongoDB、Redis等这些非关系型数据库进行交互。而目前我们大部分的数据还是存放在关系型数据库中,大部分情况下Java使用JDBC来操作关系型数据库,而JDBC是阻塞的、同步的。所以迫切需要一种支持响应式的数据库驱动协议。目前市面上有两种响应式数据库驱动协议,我们来了解一下它们。
2. ADBA
ADBA[1]是Oracle主导的Java异步数据库访问的标准API。它的目的性是集成于未来Java的标准发行版中,目前发展比较慢,目前只提供OpenJDK的沙盒特性供开发者研究之用。它不打算作为JDBC的扩展或替代,而是一个完全独立的API,该API提供对JDBC相同数据库的完全无阻塞访问。
3. R2DBC
Spring官方在Spring 5发布了响应式Web框架Spring WebFlux之后急需能够满足异步响应的数据库交互API。 由于缺乏标准和驱动,Pivotal(Spring 官方)团队开始研究反应式关系型数据库连接(Reactive Relational Database Connectivity),并提出了R2DBC规范API以评估可行性并讨论数据库厂商是否有兴趣支持反应式的异步非阻塞驱动程序。最开始只有PostgreSQL、H2、MSSQL三家,现在MySQL也加入了进来。R2DBC最新版本是0.8.1.RELEASE。除了驱动实现外还提供了R2DBC 连接池和R2DBC 代理。除此之外还支持云原生应用。
3.1 可用的 R2DBC 驱动实现
目前可用的驱动有:
cloud-spanner-r2dbc:用于Google Cloud Spanner的驱动程序
jasync-sql:Java和Kotlin的R2DBC包装器,用Kotlin编写的MySQL和PostgreSQL异步数据库驱动程序。
r2dbc-h2:为H2实现的原生驱动程序,以方便作为测试数据库。
r2dbc-postgres:为PostgreSQL实现的原生驱动程序。
r2dbc-mssql:为Microsoft SQL Server实现的原生驱动程序。
r2dbc-mysql:为MySQL实现的原生驱动程序。
4. 总结
我们需要明确一点,无论ADBA还是R2DBC都不是为了取代JDBC。只是为了补充在响应式编程下的空白。至于反应式的未来如何,目前还不是很明朗,但是发展很迅速,我还是很看好的。就目前来说ADBA具有官方加持的优势,而R2DBC具有活跃的社区优势,究竟谁是业界规则的领导者,相信很快就会揭晓。后续我也会实验性的来尝试使用R2DBC并分享其中的一些经验,多多关注。
-
JAVA
+关注
关注
19文章
2943浏览量
104096 -
数据库
+关注
关注
7文章
3712浏览量
64023
发布评论请先 登录
相关推荐
评论