MySQL 5.7の新機能の紹介 – 2編

はじめに

MySQL 5.7のJSON対応Native Partition対応の新規機能について紹介したいと思います。

1.レプリケーションの機能強化

まず、MSR(Mulit-Source Replication)になることに非常に興奮しました。
DBAは実に重要な機能です。なぜなら、まずは下のサンプルを見てみよう。

共通DB、ゲームDB、ログDBで構成されたゲームがあるとします。ゲームDB、ログDBは複数でShardingされ、物理的に他の機器でサービスしています。ここで、ある指標を表示するため、すべてのDBで1度にクエリしてjoinをかける必要があるとしたら、どうなるでしょう。

以前はバッチ作業で特定の時点のデータをすべて流し、大きな機器に復元する必要がありました。
すごく時間がかかるし難しいですね。MySQLは特に復元に時間がかかります。

しかしMSRでは、ディスクが大きい機器1台をすべてのDBのslaveにすれば完了します。
他にもこのように様々な機能が強化されました。

  • GTID性能向上 -> 複製割れを防ぐ効果がある
  • Semi syncレプリケーションの機能強化 -> 特にslaveが複数あるとき、より向上している
  • Dynamic slave filter -> 複数DBの場合、特定DBの複製やmasterの変更が簡単にできる

2. JSONのサポート

次のものをサポートします。

  • Native JSON data type
  • Built-in JSON functions
  • JSON Comparator
  • Indexing of Ducuments using Geenrated Columns
  • New inline syntax for easy SQL intergration

注目すべきは、Native JSON data typeとIndexingでしょう。

通常、textカラムにjsonデータを入れてしまうと、後で検索するとき非常に苦労します。すべてのデータを読み終えてから再解析し、特定の項目を探してテーブルの別カラムに保存し、その後、当該カラムでインデックスを作成します。しかし、Native JSON data typeのカラムに入れておけば、もうそのような必要はありません。最初に入力したデータを構造化されたデータ形式で保存し、特定の項目をインデックスに追加しようとすると、テーブルのカラムにインデックスを作成するのと同じ位、速くインデックスにしてくれます。さらにインデックスがない場合でも検索が速くなります。

以下はOracleで実証した画面です。文法は気にしないでください。
JSON関連の関数で、JSONデータ内の特定の項目を抜き出す機能です。

10倍速いですね。

当該項目をカラムに抜き取ってインデックスにすると、select文にかかる時間は0.06 secまで減少します。
さらに、カラム作成からインデックス作成までに要する時間も1秒かかりません。

この関数は、マイグレーションや集計関数のような機能を提供します。

  • Creating JSON Values /データをJSON形式で作成する
  • Normalization, Merging and Autowrapping of JSON Values /様々な形に加工する
  • Searching and Modifying JSON Values /検索して修正する
  • Comparison and Ordering of JSON Values /比較する
  • Aggregation of JSON Values /セットする

詳細は、[リンク]をご覧ください。ここで注意点が1つあります。character setは「utf8mb4」です。

3.セキュリティの強化

セキュリティ機能が強化されました。しかし実際は少し不便に感じるかもしれません。

  • パスワード期間の機能追加
    1年経過したパスワードは変更が必要です。
  • アカウントの無効化機能を追加
    一時的にアカウントを無効化できます。
  • 自身のアカウントに対するパスワード変更機能
    本人パスワードは、本人が変更にするようになりました。
  • SSL対応をデフォルト化

4. SQLモードの強化

これが最も不便に感じる部分かもしれません。今後はSQL標準に合わない文法はより強く防止されます。

ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESが基本適用されます。

1)STRICT_TRANS_TABLES=>形式が合わない値をinsertするとき、以前はwarningされてもそのまま入力できましたが、今後はエラーになり入力できません。
2)ONLY_FULL_GROUP_BY==> group byしていないカラムをselectすることができません。

5. InnoDB engineの機能強化

  • Native Partitioning ->パーティションの高速化
  • Native Full-Text Search ->専門検索エンジンは、日本語、韓国語、中国語に対応
  • Native Sparial index
  • 高い圧縮率でページ圧縮可能
  • 複数テーブルを別ディスクに保存可能
  • Group Replication対応 ->Active-Active方式の複製
  • cache preloading機能強化 ->起動してからキャッシュアップする機能が向上
  • データの内容を変更できる余地を残してデータを保存するfill-factorの調節改善
  • bulk loadの高速化
  • メモリ不足、InnoDB buffer poolサイズを、DBを再起動することなく変更できます。

6. Fusion IOサポート

  • ディスクに書き込む際、整合性を確保するために、double write bufferとしてデフォルト二重書き込みになっています。
    しかし、Fusion IOではこれが必要なくHWでサポートします。
    NVM形式でFusion IOディスクをフォーマットすると、MySQLはこれを自動認識して、より速く動作します。

7. GISサポート

  • 空間データを演算して分析できます。インデックスにR-treeも使用できますよ。

8. SYSスキーマ

MSSQLのDMVのように、システムの状態が、より分かりやすくなりました。
これによってモニタリングなどが効率的に行えます。

9.バックアップツールの強化

mysqldumpというツールが登場しました。DBをdumpするとき、multi threadにバックアップを進行する速度が向上します。

まとめ

1.複製はMSRなど様々な機能が追加されました。特にslaveが複数ある場合は、より便利に利用できます。
2 JSONはMysqlに保存しましょう。様々な関数とクエリ、強力な検索機能があります。
3.セキュリティの強化、SQLモードのデフォルト追加などは若干不便ですが、安全性が向上されました。
4. InnoDBのパーティション機能も使用できます。
5. Fusion IO使用時のパフォーマンスが非常に高くなりました。
6. SYSスキーマをはじめ、管理機能が向上しました。

TOAST Meetup 編集部

TOASTの技術ナレッジやお得なイベント情報を発信していきます
pagetop