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

最新記事

「良いプロダクト」とは、どんなプロダクトのことでしょうか?

こんにちは! プロダクトオーナー兼開発部マネージャーをしている長谷川([@roki1801](https://github.com/roki1801))です。普段は山形県山形市にあるベーシックのサテライトオフィス「[山形ラボ](...

roki1801
2019年03月29日

大量アクセスに耐え得る在庫管理システムの構成を考え実装してみた

皆さん「在庫管理」ってどうしてます?itemsテーブルに、stockカラム作ってdecrementしてますか? まぁ正直、それでも良い感じしますよね。楽だし何やってるかわかりやすい。 しかし! **超人気商品に超ア...

mmusasabi
2019年03月13日

kubernetes で Ruby on Rails を動かして kubern...

巷で話題の kubernetes ですが、とってもとってもとっつきにくいですよね そんな kubernetes ですが手元で動かすことができたので解説してみます (情報が間違ってたらごめんなさい! 🙇) 目標はこちら ...

tkhr0
2019年03月07日