RDBの課題を克服する新しいDB、NewSQLとは何か
NewSQLは、これまでRDB(Relational Database)がデメリットとする拡張性や処理速度、NoSQLにおけるデータの一貫性や検索機能の甘さを解決し、メリット部分はそのままサポートしてくれるデータベースとして注目されている。
MySQLプロトコルとも互換しているため、RDBに対するスキルセットを活かすことができる。また、NewSQLは完全分散型なので、リードレプリカを通じてレプリケーション遅延がなくなるといったメリットもある。さらに林氏が強調するのは、その運用性の高さだ。
「そもそも分散型のデータベースなので、ノードをまたいだアクセス、クエリー、JOINなど、性能が劣化することなく実施できます」
世界で採用されるTiDBの特徴
NewSQLの主な製品には、Amazon Aurora、Google Cloud Spanner、YugabyteDB、CockroachDB、TiDBが挙げられる。特にMySQL互換があるTiDBは、世界1600社以上の商用環境が採用している注目のオープンソースデータベースだ。
林氏は、TiDBの特徴として以下の3つを挙げている。
- スケールアウト+MySQL互換
- クラウドネイティブ
- リアルタイム分析
特徴1:スケールアウト+MySQL互換
TiDBはMySQL互換のデータベースなので、アプリケーション側にMySQLクライアントをそのまま利用できる。MySQL 5.6もしくは5.7の互換が可能であり、今後は8.0以降もサポートしていく予定だという。
以下スライドの緑で囲っている部分が、データベースシステムとして提供しているコンポーネント。TiDBがSQLの解析レイヤーで、TiKVというコンポーネントが実際にデータが入っているデータストアレイヤーとなっている。
「TiDBはMySQLプロトコルを理解し、クエリーに応じてTiDBの方にデータを保存したり、TiDBの中のデータを読んだりします。コンポーネントと共にノードを増やすことによって容量や性能などを拡張することも可能です」
TiKVのデータストアは、3面コピーをすることによって耐障害性を高めており、AZ障害にも耐えうるアーキテクチャである。
注意点としては、大きく3つ挙げられる。1つ目は、ストアドプロシージャ、トリガー、外部キー制約など、サポートしていない部分もあり、MySQL互換は100%ではないこと。2つ目は、トランザクションはスナップショットアイソレーションを使っており、MySQLのRepeatable Readと同等の動きをするように模倣していること。悲観ロックもサポートしているので、結果的に動きはほぼ一緒となる。3つ目は、Auto_Incrementの動きも完全には順番にはならないことである。
アプリ側からアクセスできるコネクタやフレームワークは、Go、Java、Python、Ruby、PHPなど。基本的にMySQLで用意されているツールをそのまま使うことができる。その他のツールが必要な場合は、PingCAPで検証・動作確認も可能とのことなので、問い合わせしてみよう。
事例として、NetEaseのオンラインゲーム「荒野行動」が紹介された。15億行ものデータが格納されているため、リードライトの性能に影響があり、MySQLの互換性を高めたいというのが導入の背景。キャンペーン時には数倍にもなるアクセス数を捌き、終了時には性能を縮小してコスト最適を保つこともできた。