サクッとTiDB Cloudのチュートリアルやってみました。
1. アカウントを作ります。
右上の【無料で始める】をクリックしてアカウントを登録。
TiDB Cloud(TiDB Serverless)は無料枠が多くあるので基本的に無料で使えます。
2. チュートリアルを始める
右下の【?】をクリック。
3. データセットを選択する
使ってみたいデータセットをクリック。
今回は【Stream Game Stats】を選択。
4. データセットをimportする
【Import Dataset】をクリック。
待つこと数分…
5. データセットのimport完了
取り込めた!
【Start】をクリックで次に進む。
6. データセットの内容確認
なんと!親切にSQLが用意されている。
【Paste into SQL Editor】をクリックし、右上の【Run】をクリック。
https://pingcap.co.jp/tidb/
データが表示された!
7. さらにデータセットの内容確認
同様に実行してデータが表示されることを確認。
8. Text2SQLなるものを実施
command + iで入力欄を表示させて、【Top 10 popular games】を貼り付ける。
SQLが生成されてる〜
(SQLを書かない未来がすぐそこに)
9. Applicationに接続
https://steam-insight.vercel.app/
こんな感じでデータの可視化のアプリもできる!という紹介ページが見れます。
10. フィニッシュ
お疲れ様でした。
応用編
OLAP系のSQLの場合TiFlashのストレージエンジンを読み込みます。
ただTiFlashが使われるのか、TiKV(OLTP系)が使われるかはオプティマイザ(TiDB)次第。
今回のSQLたちはどちらが使われることになるでしょうか?検証してしました。
準備
TiFlashを使うには事前にテーブル単位で設定が必要です。
そのため今回使うテーブルに対してTiFlashを使用する設定を行います。
-- TiFlashの使用状況を確認
select * from information_schema.tiflash_replica;
-- game_genreテーブルをtiflashを使うように設定
alter table game_genre set tiflash replica 1;
-- game_genreテーブルをtiflashを使うように設定
alter table game_genre set tiflash replica 2
-- gamesテーブルをtiflashを使うように設定
alter table games set tiflash replica 2;
-- TiFlashの使用状況を確認
select * from information_schema.tiflash_replica;
検証結果
TiFlash使用前
explain analyze
SELECT g.*
FROM game_genre gg
LEFT JOIN games g ON g.app_id = gg.app_id
WHERE gg.genre_id = 9
ORDER BY g.estimated_owners DESC;
task列のcop[tikv]になっているめtikvへアクセスされています。
処理時間は185msだと思われる。
TiFlash使用後
TiFlashと使用前と同じSQLを実行。すると、、、
cop[tiflash]ってなってる!これはtiflashが使われたと言うこと。
処理時間は227msだと思われるので、処理が全体としては遅くなっている…
このSQL自体もOLTPの方が適していそう
追加検証
もう少しOLAPで使われそうなSQLにて検証
explain analyze
With r AS (
SELECT
games.name,
genre.genre_name,
rank() over (partition by genre.genre_id order by games.metacritic_score desc) as ranking
FROM game_genre gg
LEFT JOIN genre ON genre.genre_id = gg.genre_id
LEFT JOIN games ON games.app_id = gg.app_id
WHERE games.metacritic_score != 0
)
SELECT *
FROM r
WHERE r.ranking <= 5;
TiFlash使用前
TiFlash使用後
処理時間は281ms
うーん、遅くなった…
まぁ、データ量も多くはないししょうがないか?
game_genre:188,188レコード
games:68,223レコード
余談ですが①
alter table game_genre set tiflash replica 0;
alter table games set tiflash replica 0;
これでTiFlashをやめられます。
余談ですが②
TiKVとTiFlashの使い分けですが、SQL実行時にヒント句で与えられるみたい。
explain analyze
SELECT /*+ read_from_storage(tikv[game_genre],tiflash[games] */
g.*
FROM game_genre gg
LEFT JOIN games g ON g.app_id = gg.app_id
WHERE gg.genre_id = 9
ORDER BY g.estimated_owners DESC;
ちなみに上記SQL実行しましたが、tiflashが使われました。
エンジンの分離設定をする必要があるみたいですが、TiDB構成ファイルを触る必要があり、すぐにできなかったためここまでとします。
SQLでヒント句が与えられるのは良いですね。TiKvに影響を与えたくない状況は少なくないと思うので活用したいですね。
感想
将来は分析を考えつつ、今は業務アプリを作る状況って全然あると思うので、そんな時にTiDB良いですね。
もちろんMySQLのアプリを移行して、その後分析にも活用すると言うのもありですし。
Text2SQLも実装されていて新しさを感じました。
今後も期待!