除了JDBC ,反應式數據庫驅動規範ADBA 和R2DBC 瞭解一下

1. 前言

響應式編程已經在 Java 編程領域出現很長一段時間了。具備高性能,事件驅動,充分利用計算資源,更加優雅的異步編程體驗,同時它也提供了背壓機制來防止系統過載。很長一段時間 Java 的響應式只能同 MongoDBRedis 等這些非關係型數據庫進行交互。而目前咱們大部分的數據仍是存放在關係型數據庫中,大部分狀況下 Java 使用 JDBC 來操做關係型數據庫,而 JDBC 是阻塞的、同步的。因此迫切須要一種支持響應式的數據庫驅動協議。目前市面上有兩種響應式數據庫驅動協議,咱們來了解一下它們。java

2. ADBA

ADBAOracle 主導的 Java 異步數據庫訪問的標準 API 。它的目的性是集成於將來 Java 的標準發行版中,目前發展比較慢,目前只提供OpenJDK沙盒特性供開發者研究之用。它不打算做爲 JDBC 的擴展或替代,而是一個徹底獨立的 API,該 API 提供對 JDBC 相同數據庫的徹底無阻塞訪問。mysql

3. R2DBC

Spring 官方在 Spring 5 發佈了響應式 Web 框架 Spring WebFlux 以後急需可以知足異步響應的數據庫交互 API 。 因爲缺少標準和驅動,Pivotal(Spring 官方) 團隊開始研究反應式關係型數據庫鏈接(Reactive Relational Database Connectivity),並提出了 R2DBC 規範 API 以評估可行性並討論數據庫廠商是否有興趣支持反應式的異步非阻塞驅動程序。最開始只有 PostgreSQLH2MSSQL 三家,如今 MySQL 也加入了進來。R2DBC 最新版本是0.8.1.RELEASE。除了驅動實現外還提供了 R2DBC 鏈接池 R2DBC 代理。除此以外還支持雲原生應用。git

3.1 可用的 R2DBC 驅動實現

目前可用的驅動有:github

  • cloud-spanner-r2dbc:用於Google Cloud Spanner的驅動程序
  • jasync-sqlJavaKotlinR2DBC包裝器,用Kotlin編寫的MySQLPostgreSQL異步數據庫驅動程序。
  • r2dbc-h2:爲H2實現的原生驅動程序,以方便做爲測試數據庫。
  • r2dbc-postgres:爲PostgreSQL實現的原生驅動程序。
  • r2dbc-mssql:爲Microsoft SQL Server實現的原生驅動程序。
  • r2dbc-mysql:爲MySQL實現的原生驅動程序。

4. 總結

咱們須要明確一點,不管 ADBA 仍是 R2DBC 都不是爲了取代 JDBC 。只是爲了補充在響應式編程下的空白。至於反應式的將來如何,目前還不是很明朗,可是發展很迅速,我仍是很看好的。就目前來講 ADBA 具備官方加持的優點,而 R2DBC 具備活躍的社區優點,究竟誰是業界規則的領導者,相信很快就會揭曉。後續我也會實驗性的來嘗試使用 R2DBC 並分享其中的一些經驗,多多關注。sql

相關文章
相關標籤/搜索