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 以评估可行性并讨论数据库厂商是否有兴趣支持反应式的异步非阻塞驱动程序。最开始只有PostgreSQL 、H2MSSQL 三家,现在 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 并分享其中的一些经验,多多关注


©著作权归作者所有:来自51CTO博客作者mob604756f80175的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 一个SQL让导致整个数据库都整挂了!
  2. 一文看懂分布式数据库原理和 PostgreSQL 分布式架构
  3. AOM:响应可调的动态力致变色器及其在交互式传感器中的应用
  4. AOM:碲纳米线——一种非线性光学响应超强烈且各向异性的一维范德
  5. 【PostgreSQL架构】PostgreSQL的最佳群集高可用性方案
  6. 「PostgreSQL高级特性」PostgreSQL 数据库的近似算法
  7. 「数据库架构」三分钟搞懂事务隔离级别和脏读
  8. 【PostgreSQL架构】为什么关系型数据库是分布式数据库的未来
  9. 【数据库架构】Apache Couchdb 最终一致性

随机推荐

  1. 2011.09.20(4)——— android SpannableStr
  2. Android中获取IMEI码
  3. android 返回到首页
  4. AndroidManifest文件中android属性
  5. Unity调用安卓
  6. Android(安卓)获取经纬度
  7. Android中hardware源码(android-5.0.2)
  8. Android View滑动
  9. android开启闪光灯
  10. 安卓课程二十二 ImageView的基本用法