1
lmshl 2022-08-18 16:34:00 +08:00
没用过 async-db ,r2dbc 等方案,只用过 hikaricp 链接池 + 异步的响应式。我说下我的经验:
事务:因为背后还是 jdbc ,所以事务必定发生在同一个 jdbc connection 当中,业务编码的时候会把整个异步代码块打上一个 transaction 标记作为边界,表示在边界内的 sql 都处于同一个事务中。 一致性:和传统并无二致 性能提升:业务代码部分只需要一个 n = cores 的线程池作为纤程的运行时就够了,所以几乎没有上下文切换。jdbc 部分都交给 hikaricp 管理,iowait 的线程对操作系统没什么消耗,可能会在跨线程(核心)数据交换上会浪费一点资源,但和传统阻塞式比可以忽略不计了。所以首先要满足的条件是你自己的应用也需要遵守响应式开发,不然的话可以说没有性能提升。 |
2
kanel 2022-08-18 17:15:41 +08:00
可以了解一下 Spring 的 R2DBC 規範文件。類似它們只是一個反應式的 API 連接程序和數據庫,至於內部原理不由這些框架實現,這要去查各個數據庫的文件了。我也是最近才接觸這一塊,如果我的信息有何不妥,還望大家多多指導。
|
3
yizmaoaa 2022-08-19 11:24:08 +08:00
保证事物、数据的一致性。都是数据库本身的功能,和你使用的某种 Client 没有关系。
所有 Client 都是根据数据库官方的协议去实现,如果数据库本身支持异步,那么 Client 或许会针对这个数据库做一通到底。实际上大部分数据库也不支持异步,CLient 这边的实现只是针对 Client 部分他是异步的。 也就是说当你客户端发送一个查询请求,链接不用一直挂着去等待响应,可以去处理其他事物 |