关于响应式数据库连接 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
garyxi24
V2EX    数据库

关于响应式数据库连接

  •  
  •   garyxi24 2022-08-18 16:23:19 +08:00 1563 次点击
    这是一个创建于 1154 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,有人在研究或者使用吗,我知道像 vertx 、quarkus 、spring 这些框架都已经对其做了集成,但是感觉相关文档很少,不了解一些内部的实现情况和原理,比如如何保证事务,数据的一致性,以及对比传统的连接方式性能提升情况。有大佬帮忙解答一下吗?
    第 1 条附言    2022-08-26 11:26:43 +08:00
    谢谢大家的回复,其实我主要眼馋异步连接的性能提升,前一段时间尝试了 quarkus ,用了 async pg client ,发现跟想象中的还有很大差距,一方面是要习惯响应式编程的方式,quarkus 用的是 Smallrye Mutiny 在 vertx 封装的一套,常用的流操作都实现了,但跟同步式操作不同,主要拿不到结果就让我很难受;另一方面就是事务,之前可能没表述清楚,我所关注的事务是框架的实现形式,尝试了 quarkus 之后发现异步连接的事务处理非常麻烦,基本都要手动处理,还有事务传播机制,需要手动使用类似于 ThreadLocal 的东西传播上下文。所以综上,我选择放弃,至少目前的业务代码是肯定没法用的,当然看起来搞中间件网关这种还是不错的。
    3 条回复    2022-08-19 11:24:08 +08:00
    lmshl
        1
    lmshl  
       2022-08-18 16:34:00 +08:00
    没用过 async-db ,r2dbc 等方案,只用过 hikaricp 链接池 + 异步的响应式。我说下我的经验:

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

    一致性:和传统并无二致

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

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

    也就是说当你客户端发送一个查询请求,链接不用一直挂着去等待响应,可以去处理其他事物
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3372 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:43 PVG12:43 LAX 21:43 JFK 00:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86