高頻度で更新され、OLTPとOLAPの両方が求められるときにどうすべきか
それでは「更新用にRDBをシャーディングして、ETLパイプラインを構築し、DWHに同期」というところを新たな技術を利用することでシンプルにできないかと考える。具体的には、①NewSQLでシャーディング不要とするということと、②HTAPでOLTPとOLAPを1つのデータベースで実現するという2つのアプローチを考えてみる。
①NewSQLでシャーディング不要とする
NewSQLとは、MySQLのような分散アーキテクチャでスケーラビリティを保ちつつ、分散トランザクションができるような仕組みもあり、シャーディングに頼らずスケーラビリティを獲得できるようになっている。またNewSQLでは有名プロトコルと互換性があるため、MySQLやPostgreSQLのようなスキルを活かすことができる。
該当するデータベースにはSpanner、TiDB、CockroachDB、YugabyteDBなどがある。
②HTAPでOLTPとOLAPを1つのデータベースで実現する
HTAPとは、OLTPとリアルタイムOLAP分析を1つの基盤でできるようにしたもの。OLTPとOLAPを両立させようとする試みはこれまで幾度となくあったものの、現実的には適材適所で使い分けることが多かった。なぜならOLTPは行型(ローベース)、OLAPは列型(カラムベース)でデータ配置や構造が異なるためだ。
そこでOLTPとOLAPを1つのデータベースで実現しようとしているのがHTAPとなる。目的は同じでも行と列をどう持つのか、その実装方法にはメモリ型とストア型の2種類がある。メモリ型となるのがAlloyDBで、メモリ内に持つので容量に制限が生まれてしまう。データ容量が増えるほど、ストア型が有利となる。ストア型となるTiDBはTiFlashにより大容量のデータのカラム化が可能となる。
該当するデータベースにはAlloyDB、SingleStore、TiDB、Snowflakeなどがある。
これら①と②の両方とも、該当するのがTiDBだ。NewSQLであり、HTAPでもあるデータベースとなる。
ではTiDBはどうしてNewSQLとHTAP、更新・参照と分析を両立させることができるのだろうか。林氏によると「TiDBは2つのエンジンを搭載し、あらゆる業務を1つのプラットフォームで実施可能。また全てのコンポーネントがリニアにオンラインスケールアウト・インが可能」となる。
TiDBのアーキテクチャの大きな特徴はストレージエンジンを2つ持つことができるところだ。更新・参照用(OLTP)のストレージエンジンにTiKVがある。こちらはローベースのストアになっている。また分析用(OLAP)ストレージエンジンにはTiFlashがある。こちらはカラムベースのストアだ。
アプリケーションからTiDB(データベース)に何らかのリクエストが届くと、クエリ処理コンポーネントが更新処理か分析処理が自動判別し、適切なエンジンに処理を実施させる。そしてTiKVで更新されたデータは、分析用のTiFlashへと同期されるようになっている。こうした仕組みで、これまで両立できなかったことを両立できている。
当初、PingCAPで開発されたTiKVは、後にCNCF(Cloud Native Computing Foundation)へと寄贈され、今では「Graduated」ステータスになっている。GitHubでは3万2000以上のスターがつくほど人気だ。また林氏は「実はこのTiDBはMySQL互換ということもあり、性能問題を抱えたMySQLの受け皿になっている側面もあります」と話す。
デモで紹介! NewSQLのスケールアウト、HTAPの実行計画
林氏は2種類のデモを実施した。1つめはNewSQLとしてのデモとして、スケールアウトを実施して見せた。GUIの管理画面を開くと、現在の構成が確認できる。例えばTiDBが何台、TiKVやTiFlashが何台あるという具合だ。もし性能が足りなくなれば、管理画面から必要な台数を増やせばいい。オンラインでスケールアウトが実行できて、とても手軽だ。
2つめはHTAPデモとして、クエリの実行計画を確認する。サンプルでは、Webサイトでレポートを表示するようになっていて、それが24時間、1週間、1か月と期間を選ぶことができる。対象となるデータは50億ほどあり、比較的処理が重くなるクエリを走らせる。まずは24時間を選んで実行し、explainの画面を見ると「Row」と表示され、ローベースのTiKVで処理しているのが分かる。続いて、レポートの期間を1週間に変更して処理を実行する。SQL文は同じだがデータ量は増えている。画面を見ると「Column」と表示され、オプティマイザーがカラムベースのTiFlashで処理を始めたことが分かる。
こうしてTiDBではOLTPもOLAPも、オプティマイザーが判断するのでTiDBだけで処理できるようになっている。そのため複数のデータベースを組み合わせて、複雑な構成にすることはない。アプリケーションの構成はとてもシンプルになる。