1. 前言
響應(yīng)式編程已經(jīng)在Java編程領(lǐng)域出現(xiàn)很長一段時(shí)間了。具有高性能,事件驅(qū)動(dòng),充分利用計(jì)算資源,更加優(yōu)雅的異步編程體驗(yàn),同時(shí)它也提供了背壓機(jī)制來防止系統(tǒng)過載。很長一段時(shí)間Java的響應(yīng)式只能同MongoDB、Redis等這些非關(guān)系型數(shù)據(jù)庫進(jìn)行交互。而目前我們大部分的數(shù)據(jù)還是存放在關(guān)系型數(shù)據(jù)庫中,大部分情況下Java使用JDBC來操作關(guān)系型數(shù)據(jù)庫,而JDBC是阻塞的、同步的。所以迫切需要一種支持響應(yīng)式的數(shù)據(jù)庫驅(qū)動(dòng)協(xié)議。目前市面上有兩種響應(yīng)式數(shù)據(jù)庫驅(qū)動(dòng)協(xié)議,我們來了解一下它們。
2. ADBA
ADBA[1]是Oracle主導(dǎo)的Java異步數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API。它的目的性是集成于未來Java的標(biāo)準(zhǔn)發(fā)行版中,目前發(fā)展比較慢,目前只提供OpenJDK的沙盒特性供開發(fā)者研究之用。它不打算作為JDBC的擴(kuò)展或替代,而是一個(gè)完全獨(dú)立的API,該API提供對(duì)JDBC相同數(shù)據(jù)庫的完全無阻塞訪問。
3. R2DBC
Spring官方在Spring 5發(fā)布了響應(yīng)式Web框架Spring WebFlux之后急需能夠滿足異步響應(yīng)的數(shù)據(jù)庫交互API。 由于缺乏標(biāo)準(zhǔn)和驅(qū)動(dòng),Pivotal(Spring 官方)團(tuán)隊(duì)開始研究反應(yīng)式關(guān)系型數(shù)據(jù)庫連接(Reactive Relational Database Connectivity),并提出了R2DBC規(guī)范API以評(píng)估可行性并討論數(shù)據(jù)庫廠商是否有興趣支持反應(yīng)式的異步非阻塞驅(qū)動(dòng)程序。最開始只有PostgreSQL、H2、MSSQL三家,現(xiàn)在MySQL也加入了進(jìn)來。R2DBC最新版本是0.8.1.RELEASE。除了驅(qū)動(dòng)實(shí)現(xiàn)外還提供了R2DBC 連接池和R2DBC 代理。除此之外還支持云原生應(yīng)用。
3.1 可用的 R2DBC 驅(qū)動(dòng)實(shí)現(xiàn)
目前可用的驅(qū)動(dòng)有:
cloud-spanner-r2dbc:用于Google Cloud Spanner的驅(qū)動(dòng)程序
jasync-sql:Java和Kotlin的R2DBC包裝器,用Kotlin編寫的MySQL和PostgreSQL異步數(shù)據(jù)庫驅(qū)動(dòng)程序。
r2dbc-h2:為H2實(shí)現(xiàn)的原生驅(qū)動(dòng)程序,以方便作為測(cè)試數(shù)據(jù)庫。
r2dbc-postgres:為PostgreSQL實(shí)現(xiàn)的原生驅(qū)動(dòng)程序。
r2dbc-mssql:為Microsoft SQL Server實(shí)現(xiàn)的原生驅(qū)動(dòng)程序。
r2dbc-mysql:為MySQL實(shí)現(xiàn)的原生驅(qū)動(dòng)程序。
4. 總結(jié)
我們需要明確一點(diǎn),無論ADBA還是R2DBC都不是為了取代JDBC。只是為了補(bǔ)充在響應(yīng)式編程下的空白。至于反應(yīng)式的未來如何,目前還不是很明朗,但是發(fā)展很迅速,我還是很看好的。就目前來說ADBA具有官方加持的優(yōu)勢(shì),而R2DBC具有活躍的社區(qū)優(yōu)勢(shì),究竟誰是業(yè)界規(guī)則的領(lǐng)導(dǎo)者,相信很快就會(huì)揭曉。后續(xù)我也會(huì)實(shí)驗(yàn)性的來嘗試使用R2DBC并分享其中的一些經(jīng)驗(yàn),多多關(guān)注。
-
JAVA
+關(guān)注
關(guān)注
19文章
2971瀏覽量
104854 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3823瀏覽量
64506
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論