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