博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringOne大会上发布了一个实验性的反应式关系型数据库连接驱动R2DBC
阅读量:6295 次
发布时间:2019-06-22

本文共 1092 字,大约阅读时间需要 3 分钟。

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

\\

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

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

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

\\

ad7038074048559165bbe158c80a94eb.jpg

\\

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

\\

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

\\

163f46e9e743b9f81846b0af538be698.jpg

\\

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

\\

37bff01cda4105abbb14e24474eebe82.jpg

\\

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

\\

4d24f3d73382f79bd713907eed506dec.jpg

\\

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

\\
\

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

\
\\

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

\\
\

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

\
\\

查看英文原文:

转载地址:http://nxvta.baihongyu.com/

你可能感兴趣的文章
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>