关于响应式数据库连接

2022-08-18 16:23:19 +08:00
 garyxi24
如题,有人在研究或者使用吗,我知道像 vertx 、quarkus 、spring 这些框架都已经对其做了集成,但是感觉相关文档很少,不了解一些内部的实现情况和原理,比如如何保证事务,数据的一致性,以及对比传统的连接方式性能提升情况。有大佬帮忙解答一下吗?
1266 次点击
所在节点    数据库
3 条回复
lmshl
2022-08-18 16:34:00 +08:00
没用过 async-db ,r2dbc 等方案,只用过 hikaricp 链接池 + 异步的响应式。我说下我的经验:

事务:因为背后还是 jdbc ,所以事务必定发生在同一个 jdbc connection 当中,业务编码的时候会把整个异步代码块打上一个 transaction 标记作为边界,表示在边界内的 sql 都处于同一个事务中。

一致性:和传统并无二致

性能提升:业务代码部分只需要一个 n = cores 的线程池作为纤程的运行时就够了,所以几乎没有上下文切换。jdbc 部分都交给 hikaricp 管理,iowait 的线程对操作系统没什么消耗,可能会在跨线程(核心)数据交换上会浪费一点资源,但和传统阻塞式比可以忽略不计了。所以首先要满足的条件是你自己的应用也需要遵守响应式开发,不然的话可以说没有性能提升。
kanel
2022-08-18 17:15:41 +08:00
可以了解一下 Spring 的 R2DBC 規範文件。類似它們只是一個反應式的 API 連接程序和數據庫,至於內部原理不由這些框架實現,這要去查各個數據庫的文件了。我也是最近才接觸這一塊,如果我的信息有何不妥,還望大家多多指導。
yizmaoaa
2022-08-19 11:24:08 +08:00
保证事物、数据的一致性。都是数据库本身的功能,和你使用的某种 Client 没有关系。

所有 Client 都是根据数据库官方的协议去实现,如果数据库本身支持异步,那么 Client 或许会针对这个数据库做一通到底。实际上大部分数据库也不支持异步,CLient 这边的实现只是针对 Client 部分他是异步的。

也就是说当你客户端发送一个查询请求,链接不用一直挂着去等待响应,可以去处理其他事物

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX