今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、Auroraでは味わえないMySQL 8.0のワクワク要素の日。

目次

とある日

Twitterを見ていて、とあるツイートが目に入った。

まさか、同じことを考えていた方がこの世に存在したとは。

このわくわくを世に広めるためにMySQL 8.0のワクワク要素について記述します。

はじめに

ツイート内容について少し補足します。

Auroraを使用したことのある方や、AWSを普段から使っている方、MySQL 8.0MySQL5.6の違いがわかる方は、ワクワク要素について進んでいただいて問題ないと思います。

AuroraでMySQL8.0という点について軽く記述します。

Amazon Aurora

クラウド向けに構築された、MySQL および PostgreSQL と互換性のあるリレーショナルデータベースです。商用データベースと同等のパフォーマンスと可用性を、10 分の 1 のコストで実現します。

ここで、大切なのはAuroraではMySQLと互換性があることです。

AmazonAuroraメジャーバージョン

Auroraバージョンはこの スキームを使用し ます。オーロラメジャーバージョンは、オーロラはと互換性があることをMySQLPostgreSQLのコミュニティメジャーバージョンを指します。次の例は、コミュニティのMySQLバージョンとPostgreSQLバージョン、および対応するAuroraバージョン間のマッピングを示しています。 major.minor.patch

コミュニティメジャーバージョン オーロラメジャーバージョン
MySQL 5.6 Aurora MySQL 1
MySQL 5.7 Aurora MySQL 2

現在Auroraでは、MySQLと互換性がありますが対応しているバージョンがMySQL 5系に限定されます。

ですので、AuroraではMySQL8.0相当の機能は使えないこととなります。

MySQL 8系とMySQL 5系

重要なことなので少しだけ触れておきます。

大まかにまず、8系と5系で分かれます。

その5系でも、5.6と5.7で分かれます。

※筆者がMySQLを使い始めたのが5.6からなのでそれより前には詳しくないので割愛します。

MySQLの歴史が面白い - Qiita

qiita.com

www.slideshare.net

要するにこういうこと

Amazon Auroraだと、MySQL5.6互換の環境しか起動できないためMySQL8.0を触ることができないという話になります。

それを踏まえて、なぜMySQL8.0がわくわくするのかについては下記の本題で述べようと思います。

AWSでMySQL8.0だと困ること

ただの寄り道です。

Auroraで、MySQL 8.0互換性のあるバージョンが使用できない以外にも弊害が存在します。

Amazon RDS Proxy による接続の管理

RDS for MySQL 8.0 では RDS Proxy を使用できません。

Lambdaで開発していたときに、RDSとの接続を考えていたときに見つけた機能です。

でも、使うのに制限があって結局使えなかったです。

ワクワク要素

自分が考えたワクワク要素を大きく2つに絞りました。

その中でもいくつか詳細に分けようと思います。

  • アップデート
    • MyNA(日本MySQLユーザ会)
    • 新機能追加
  • 新機能
    • CTE
    • Window関数
    • GIS

アップデート

言わずもがな一番ワクワクする瞬間ではないでしょか。

最近では、MySQL 8.0.26が来ました。

MySQL :: MySQL 8.0 Release Notes :: Changes in MySQL 8.0.26 (2021-07-20, General Availability)

そこまで、目立った変化は見てないですが、下記のMySQL8.0.26の記事は面白かったです。

更新内容比較

リリースノートの更新項目の比較です。

5系だと、バグ修正がメインな気がします。

8系だと、様々な変更点があります。

8.0.26だと、用語の変更についての記述が多かったなと思いました。

互換性のない変更: MySQL 8.0.26から、「マスター」という用語を含む残りのほとんどの識別子に新しいエイリアスまたは置換名が提供 され、「ソース」に変更され ます。「スレーブ」、これは「レプリカ」に変更され ます。および「mts」( 「マルチスレッドスレーブ」の場合)は、「mta」(「マルチスレッドアプライヤー」の場合)に変更されます 。)。該当する場合は、新しい名前を使用するためにヘルプテキストも変更されます。

MySQL 8.0.26での変更(2021-07-20、一般提供)

MySQL 5.7.35での変更(2021-07-20、一般提供)

MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.35 (2021-07-20, General Availability)

アップデートが起きると、リリースノートを見て検証環境をアップデートして色々と触ってみてます。

他にも、アップデート関連でイベントなどあったりするので興味のある方は、過去の記録などご覧ください。

MyNA(日本MySQLユーザ会)

MySQL リリースノートでわいわい言う勉強会 8.0.24

リリースノートは最新情報の宝庫

ソフトウェアのリリースノート(またはチェンジログ)は、公開された最新バージョンにどんな機能が追加されたのか、どのような不具合が修正されたのか、どのように動作が変更されたのか、などなど、最新情報の宝庫です。 MySQLでは、1回の最新バージョンにて、非常に幅広い変更が加えられることがあります。

日本MySQLユーザ会 - YouTube

新機能追加

毎回ではないですが、機能追加が多数ある場合があります。

最近でいうと8.0.24のアップデートについて記述した記事もあります。

updraft.hatenadiary.com

updraft.hatenadiary.com

新機能

CTE

13.2.15 WITH(一般的なテーブル式)

共通テーブル式(CTE)は、単一のステートメントのスコープ内に存在し、後でそのステートメント内で、場合によっては複数回参照できる、名前付きの一時的な結果セットです。以下の説明では、CTEを使用するステートメントの記述方法について説明します。

WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;

一元的にテーブルを定義できるので便利ですね。

可読性の観点で利点がある機能ですね。

WITH句を使わないで書くなら下記の用になると思います。

SELECT
    b,
    d
FROM
    (SELECT a,b FROM table1) AS cte1
    JOIN 
    (SELECT c,d FROM table2) AS cte2
WHERE
    cte1.a = cte2.c;

qiita.com

Window関数

12.21.1ウィンドウ関数の説明

このセクションでは、クエリの各行について、その行に関連する行を使用して計算を実行する非集計ウィンドウ関数について説明します。ほとんどの集計関数は、ウィンドウ関数としても使用できます。セクション12.20.1「集計関数の説明」を参照してください。

ウィンドウ関数の使用法の情報と例、およびOVER句、ウィンドウ、パーティション、フレーム、ピアなどの用語の定義については、12.21.2項「ウィンドウ関数の概念と構文」を参照してください 。

集計とかするときによく使います。

ウィンドウ関数がなくても同様の出力結果はMySQL5.7でも取得可能ですが、SQLが複雑になります。

mysql> SELECT
         val,
         ROW_NUMBER() OVER w AS 'row_number',
         RANK()       OVER w AS 'rank',
         DENSE_RANK() OVER w AS 'dense_rank'
       FROM numbers
       WINDOW w AS (ORDER BY val);
+------+------------+------+------------+
| val  | row_number | rank | dense_rank |
+------+------------+------+------------+
|    1 |          1 |    1 |          1 |
|    1 |          2 |    1 |          1 |
|    2 |          3 |    3 |          2 |
|    3 |          4 |    4 |          3 |
|    3 |          5 |    4 |          3 |
|    3 |          6 |    4 |          3 |
|    4 |          7 |    7 |          4 |
|    4 |          8 |    7 |          4 |
|    5 |          9 |    9 |          5 |
+------+------------+------+------------+

qiita.com

空間関数リファレンス(GIS)

12.17.1空間関数リファレンス

次の表に、各空間関数をリストし、それぞれの簡単な説明を示します。

GISについては、過去に一度だけ記事にしました。

GIS関数について色々知りたい方は、下記の方の記事を見てみてください。

updraft.hatenadiary.com

sakaik.hateblo.jp

自分もそろそろ追加や変更されたGIS関数についても触りたいと思っています。

わくわく注意書き

当たり前ですが、業務でAWSMySQLを導入する場合、自分自身のわくわくだけでサービスを選択するのは気をつけてください。

ワクワクの気持ちを抑えて、必要な要件を満たすように適切なサービスを選択しましょう。

AWSMySQLの今後に期待ですね。

参考記事

MySQL :: MySQL 8.0: MySQL 5.7よりも最大2倍高速

MySQL 8.0は何が優れていて、どこに注意すべきか。データベース専門家が新機能を徹底解説 - エンジニアHub|Webエンジニアのキャリアを考える!