この記事は Percona Live 2019 in Texas Austin 現地レポ(Session Day 1) の1つ目です。
Opensource Column Store Databases: MariaDB ColumnStore vs. ClickHouse
OSSのDHW製品として有名なYandex社のClickhouseとMariaDB Columnstoreの比較を行うセッションでした。
一般的な行指向であるRDBMS(MySQL)の遅い理由として以下が挙げられていました。
- 行指向である
- 例えば2つのフィールドしか必要が無くても基本的には行に含まれるすべてのフィールドを読み込む
- InnoDB のデフォルトのページサイズは16kなので、より多くのデータが必要なクエリではI/O回数が増え非効率
- 基本的に1つの更新クエリに対しては1つのCPUしか使用しないため
Yandex Clickhouseとの対比として、以下が挙げられていました。
- 接続方法
- Clickhouseでは以下の方法がある
- clickhouse-mysql-data-reader https://github.com/Altinity/clickhouse-mysql-data-reader
- MySQLからClickhouseへのデータ同期ツール(レプリケーションスレーブのように動作)
- Clickhouse native connector
- Clickhouse内にMySQLテーブルを読み込むためのビューを作成して操作
- ProxySQLを使用した接続
- mysql clientからProxySQLを通してClickhouseへ接続
- ColumnstoreはMariaDB互換なのでMySQL Clientから操作できる
データロードについては以下の比較がされていました
- Columnstoreにおけるデータロード
- 高速に動作する方法 = cpimport
- 簡単な方法 = InnoDBテーブルをColumnstore上に作成してinsert .. select to Columnstoreテーブル
- ColumnstoreではJOINはInnoDB/Columnstoreを混ぜても実行できる
- Clickhouseにおけるデータロード
- clickhouse-mysql-data-readerをスレーブのように動作させ、MySQL -> Clickhouseでレプリケーション
- Clickhouse native connectorで作成したVIEWからINSERT * SELECT..
なおColumnstoreではMySQLからのレプリケーション機能は実装予定
UPDATE/DELETEについては以下の説明がありました
- UPDATE/DELETEはカラムデータベースは遅い
- single row のupdateで1msかかる
- Clickhouseではalter table updateというSQLを実行
ダミーデータを使用したSELECTの実行速度比較については以下の説明がありました
比較的Clickhouseは高速です。
- single row select
- mysql(InnoDB) => 0.00sec
- Columnstore => 0.03sec
- Clickhouse => 0.02sec
その他range select等を実行したグラフが紹介されていましたが、単純なSELECT以外においてはClickhouseが高速に動作するという結果となっていました。
一方でClickhouseはマルチノードで動作する前提ではないため、物理的なリソース(メモリ)を大量に積む必要があり、MariaDB Columnstoreでは比較的少ないメモリのノードを複数台用意することで、個々のリソースを減らすことができるということでした。
また、MySQLとの互換性はMariaDB Serverが組み込まれているMariaDB Columnstoreが優位でした。
アプリケーションも含めた運用をMySQLベースでなくてもよい場合はClickhouse、すでにあるMySQLベースのアプリケーションからの利用が想定される場合はColumnstoreと使い分けができますね。
New Features in ProxySQL 2.0
ProxySQL 2.0がGAしたため、2.0で実装された新機能について紹介されていました。
AWS Aurora用テーブルが追加されており、AWSとの連携が強化されていました。
多岐に渡るため、以下箇条書きで記載します。
- Query Cache機能の改善
- キャッシュの手動パージの実装
- 空のクエリ結果をキャッシュしないためのmysql_query_rules.cahe_empty_result列を追加
- mysql-query_digests_track_hostnameの追加により、クエリログの取得クライアントを選択可能に
- Gtid Casual Reads
- GTIDから最も最新のデータを持つレプリカを判定してSELECTをルーティング
- 現在はUbuntuのみに対応しているようです
- galera native support
- ProxySQL本体にmysql_galera_hostgroupsテーブルを追加し、Galera Cluster(or PXC)への接続が可能に
- 追加の統計情報用テーブルの実装
- systemd
- Ubuntu18/Debian9ではスクリプトを同梱
- CentOS/RHELでは未実装
- DockerhubにProxySQL 2.0.4が追加された
- Aurora support(mysql_aws_aurora_hostgroups)
- 自動でレプリカの判断
- 自動でレプリカの追加、削除
- AZを意識したルーティング
- MS単位でのレプリケーションラグの監視
- replica_host_statusからメトリックの取得
- mysql_aws_aurora_hostgroupの追加
- Frontend SSL
- LDAP
- JSON Support
- stats_mysql_processlist, stats_mysql_free_connectionsテーブルのextended_info列にJSON型を実装
- JSON_EXTRACT関数の実装
- AUDIT LOG (2.0.5)
- 接続などのロギング
- Adminの操作のロギング
MySQL Community Award
午前のセッション完了後、MySQL Community Awardが開催されました。
表彰者は以下の通りでした。
皆さんとてもうれしそうです!
いつの日かここに立てますように…