写点什么

SpringOne 大会上发布了一个实验性的反应式关系型数据库连接驱动 R2DBC

2018 年 10 月 09 日

SpringOne 平台华盛顿大会上宣布的 R2DBC 是一个从头开始设计的实验性 API,用于针对关系型数据库进行反应式编程。最终目标是试图影响 ADBA 规范。

在活动中,Cloud Foundry Java Experience 团队负责人 Ben Hale 表示,R2DBC 的设计原则是基于以下四个原则:

  1. 利用反应式流类型和模式;
  2. 访问数据库的整个过程完全非阻塞;
  3. 把驱动 SPI 压缩为专门实现的最小操作集,且不管可用性;
  4. 基于驱动 SPI 实现多个“人性化”的 API。

这是 Hale 幻灯片中的一个例子,一个简单的 Select 语句:

connectionFactory.create()返回一个 Mono 连接。Hale 解释说,这个调用的结果是,“最后,当有人订阅,它会获取一个连接,执行查询,然后为每一行返回值,比如说一个整数,最终生成一个整数 Flux 作为结果,连接的生命周期是在订阅时打开、完成后关闭。”

当然,构建在 SPI 之上的客户端可以对其进行进一步地简化,Hale 给出了这样一个隐藏细节的例子:

下面是使用 SPI 时一个事务中的 Prepared Insert 的例子:

正如 Hale 在演讲中承认的那样,这并不是很好,但同样可以在客户端简化:

有一些替代 R2DBC 的方法。一种方法是将 JDBC 封装在线程池中,但这不会提供回压——无界队列将导致资源耗尽,而有界队列将导致阻塞。另一个是 ADBA。Hale 谨慎地说:

我们很早就与 ADBA 的工作人员进行了接触,但是,关于 CompletableFuture 是否真的是 Reactive 有很多不同的看法,所以我们放弃了,这促成了 R2DBC 的工作。但现在,R2DBC 已经有了经过实际证明的、可以使用的 API,我们再次被邀请参与进来。因此,ADBA 可能会变成这样,在某种程度上,这是像这样一个项目的最终目标。

至于未来计划,Hale 明确表示,R2DBC 是一个实验场,虽然它足够稳定可以使用,但绝对不能用于生产环境。需要注意的是,有很多边缘情况,包括缺少 BLOB/CLOB 处理,并且目前只支持写入一个数据库——PostgreSQL,但是 Hale 希望看到面向其他数据库的实现。他最后说:

Spring 不会生成规范。我们不是规范引导者,也不管理规范。这个项目的全部目标是为了影响 ADBA 规范,这是最好的情况。但毫无疑问,我不是那种会容忍 ADBA 规范不好的人。如果他们不接受我们的建议,如果他们没有看到 Reactive 与 async 的区别,那么,这就是 Spring 团队将要做的事情。

查看英文原文: Experimental Reactive Relational Database Connectivity Driver, R2DBC, Announced at SpringOne

2018 年 10 月 09 日 19:001968
用户头像

发布了 1008 篇内容, 共 313.6 次阅读, 收获喜欢 282 次。

关注

评论

发布
暂无评论
发现更多内容

力扣(LeetCode)刷题,简单题(第16期)

不脱发的程序猿

LeetCode 面试刷题 28天写作 算法面经 3月日更

微信聊天记录里的文件又失效了?试试这个文件同步开源项目吧

HelloGitHub

go 开源项目 文件传输

数据库周刊62丨央企2021年数据库成交公告,国产占90%;流数据库HStreamDB开源;MySQL主从双写导致数据丢失;Oracle 19c升级最佳实践;PG日常工作分享;MySQL MGR运维指南;SQL语法手册……

墨天轮

MySQL 数据库 sql postgre

对于移动开发,人工智能的到来意味着什么?

故胤道长

人工智能 机器学习 ios开发 Android开发

Cobar SQL审计的设计与实现

小楼

Disruptor Skywalking cobar 数据库中间件

Github连夜下架!阿里新产Java全栈面试突击小册太香了

神奇小汤圆

Java 程序员 架构 面试

技术实践丨Prometheus+Grafana搭建HBase监控仪表盘

华为云开发者社区

开源 Grafana Prometheus HBase 开源数据库

【LeetCode】位1的个数Java题解

HQ数字卡

算法 LeetCode 3月日更

EGG公链强势来袭!去中心化社交革命先驱EFTalk

币圈那点事

vivo 应用商店推荐系统探索与实践

vivo互联网技术

架构 推荐系统 服务器

Adobe国际认证的脱颖而出,让摸鱼、秃头小宝贝不再是宿命?

Adobe国际认证

彩色图像的二值化,取经之旅第 6 天

梦想橡皮擦

28天写作 3月日更

【IstioCon 2021】最佳实践:从Spring Cloud 到 Istio

华为云原生团队

开源 Kubernetes 云原生 istio 服务网格

墨天轮精选:数据库问答集萃第一期-2021

墨天轮

MySQL 数据库 sql dba

精选2021互联网大厂Java核心面试题库(金三银四面试必备)

比伯

Java 编程 架构 面试 程序人生

Swagger增强神器:Knife4j!用它轻松实现接口搜索、Word下载、接口过滤...

王磊

Java swagger Knife4j

跟随报文,开启一段奇妙之旅

华为云开发者社区

报文 Windows主机 路由器 Linux主机 路由表

uni-app跨端开发H5、小程序、IOS、Android(六):uni-app事件绑定

黑马腾云

微信小程序 uni-app 前端框架 iOS Developer 3月日更

开发也要防“沉迷”?IDEA插件教程详解

京东科技开发者

Java 开发 IntelliJ IDEA

力扣(LeetCode)刷题,简单题(第15期)

不脱发的程序猿

LeetCode 编程之路 28天写作 算法面经 3月日更

java好还是嵌入式好?做IT开发该如何选择

cdhqyj

Java 编程 发展 开发 嵌入式

基于感染原理判断图的连通性算法

大奎

图算法 子图 连通性

分布式任务 + 消息队列框架 go-queue

Kevin Wan

go 微服务 分布式任务 消息队列

Flink SQL 在网易云音乐的产品化实践

Apache Flink

flink

一文了解数据库资源管理技术

华为云开发者社区

数据库 存储 GaussDB(DWS) 资源管理

基于NA公链(Nirvana)的应用和NAC公链社区共识探究公链的发展未来

区块链第一资讯

字节跳动单点恢复功能及 Regional CheckPoint 优化实践

Apache Flink

flink

书单|互联网企业面试案头书之架构师篇

博文视点Broadview

架构

智慧公安重点人员管控系统开发,情报合成研判平台建设方案

WX13823153201

LiteOS:剖析时间管理模块源代码

华为云开发者社区

时间管理 时间 LiteOS huawei 任务

ThreadLocal 慌不慌?

叫练

JVM ThreadLocal 引用 软引用

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

SpringOne大会上发布了一个实验性的反应式关系型数据库连接驱动R2DBC-InfoQ