专栏首页码农小胖哥的码农生涯Java 响应式关系数据库连接了解一下

Java 响应式关系数据库连接了解一下

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 并分享其中的一些经验,多多关注

参考资料

[1]ADBA: https://blogs.oracle.com/java/jdbc-next:-a-new-asynchronous-api-for-connecting-to-a-database

[2]沙盒特性: https://github.com/oracle/oracle-db-examples/tree/master/java/AoJ

[3]R2DBC 连接池 : https://github.com/r2dbc/r2dbc-pool

[4]R2DBC 代理: https://github.com/r2dbc/r2dbc-proxy

[5]cloud-spanner-r2dbc: https://github.com/GoogleCloudPlatform/cloud-spanner-r2dbc

[6]jasync-sql: https://github.com/jasync-sql/jasync-sql

[7]r2dbc-h2: https://github.com/r2dbc/r2dbc-h2

[8]r2dbc-postgres: https://github.com/r2dbc/r2dbc-postgresql

[9]r2dbc-mssql: https://github.com/r2dbc/r2dbc-mssql

[10]r2dbc-mysql: https://github.com/mirromutth/r2dbc-mysql

本文分享自微信公众号 - 码农小胖哥(Felordcn),作者:码农小胖哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让你的代码更加简练,springboot使用JSR303校验

    相信不少人写过这样都代码,对方法入参进行了各种校验。上面还是比较少的校验。如果遇到什么邮箱、手机号更复杂,对格式也需要进行校验。可能洋洋洒洒几百行代码就过去了。...

    码农小胖哥
  • Spring Data R2DBC响应式操作MySQL

    在使用 R2DBC 操作 MySQL 数据库 一文中初步介绍了r2dbc-mysql的使用。但是借助于DatabaseClient操作MySQL,过于初级和底层...

    码农小胖哥
  • MySQL性能优化(二)-- 数据类型,SQL,八种连接

    1. 能够使用最小数据类型存储时,尽量使用最小数据类型存储(前提是要评估字段值的真实数据存储范围)

    码农小胖哥
  • Oracle RAC环境下定位并杀掉最终阻塞的会话-续

    Alfred Zhao
  • 前端妙用PS切图技巧,助你加薪一把

    话说,以前的前端工程师在入行时都当过「切图仔」或「切图女」。曾经,「切图」作为前端一门基础且必备的技能,不知何时开始已经不再提起。很多面试官在招聘时都忽略了PS...

    JowayYoung
  • 灵活运用PS切图技巧

    话说,以前的前端工程师在入行时都当过切图仔或切图女。曾经,切图作为前端一门基础且必备的技能,不知何时开始已经不再提起。很多面试官在招聘时都忽略了PS的存在,其实...

    JowayYoung
  • 品牌|为什么推荐商家做独立版小程序?微购儿独立版框架大揭秘

    一般来说,使用saas产品的小程序都会使用服务商统一的服务器、数据库和CDN等,如果服务商的集群服务器性能够强大,通常不会出现卡顿、使用不流畅的情况。然而一旦服...

    微购儿小程序
  • python线程池(threadpool)

    第二行是调用makeRequests创建了要开启多线程的函数,以及函数相关参数和回调函数,其中回调函数可以不写,default是无,也就是说makeReques...

    周小董
  • HTTP响应状态码:除了404,还有啥?

    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    ITester软件测试小栈
  • SAP Spartacus读取User Address的请求发送和接收源头

    文件:projects\core\src\user\store\effects\user-addresses.effect.ts

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券