「トランザクション処理はMySQLで、分析はBigQueryで、ってやってたら同期が大変になってきた」——データが増え、サービスがスケールするにつれてこの問題は必ず起きます。従来のRDBMSはスケールアウトが苦手で、シャーディングによる水平分割は複雑さを増します。この課題に対する答えのひとつが「NewSQL」というデータベースカテゴリです。
NewSQLをたとえで説明すると「分散して働くのに、まるで一人の優秀な秘書のように振る舞うチーム」のようなものです。複数のサーバーにデータを分散させながら(スケールアウト)、SQLとACIDトランザクションという「使い慣れたインターフェース」を維持してくれる——それがNewSQLです。代表的なプロダクトはTiDB、CockroachDB、Google Spannerなどです。
データエンジニアQ:「MySQLのシャーディングの管理がもう限界です。アプリ側でシャードキーを意識した実装が増えすぎて…」
アーキテクトR:「TiDBを検討してみて。MySQLと互換性があるから、アプリコードをほぼ変えずに移行できる。水平スケールは自動でやってくれる」
Q:「MySQLの構文がそのまま使えるんですか?」
R:「ほぼね。MySQL 5.7互換のプロトコルで動くから、MySQLクライアントでそのまま繋げる」
TiDBをDockerで試してみましょう。
# TiUP(TiDBクラスタ管理ツール)のインストール
curl --proto =https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# ローカルでTiDBクラスタを起動(開発用)
tiup playground v7.5.0 --tag mytest
# 別ターミナルでMySQLクライアントから接続(MySQLそのまま!)
mysql -h 127.0.0.1 -P 4000 -u root
次に、HTAPの特徴を活かすクエリ例を見てみましょう。TiDBはOLTP(トランザクション処理)とOLAP(分析処理)を同一クラスタで処理します。
-- 通常のINSERT(OLTP)
INSERT INTO orders (user_id, amount, created_at)
VALUES (123, 9800, NOW());
-- 同じクラスタで大規模な集計(OLAP)も可能
SELECT DATE(created_at) as date,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY DATE(created_at)
ORDER BY date;
「MySQLを使い続けるか、NewSQLに移行するか」は、データ量・トラフィック・チームのスキルセットによります。しかしスケーラビリティの壁にぶつかってから慌てて移行するより、今のうちにNewSQLを触って選択肢として持っておくことが重要です。スケールしなくなったMySQLを使い続けることのリスクを、ぜひ一度真剣に考えてみてください。
コメントを残す