レスポンスプログラミングのデータアクセス:ADBAとR 2 DBC

2341 ワード

この世界は変わっていて、技術も変わっています.JDBCはブロッキング性を持っています.JDBCのブロッキング性を軽減するものは何もありません.APIを使用して応答性関係データベースの統合ができるのはいつですか.まずOracleがADBAを発表し,SpringOneプラットフォームワシントン大会で発表したR 2 DBCを用いて,リレーショナル・データベースに対する反応プログラミングを行う.最終的な目標はADBA仕様に影響を与えようとすることである.
R 2 DBCの設計原則は以下の4つの原則に基づいている.
  • は、反応流タイプおよびモード
  • を利用する.
  • データベースにアクセスするプロセス全体が完全にブロックされていない
  • は、駆動SPIを、可用性
  • に関係なく、専用に実装最小の操作セットに圧縮する.
  • 駆動SPIに基づいて複数の「人間化」を実現するAPI
  • R 2 DBCとその生態系は依然として若く,使用例を収集し,反応性関係データベース統合に意味があるかどうかを調べるための実験とフィードバックを要求している.ADBAの目標はJava標準版の実行時に含まれており、現在のスケジュールによると2021年より早いJava 17に登場すると予想されています.現在までに3つのドライバが実装されています.
  • PostgreSQL
  • H2
  • Microsoft SQL Server

  • R 2 DBCにはAPI仕様(r 2 dbc-spi)とクライアント(r 2 dbc-client)が付属しており、SPIをアプリケーションに使用できるようにしています.
    FibersのJDBC
    JDBCおよび他の技術はブロックAPI(主にI/O待ちのため)を暴露したが,Project LoomはFibersの軽量レベル抽象化を導入し,ブロックAPIを非ブロックAPIに変換した.呼び出しがブロックAPIに遭遇すると、スタック切り替えによってこれを実現することができる.したがって、Fiberは、APIをブロックする以前のプロセスの基礎的な試みを引き続き使用する.
    Spring Data R2DBC
    Spring Data R 2 DBCはより大きなSpring Dataシリーズの一部であり、R 2 DBCはReactive Relational Database Connectivityを表し、反応式ドライバを使用してリレーショナル・データベースを統合するインキュベータである.Spring Data R 2 DBCは概念を簡略化することを目的としており、これを実現するために、キャッシュ、遅延ロード、バックライトまたはORMフレームワークの他の多くの機能を提供していない.DatabaseClientはアプリケーションのエントリポイントとして提供され、PostgreSQL、H 2、Microsoft SQL Serverをサポートしている.
    Spring Data R2DBC Examples
    クライアントAPI機能:
  • 汎用SQLを実行し、更新カウント/ロー結果を消費します.
  • は、ページングおよび並べ替えのための汎用SELECTを有する.
  • SELECTは、ページングおよびソートされたマッピングオブジェクトを有する.
  • パラメータバインド付き汎用INSERT.
  • INSERTマッピングオブジェクト.
  • は、ネイティブ構文を使用してパラメータバインドを行います.
  • 結果消費:更新カウント、未マッピング(Map)、エンティティへのマッピング、抽出機能.
  • @Query注釈法を用いた反応式リポジトリ.
  • トランザクション管理.
  • //PostgreSQL
    PostgresqlConnectionFactory connectionFactory = new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
    		.host(…)
    		.database(…)
    		.username(…)
    		.password(…).build());
     
    DatabaseClient client = DatabaseClient.create(connectionFactory);
     
    Mono affectedRows = client.execute()
            .sql("UPDATE person SET name = 'Joe'")
            .fetch().rowsUpdated();
     
    Flux all = client.execute()
            .sql("SELECT id, name FROM person")
            .as(Person.class)
            .fetch().all();

    R 2 DBCは実験場であり,十分に安定して使用できるが,生産環境には絶対に使用できない.