オラクル社は先日、読み取り/書き込み分割機能をサポートをしたMySQL 8.2のリリースを発表した。この待望の機能は最新のイノベーションリリースで導入され、データベースの性能と拡張性の最適化に役立つ。
読み取り/書き込み分割機能により、アプリケーションはすべての書き込みトラフィックを読み書き(プライマリまたはソース)インスタンスに、すべての読み取りトラフィックを読み取り専用インスタンス、InnoDBクラスタのセカンダリであるインスタンス、レプリカクラスタのプライマリまたはセカンダリインスタンスに透過的に向けることができる。MySQLコミュニティマネージャーのFrederic Descamps氏はこう説明している。
規模が大きくなると読み込みをレプリカ間で分散させますが、これはアプリケーションで何らかの方法で管理する必要があります。ポイントはどこかに読み込み、別のどこかで書き込むかです。MySQL 8.2では、MySQL Routerが読み取り/書き込みを識別し、InnoDBクラスタの場合はプライマリインスタンスに、書き込みの場合は非同期レプリケーションソースに、読み取りの場合はセカンダリインスタンスまたはレプリカにルーティングできるようになります。
読み取り/書き込み分割を使用することで、各クライアントセッションは1つの読み取り専用宛先と1つの書き込み専用宛先と通信できる。ルータは各クエリを読み取りか書き込みかに分類し、適切なバックエンドに誘導する。Percona社の創設者でオープンソースの提唱者であるPeter Zaitsev氏はこのようにコメントしている。
これはMySQL 8.2の素晴らしい機能です!ですがこの場合、読み取りに対してどの程度一貫性レベルが保証されるのか明確ではありません。古いデータでも読み込めるのでしょうか?もし可能であれば、どの程度古くても良いのでしょうか?
読み取り/書き込みポート(デフォルトでは6450)を使用してMySQLに接続すると、接続は読み取りを行うとレプリカ(セカンダリ)に到達するが、トランザクションを開始するとレプリケーションソース(プライマリ)に到達する。
出典:MySQL ドキュメント
この新機能はおおむねコミュニティから高く評価されているが、PingCAP社のソフトウェアアーキテクトであるSunny Bains氏は次のように指摘している。
MySQLグループレプリケーションはタイムライン一貫性を提供していますが、ルータがレプリカ全体の一貫性を追跡できない限り、ルータはそれ以上のことはできません。おそらく実現可能だと思いますが、ポーリングによるラウンドトリップか、クラスタからルータへの何らかのイベント通知が必要になるでしょう。
Descamps氏は次のように結論付けている。
これは、アプリケーションに変更を加えることなく、データベースの性能と拡張性を最適化するための貴重な機能です。(…)この機能は、全体的なユーザーエクスペリエンスを向上させるだけでなく、データベースの管理と展開を簡素化します。
今年初めに、オラクル社はMySQLのバージョン管理モデルを変更し、イノベーションリリースとLTSリリースを導入した。MySQL 8.2.0は最新の四半期イノベーションリリースで、バグ修正、セキュリティパッチ、新機能が含まれている。改善点として、セット操作のハッシュテーブル最適化、MySQL Enterprise Firewallの機能強化、スマートカード、セキュリティキー、バイオメトリックリーダーなどのデバイスをサポートする新しいWebAuthn認証メソッドなどが挙げられる。
MySQL 8.2.0は一般公開されており、オラクル社のウェブサイトからダウンロード可能だ。