% cat

データウェアハウス ClickHouse を使ってみた話。

こんにちは、ベーシックのDevOpsエンジニア 渡辺です。
主にインフラ保守運用や新しい技術の検証、データ解析周りなどをやっています。

今回はアクセスログなど時系列のデータを保存、集計するのに便利なデータウェアハウス ClickHouse をご紹介します。

https://clickhouse.yandex/

ClickHouseとは?

ClickHouseとは、SQLクエリを使用してリアルタイムで分析データレポートを生成できるオープンソースの列指向データベース管理システムです。
時系列データの保存、集計に特化していてクエリ検索パフォーマンスがとても優れています。
データの更新(UPDATE)ができなかったり削除(DELETE)に制約があったりと通常のRDBMSでできることがClickHouseではできないこともありますが、ログを登録して集計することだけと考えればとてつもなく良いパフォーマンスをもたらしてくれます。

ClickHouseの特徴

ポジティブ

  • データ検索(Select)速度がめっちゃ速い
  • データ集計(GroupByなど)がめっちゃ速い
  • 大量データの一括登録(Insert)がめっちゃ速い
  • データサイズがめっちゃ小さい(HDDに優しい)

ネガティブ

  • 個別データ登録(Insert)が若干遅い
  • データ更新(Update)ができない
  • データ削除(Delete)ができない(データパーティションを削除することで特定月のデータを削除するなどのようなことはできる。)
  • JOINができない

※ClickHouseのパフォーマンスに関して(公式サイト)

ClickHouseを試してみる

インストール

https://clickhouse.yandex/#quick-start
インストール自体はだいたい3分程度で終わります。

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4    # optional

$ echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
$ sudo apt-get update

$ sudo apt-get install -y clickhouse-server clickhouse-client

$ sudo service clickhouse-server start
$ clickhouse-client

使ってみる

ClickHouseはMySQLと親和性が高く、SQLクエリ自体も比較的似ています。
DATE関連の関数は相違がありますが、だいたいのクエリはMySQLのものをそのまま使えたりします。
2018年1月のアップデートでClickHouseからMySQLへ直接クエリを投げられるようにもなりました。

テーブルのタイプの概念だけはMySQLと違うのでCREATE文を投げる際には注意が必要です。
こちらはアクセスログなどを取り込むテーブルの場合に有効なテーブルタイプを解説している記事ですので参考まで。
ClickHouseの「MergeTree」と「Summing MergeTree」を試してみた。

公式サイトでチュートリアルが準備されていますので是非試してみてください。
https://clickhouse.yandex/tutorial.html

ベーシックでのClickHouse活用事例

ベーシックではWEBサーバのアクセスログの保存と集計という部分で利用しています。
WEBサーバのアクセスログはもちろん、WEBページ内のイベントログも保存し、それらを集計しユーザの行動パターンを解析しています。

イベントログなどは1日あたり150万レコードほどあったりとなかなかのボリュームがあり、通常のRDBMSではリアルタイム集計は難しいと思います。
大量のデータであるがためにレポートを出す際には集計のために時間をかけてバッチ処理したりする必要があります。
それをClickHouseを利用することでリアルタイムで解析できるようになりました。

その恩恵として、ベーシックにて利用しているBIツール(Re:dash)からでも大量のデータに対し、リアルタイムでアクセスログを解析することができるようになり、これまでは都度エンジニアへ解析データの出力を依頼していたところを、マーケター自身がいつでも簡単にデータ解析できるようになりました。

ClickHouseと他データウェアハウスなどとの比較検証

ClickHouse vs Amazon RedShift Benchmark
ClickHouse vs Amazon RedShift Benchmark #2
Column Store Database Benchmarks: MariaDB ColumnStore vs. Clickhouse vs. Apache Spark

手前味噌ですが、弊社でMySQLとパフォーマンスを比較検証した結果です。
検証結果としてはとても満足できるものとなり、すぐにClickHouseを導入し運用することを決めました。
ClickHouseとMySQLのベンチマークをとってみた。

おわりに

ClickHouseはBIツールのRe:dashのデータソースのひとつとしても登録されています。
まだまだ日本語での情報も少なく、導入事例等も見かけることがほとんどありません。
しかしデータウェアハウスとしては簡単に用意することができ、大量のデータをパフォーマンス良く解析でき、そしてローコストで運用できるのでとても便利なデータベースです。
もしビッグデータの取り扱いに悩んだら一度試してみることをオススメします!

最新記事

BananaCI というツールを運用しています

こんにちは。[@endotakuya](https://github.com/endotakuya) です。 突然ですが皆さんは CI/CD 、してますか? オンプレミス型の Jenkins や Drone 、クラウド型の Cir...

endotakuya
2018年12月06日

シグナルと kill コマンドについてちゃんと調べてみた

開発中にプログラムが固まった時に `kill プロセスID` って打ったことがある方は多いかと思います 僕もそうで、 kill コマンドはプロセスを強制終了するためのコマンドだと思っていました ですが puma のログ...

tkhr0
2018年12月06日

Rails における弊社の CSS 設計

Hi. [rigani_c](https://twitter.com/rigani_c) です。 これはベーシックアドベントカレンダーの記事です。仲間たちの投稿一覧はこちら 🎄https://qiita.com/advent-...

rigani
2018年12月02日