2022.06.28

MariaDB

MariaDB Connector/R2DBC 1.1.2 GA版(リリース日:2022年6月27日)

R2DBC 0.9.1仕様のサポート

新しいR2DBC 0.9.1仕様をサポートするために、次の実装が追加または変更されました。

  • 改善されたバインドパラメータ宣言のサポート
  • 新しいConnection.beginTransaction(TransactionDefinition)
  • 新しいNoSuchOptionException
  • RowMetadataが変更されました
  • 新しいステートメントのタイムアウト
  • 仕様でドライバーを検証するためのSPIテストキットを実装
  • 仕様に準拠した例外動作
  • R2DBC例外へのSQLプロパティの追加
  • スペックバッチの明確化後、後続のバッチは失敗するはずです

JPMSモジュール性の完全な実装

MariaDB Connector/R2DBCは、Java9以降を使用する場合にJPMSモジュール性を実装します。この変更により、内部パッケージを非表示にしてリフレクションから保護することにより、セキュリティが向上します。この変更により、起動時に欠落しているモジュールをより迅速に検出できるようになり、スタンドアロンアプリケーションのパッケージが軽量化されるため、パフォーマンスが向上します。

フェイルオーバーと負荷分散

フェイルオーバーは、プライマリデータベースサーバーへの接続が失敗し、コネクタが別のデータベースサーバーへの接続を開いた時に発生します。例えば、サーバーAには現在の接続があります。障害(サーバーのクラッシュやネットワークのダウンなど)が発生すると、接続は別のサーバーであるサーバーBに切り替わります。

負荷分散は、負荷を複数のサーバーに分散することを可能にします。接続を初期化する時、または接続に失敗した後、コネクタはホストへの接続を試みます。接続は、有効なホストの中からランダムに選択されます。接続が確立された後、接続が閉じられる(または失敗する)まで、全てのステートメントがそのデータベースサーバーで実行されます。

例えば、60接続のプールを作成する場合、それぞれがランダムなホストを使用します。マスターホストが3つある場合、プールには各ホストへの接続が約20あります。

R2DBC仕様はRFC 3986に準拠しており、次の形式の接続文字列で複数のホストを許可します。
authority = [ userinfo "@" ] host [ ":" port ] [ "," host [ ":" port ] ]
例:
ConnectionFactory factory = ConnectionFactories.get("r2dbc:mariadb:sequential://user:password@host:3306,ho

<フェイルオーバーの動作>
フェイルオーバーパラメータが設定されます(つまり、接続文字列の前にr2dbc:mariadb:[sequential|loadbalancing]://...を付けるか、HAモードビルダーを使用します)。

障害が発生した場合、次のアクションが発生します。

  • 接続の回復(接続を透過的に再確立する)
  • 可能であれば、コマンド/トランザクションを再実行する
  • フェイルオーバー中、失敗したホストアドレスは60秒間ブロックリスト(JVMによって共有)に配置されます。MariaDB Connector/R2DBCは最初にブロックされたホストに接続することを常に回避しますが、全てのホストがブロックリストに含まれている場合、60秒前にブロックされたホストへの接続を再試行できます。

<再実行>
ドライバは、ブロックされていないホストへの再接続を試みます。再接続が失敗した場合、SQLState 08XXXで例外がスローされます。プールを使用している場合、この接続は破棄されます。

再接続が成功すると、様々なケースが発生します。

コマンドが問題なく再生され得ることをドライバが識別した場合(例えば、connection.validate(ValidationDepth.REMOTE))、ドライバはエラーをスローせずにコマンドを透過的に実行します。

ドライバーは全てのケースを透過的に処理できるわけではありません。例えば、トランザクションなしでINSERTコマンドを実行する時にフェイルオーバーが発生した場合、ドライバは、コマンドがサーバーで受信されて実行されたことを知ることができません。これらのタイプのインスタンスでは、SQLState 25S03でR2dbcTransientExceptionがスローされます。

<transactionReplayオプション>
ほとんどのクエリはトランザクションで発生します(ORMでは、例えば、自動コミットの使用は許可されていません)。

MariaDB Connector/R2DBCは、コマンドをトランザクションに保存します。トランザクション中にフェイルオーバーが発生すると、コネクタはトランザクションを自動的に再接続して再生できるため、フェイルオーバーは完全に透過的になります。

いくつかの制限があります。ドライバは、内部制限に達するまで、トランザクション内のコマンドをバッファリングします。巨大なコマンドは、現在のトランザクションのトランザクションバッファリングを一時的に無効にする場合があります。コマンドはべき等である必要があります(クエリは「再生可能」になり得ます)。

最適化されたバックプレッシャー処理

MariaDB Connector/R2DBC 1.1.2は、内部でバックプレッシャーを保証し、TCPバックプレッシャーに依存しません。

認証プラグインオプションの制限

新しいオプション restrictedAuthを使用すると、ユーザーの認証時に使用できる認証プラグインを制限できます。

例えば、mysql_native_passwordまたはed25519プラグインのみの使用を許可するためには、次のようにします。
r2dbc:mariadb://root:password@localhost:3306/db?restrictedAuth=mysql_native_password,ed25519

デフォルトで、提供されるプラグインは、mysql_native_password、client_ed25519、auth_gssapi_client、caching_sha2_password、dialog、およびmysql_clear_passwordです。

メタデータのスキップ機能のサポート

MariaDB 10.6サーバーでは、メタデータが変更されていない場合、メタデータの送信をスキップできます。これは、オプション useServerPrepStmtsを使用する時に結果セットを返すSQLコマンドに関係します。これで、サーバーはメタデータが変更された場合にのみメタデータを送信します(例えば、DDLの変更)。

これにより、不要な情報がネットワーク上を通過し、解析が必要になるのを防ぎます。

その他の変更

  • バッチキャンセルのサポート
  • loopResources接続オプションを介したチャネルの共有を許可します。

MariaDB Connector/R2DBC 1.1.2のリリースノート(MariaDB社ウェブサイト):
https://mariadb.com/docs/release-notes/mariadb-connector-r2dbc/1-1-2/


MariaDBプロダクト・サポート・サービス

MariaDB
MariaDBプロダクト・サポート・サービスは、MariaDBおよびその関連製品をご利用されているお客様へ、必要なソフトウェアや専門的なサポートなどを提供するサービスです。