NHN Cloud Meetup 編集部
MySQL 5.7の新機能の紹介 – 2編
2016.01.11
724
はじめに
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_BY、STRICT_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スキーマをはじめ、管理機能が向上しました。