SlideShare a Scribd company logo
1 of 22
Download to read offline
© Geniee, Inc.
ClickHouse導入事例紹介
R&D本部
基盤技術開発部 SREチーム
犬伏
© Geniee, Inc.
本日の内容
2
● [1min] 登壇者紹介
● [3min] ClickHouse導入の経緯
● [8min] システム構成の紹介
○ 系全体:Kafka, Flink, ZooKeeper, MySQL, ClickHouse
○ ClickHouse cluster の構成:サーバー構成, テーブル構成
● [8min] ClickHouse導入による成果・課題
○ 遭遇した課題とその解決:メモリ, Merge engine, XID overflow
○ 未解決問題たち:MaterializedView, distributed_aggregation_memory_efficient
● [5min] 未来のClickHouseへの要望等
● [15min] 質疑応答
© Geniee, Inc.
登壇者紹介
3
● 犬伏 貴之 (Inubushi Takayuki)
● R&D本部 基盤技術開発部 SREチーム(インターン)
● ClickHouse歴 9ヶ月
○ 2019年2月頃 ClickHouseに触れる
○ 2019年4月頃 XID overflow と遭遇
● 趣味(Hobby)
○ テトリス(Tetris)
© Geniee, Inc.
本日の内容
4
● 登壇者紹介
● ClickHouse導入の経緯
● システム構成の紹介
● ClickHouse導入による成果・課題
● 未来のClickHouseへの要望等 (Our requests about CH)
● 質疑応答
© Geniee, Inc.
ClickHouse導入の経緯
5
● 決め手となった指標
○ 高速なSELECT
○ 圧縮による高いストレージ効率
● 2年前時点での状況
○ MySQLからClickHouseへデータを複製するバッチが動作
画面表示が高速化
● See also
○ SlideShare: 世界分散配信システムとレポートシステム刷新の話
○ GENIEEブログ: ClickHouseで...1000倍高速化した話
○ SlideShare: Report API を支える技術
© Geniee, Inc.
本日の内容
6
● 登壇者紹介
● ClickHouse導入の経緯
● システム構成の紹介
● ClickHouse導入による成果・課題
● 未来のClickHouseへの要望等 (Our requests about CH)
● 質疑応答
© Geniee, Inc.
システム構成の紹介[1/4]:全体
7
© Geniee, Inc.
システム構成の紹介[2/4]:ClickHouse cluster
8
● ClickHouse cluster の構成
○ 8台の物理サーバーを 4shard × 2replica でクラスター構成
● 各サーバーの性能
○ CPU: Intel Xeon Gold 6142 x 2
○ RAM: 256GB
○ Storage: HDD 18TB (RAID50)
○ Network BW: 10Gbps
○ Network RTT: 150μs
● Software versions
○ ClickHouse: 19.7.3.9 (8 servers)
○ ZooKeeper: 3.4.13 (5 servers)
© Geniee, Inc.
システム構成の紹介[3/4]:ClickHouse tables
9
● テーブル構成
○ Raw(詳細なデータ保持)とMaterialized(部分集計テーブル)
○ それぞれ日付(in JST)単位のテーブルの集合(Merge)
■ 日付単位なのは、再集計を可能にするため
※ 再集計 … ログ生成側、ログ集計側のどちらかが不具合を起こすと集計し直したくなるが、
再集計結果が出るまでは一部誤った結果でも残しておきたい
● カラム数・カラムの型
○ primary key → 39(Raw), 31(Materialized)
■ 2 DateTime, 15 UInt32, 14 UInt16, 2 UInt8, 1 Int16, 5 String
○ measure → 16(Raw), 16(Materialized)
■ 3 Int32, 13 Int64 (打ち消しのために符号付き数を使用)
※ 打ち消し … SummingMergeTreeでは DELETE ができないので、削除したいデータの
primary key に対し、負の measure を INSERT することで値を打ち消して擬似的に削除する
© Geniee, Inc.
システム構成の紹介[4/4]:ClickHouse tables
10
5 times/min
20-30MB/once
© Geniee, Inc.
本日の内容
11
● 登壇者紹介
● ClickHouse導入の経緯
● システム構成の紹介
● ClickHouse導入による成果・課題
● 未来のClickHouseへの要望等 (Our requests about CH)
● 質疑応答
© Geniee, Inc.
ClickHouse導入による成果:
12
● ◯ 高効率なストレージ
○ MySQLに置いてあるデータと比べキーをかなり増やしているが、
それでもほぼ同程度の容量しか消費していない
● ? Meetupを開催できた
○ 本スライドを作成する工数をもらえた
→ClickHouseのドキュメントを読み直す時間を得た
● ✕ テーブル設計を失敗している感がある
○ 日単位で持っている数千のテーブルや、それを束ねるMergeテーブル
に飛んで来るクエリが悪さをしている
○ 2年前に「1000倍速く」なったものが「1000倍遅く」戻ったり
※ キーを張っていないカラムに対して GROUP BY をしているのが悪い
© Geniee, Inc.
ClickHouse導入による成果:良かった機能
13
● Materialized View
○ Raw に投げると時間がかかる場合に使えるが、柔軟性が課題
● PREWHERE
○ 条件やクエリにもよるが、3倍ぐらい速くなることが多い
※ PREWHERE内部で関数を呼び出すと早くならないことがあるような気がする ?
● max_memory_usage, _for_user, _for_all_users
○ 誰かの心ないSELECTが系全体を停止させることが減る
● クエリの静的解析をちゃんと頑張っていそう
○ 共通部分式削除とか
© Geniee, Inc.
ClickHouse導入後の課題:躓いた点
14
● メモリとの闘い
○ SELECTクエリは場合によって大量のメモリを消費する
→ max_memory_usage 等で制限した上で、必要な大きなクエリは複
数回のSELECTに分割
● 突然の Table is in readonly mode との闘い
○ 大量のReplicatedテーブルを保持していると短周期で xid overflow
○ xid overflow の処理に穴があり一部のテーブルに書き込めなくなる
→ 毎日 clickhouse-server を再起動することでごまかし
● Cannot schedule a taskとの闘い
○ 全期間でのSELECTを行うとConnectionPoolが枯渇する
※ より小さな区間での Merge を作って後で合計してごまかし
● テーブル構造との闘い
○ キーでない列へのSELECTは当然フルスキャンになる
※ ClickHouseは悪くない、我々のテーブル設計の問題
© Geniee, Inc.
ClickHouse導入後の課題:将来使いたい機能
15
● merge table function
○ readonly な user は使えないところがつらい
○ set readonly=2 とすれば setting 変更と table function だけ可能
● distributed_aggregation_memory_efficient setting
○ 少し試したところ数値が合わないところがあり慌てて戻した
● PARTITION feature looks great
○ おそらく導入を決めた時点ではこんなに柔軟ではなかった
○ 日単位でテーブル分けたりしなくても良いかもしれない
※ MaterializedView を考えるとまだ難しいかもしれない ?
© Geniee, Inc.
本日の内容
16
● 登壇者紹介
● ClickHouse導入の経緯
● システム構成の紹介
● ClickHouse導入による成果・課題
● 未来のClickHouseへの要望等 (Our requests about CH)
● 質疑応答
© Geniee, Inc.
Our requests about ClickHouse
未来のClickHouseへの要望等
17
● Allow use of merge table function for readonly users
○ set readonly=2 solves this
● Feature to create complete MView for existing active tables
○ Here “active” means “INSERT continues during POPULATE”
○ Flexible MView creation is essential for our use case
○ Maybe part-based approach is good?
● Provide control on #threads when SELECT on Merge table
○ We have many(>2k) tables in Merge.
● Fix incorrect results when distributed_aggregation_memory_efficient is on
○ It makes response faster, saves network usage, balances loads
● About error log
○ >650MB for each server in 3 months, both system errors and
query errors are present and cannot separate easily
○ system.text_log and system.query_log will help
© Geniee, Inc.
本日の内容
18
● 登壇者紹介
● ClickHouse導入の経緯
● システム構成の紹介
● ClickHouse導入による成果・課題
● 未来のClickHouseへの要望等 (Our requests about CH)
● 質疑応答
© Geniee, Inc.
質疑 応答
Q&A time
© Geniee, Inc.
ありがとうございました.
Thank you.
© Geniee, Inc.
参考文献
21
● https://clickhouse.yandex/docs/en/development/architecture/
● https://clickhouse.yandex/docs/en/operations/
© Geniee, Inc.
distributed_aggregation_memory_efficient
SELECT
banner_id,
zone_id,
any(ssp_id),
toDate(local_interval_start_utc, 'UTC') AS date,
0 AS bid,
sum(imp_count) AS impression,
sum(click_count) AS click,
sum(conversion_cost_nanojpy) AS revenue_jpy,
sum(cost_nanojpy) AS cost_jpy,
sum(geniee_cost_nanojpy) AS winprice_jpy,
sum(geniee_margin_nanojpy) AS geniee_margin_revenue_jpy,
sum(vendor_margin_nanojpy) AS vendor_margin_revenue_jpy,
sum(agency_margin_nanojpy) AS agency_margin_revenue_jpy,
is_rtb_as_yield,
any(campaign_currency)
FROM buyer.reports_v3
PREWHERE (date = '2019-11-01') AND ((banner_id % 16) = 0)
GROUP BY
banner_id,
zone_id,
date,
is_rtb_as_yield
HAVING (impression != 0) OR (click != 0) OR (revenue_jpy != 0) OR (cost_jpy != 0) OR (winprice_jpy != 0)
with distributed_aggregation_memory_efficient = 0:
349589 rows in set. Elapsed: 6.661 sec. Processed 39.54 billion rows, 318.27 GB (5.94 billion rows/s., 47.78 GB/s.)
349589 rows in set. Elapsed: 6.537 sec. Processed 39.54 billion rows, 318.28 GB (6.05 billion rows/s., 48.69 GB/s.)
349589 rows in set. Elapsed: 6.364 sec. Processed 39.54 billion rows, 318.28 GB (6.21 billion rows/s., 50.02 GB/s.)
with distributed_aggregation_memory_efficient = 1:
1378 rows in set. Elapsed: 4.290 sec. Processed 39.52 billion rows, 317.87 GB (9.21 billion rows/s., 74.10 GB/s.)
1378 rows in set. Elapsed: 4.327 sec. Processed 39.51 billion rows, 317.51 GB (9.13 billion rows/s., 73.38 GB/s.)
1378 rows in set. Elapsed: 4.323 sec. Processed 39.53 billion rows, 318.04 GB (9.14 billion rows/s., 73.56 GB/s.)
22
Faster, but
Results are different

More Related Content

What's hot

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Yahoo!デベロッパーネットワーク
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてTakuto Wada
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo!デベロッパーネットワーク
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例briscola-tokyo
 
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜Jumpei Miyata
 
初めての Spanner 移行
初めての Spanner 移行初めての Spanner 移行
初めての Spanner 移行Igarashi Toru
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 

What's hot (20)

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
KafkaとPulsar
KafkaとPulsarKafkaとPulsar
KafkaとPulsar
 
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
 
初めての Spanner 移行
初めての Spanner 移行初めての Spanner 移行
初めての Spanner 移行
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 

Similar to ClickHouse導入事例紹介

Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)Yu Amano
 
WebのQAを5年間運営してみた
WebのQAを5年間運営してみたWebのQAを5年間運営してみた
WebのQAを5年間運営してみたTakayoshi Sakaino
 
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話CASAREAL, Inc.
 
Wordpress(ワードプレス)保守パック・戦略企画ドットコム
Wordpress(ワードプレス)保守パック・戦略企画ドットコムWordpress(ワードプレス)保守パック・戦略企画ドットコム
Wordpress(ワードプレス)保守パック・戦略企画ドットコム戦略企画ドットコム株式会社
 
SIerとクラウドの付き合い方
SIerとクラウドの付き合い方SIerとクラウドの付き合い方
SIerとクラウドの付き合い方Yusuke Suzuki
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAmazon Web Services Japan
 
20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon WorkspacesAmazon Web Services Japan
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & AppsGoogle Cloud Platform - Japan
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由gree_tech
 
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj満徳 関
 
20140904 One Coin College CMSを使いこなすスキル
20140904 One Coin College CMSを使いこなすスキル20140904 One Coin College CMSを使いこなすスキル
20140904 One Coin College CMSを使いこなすスキルtetsuo morikawa
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 Yusuke Suzuki
 
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜HatakeyamaAkihide
 
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】WESEEKWESEEK
 
Qlik Enterprise Managerの導入と利用方法
Qlik Enterprise Managerの導入と利用方法Qlik Enterprise Managerの導入と利用方法
Qlik Enterprise Managerの導入と利用方法QlikPresalesJapan
 
NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020gree_tech
 
Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例Kishin Yagami
 
GoogleAnalytics Cookie クックブック
GoogleAnalytics Cookie クックブックGoogleAnalytics Cookie クックブック
GoogleAnalytics Cookie クックブックTakashi Sudou
 

Similar to ClickHouse導入事例紹介 (20)

Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)
 
WebのQAを5年間運営してみた
WebのQAを5年間運営してみたWebのQAを5年間運営してみた
WebのQAを5年間運営してみた
 
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
JJUG会長と一緒に考えたSpring Boot x JavaScript x IntelliJ x アジャイルというモダンな新人研修を今まさにやっている話
 
Wordpress(ワードプレス)保守パック・戦略企画ドットコム
Wordpress(ワードプレス)保守パック・戦略企画ドットコムWordpress(ワードプレス)保守パック・戦略企画ドットコム
Wordpress(ワードプレス)保守パック・戦略企画ドットコム
 
SIerとクラウドの付き合い方
SIerとクラウドの付き合い方SIerとクラウドの付き合い方
SIerとクラウドの付き合い方
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
 
20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
 
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
 
20140904 One Coin College CMSを使いこなすスキル
20140904 One Coin College CMSを使いこなすスキル20140904 One Coin College CMSを使いこなすスキル
20140904 One Coin College CMSを使いこなすスキル
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」
 
Yapc::Asia_2012
Yapc::Asia_2012Yapc::Asia_2012
Yapc::Asia_2012
 
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
 
アジャイルと私
アジャイルと私アジャイルと私
アジャイルと私
 
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
 
Qlik Enterprise Managerの導入と利用方法
Qlik Enterprise Managerの導入と利用方法Qlik Enterprise Managerの導入と利用方法
Qlik Enterprise Managerの導入と利用方法
 
NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020
 
Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例
 
GoogleAnalytics Cookie クックブック
GoogleAnalytics Cookie クックブックGoogleAnalytics Cookie クックブック
GoogleAnalytics Cookie クックブック
 

ClickHouse導入事例紹介

  • 2. © Geniee, Inc. 本日の内容 2 ● [1min] 登壇者紹介 ● [3min] ClickHouse導入の経緯 ● [8min] システム構成の紹介 ○ 系全体:Kafka, Flink, ZooKeeper, MySQL, ClickHouse ○ ClickHouse cluster の構成:サーバー構成, テーブル構成 ● [8min] ClickHouse導入による成果・課題 ○ 遭遇した課題とその解決:メモリ, Merge engine, XID overflow ○ 未解決問題たち:MaterializedView, distributed_aggregation_memory_efficient ● [5min] 未来のClickHouseへの要望等 ● [15min] 質疑応答
  • 3. © Geniee, Inc. 登壇者紹介 3 ● 犬伏 貴之 (Inubushi Takayuki) ● R&D本部 基盤技術開発部 SREチーム(インターン) ● ClickHouse歴 9ヶ月 ○ 2019年2月頃 ClickHouseに触れる ○ 2019年4月頃 XID overflow と遭遇 ● 趣味(Hobby) ○ テトリス(Tetris)
  • 4. © Geniee, Inc. 本日の内容 4 ● 登壇者紹介 ● ClickHouse導入の経緯 ● システム構成の紹介 ● ClickHouse導入による成果・課題 ● 未来のClickHouseへの要望等 (Our requests about CH) ● 質疑応答
  • 5. © Geniee, Inc. ClickHouse導入の経緯 5 ● 決め手となった指標 ○ 高速なSELECT ○ 圧縮による高いストレージ効率 ● 2年前時点での状況 ○ MySQLからClickHouseへデータを複製するバッチが動作 画面表示が高速化 ● See also ○ SlideShare: 世界分散配信システムとレポートシステム刷新の話 ○ GENIEEブログ: ClickHouseで...1000倍高速化した話 ○ SlideShare: Report API を支える技術
  • 6. © Geniee, Inc. 本日の内容 6 ● 登壇者紹介 ● ClickHouse導入の経緯 ● システム構成の紹介 ● ClickHouse導入による成果・課題 ● 未来のClickHouseへの要望等 (Our requests about CH) ● 質疑応答
  • 8. © Geniee, Inc. システム構成の紹介[2/4]:ClickHouse cluster 8 ● ClickHouse cluster の構成 ○ 8台の物理サーバーを 4shard × 2replica でクラスター構成 ● 各サーバーの性能 ○ CPU: Intel Xeon Gold 6142 x 2 ○ RAM: 256GB ○ Storage: HDD 18TB (RAID50) ○ Network BW: 10Gbps ○ Network RTT: 150μs ● Software versions ○ ClickHouse: 19.7.3.9 (8 servers) ○ ZooKeeper: 3.4.13 (5 servers)
  • 9. © Geniee, Inc. システム構成の紹介[3/4]:ClickHouse tables 9 ● テーブル構成 ○ Raw(詳細なデータ保持)とMaterialized(部分集計テーブル) ○ それぞれ日付(in JST)単位のテーブルの集合(Merge) ■ 日付単位なのは、再集計を可能にするため ※ 再集計 … ログ生成側、ログ集計側のどちらかが不具合を起こすと集計し直したくなるが、 再集計結果が出るまでは一部誤った結果でも残しておきたい ● カラム数・カラムの型 ○ primary key → 39(Raw), 31(Materialized) ■ 2 DateTime, 15 UInt32, 14 UInt16, 2 UInt8, 1 Int16, 5 String ○ measure → 16(Raw), 16(Materialized) ■ 3 Int32, 13 Int64 (打ち消しのために符号付き数を使用) ※ 打ち消し … SummingMergeTreeでは DELETE ができないので、削除したいデータの primary key に対し、負の measure を INSERT することで値を打ち消して擬似的に削除する
  • 11. © Geniee, Inc. 本日の内容 11 ● 登壇者紹介 ● ClickHouse導入の経緯 ● システム構成の紹介 ● ClickHouse導入による成果・課題 ● 未来のClickHouseへの要望等 (Our requests about CH) ● 質疑応答
  • 12. © Geniee, Inc. ClickHouse導入による成果: 12 ● ◯ 高効率なストレージ ○ MySQLに置いてあるデータと比べキーをかなり増やしているが、 それでもほぼ同程度の容量しか消費していない ● ? Meetupを開催できた ○ 本スライドを作成する工数をもらえた →ClickHouseのドキュメントを読み直す時間を得た ● ✕ テーブル設計を失敗している感がある ○ 日単位で持っている数千のテーブルや、それを束ねるMergeテーブル に飛んで来るクエリが悪さをしている ○ 2年前に「1000倍速く」なったものが「1000倍遅く」戻ったり ※ キーを張っていないカラムに対して GROUP BY をしているのが悪い
  • 13. © Geniee, Inc. ClickHouse導入による成果:良かった機能 13 ● Materialized View ○ Raw に投げると時間がかかる場合に使えるが、柔軟性が課題 ● PREWHERE ○ 条件やクエリにもよるが、3倍ぐらい速くなることが多い ※ PREWHERE内部で関数を呼び出すと早くならないことがあるような気がする ? ● max_memory_usage, _for_user, _for_all_users ○ 誰かの心ないSELECTが系全体を停止させることが減る ● クエリの静的解析をちゃんと頑張っていそう ○ 共通部分式削除とか
  • 14. © Geniee, Inc. ClickHouse導入後の課題:躓いた点 14 ● メモリとの闘い ○ SELECTクエリは場合によって大量のメモリを消費する → max_memory_usage 等で制限した上で、必要な大きなクエリは複 数回のSELECTに分割 ● 突然の Table is in readonly mode との闘い ○ 大量のReplicatedテーブルを保持していると短周期で xid overflow ○ xid overflow の処理に穴があり一部のテーブルに書き込めなくなる → 毎日 clickhouse-server を再起動することでごまかし ● Cannot schedule a taskとの闘い ○ 全期間でのSELECTを行うとConnectionPoolが枯渇する ※ より小さな区間での Merge を作って後で合計してごまかし ● テーブル構造との闘い ○ キーでない列へのSELECTは当然フルスキャンになる ※ ClickHouseは悪くない、我々のテーブル設計の問題
  • 15. © Geniee, Inc. ClickHouse導入後の課題:将来使いたい機能 15 ● merge table function ○ readonly な user は使えないところがつらい ○ set readonly=2 とすれば setting 変更と table function だけ可能 ● distributed_aggregation_memory_efficient setting ○ 少し試したところ数値が合わないところがあり慌てて戻した ● PARTITION feature looks great ○ おそらく導入を決めた時点ではこんなに柔軟ではなかった ○ 日単位でテーブル分けたりしなくても良いかもしれない ※ MaterializedView を考えるとまだ難しいかもしれない ?
  • 16. © Geniee, Inc. 本日の内容 16 ● 登壇者紹介 ● ClickHouse導入の経緯 ● システム構成の紹介 ● ClickHouse導入による成果・課題 ● 未来のClickHouseへの要望等 (Our requests about CH) ● 質疑応答
  • 17. © Geniee, Inc. Our requests about ClickHouse 未来のClickHouseへの要望等 17 ● Allow use of merge table function for readonly users ○ set readonly=2 solves this ● Feature to create complete MView for existing active tables ○ Here “active” means “INSERT continues during POPULATE” ○ Flexible MView creation is essential for our use case ○ Maybe part-based approach is good? ● Provide control on #threads when SELECT on Merge table ○ We have many(>2k) tables in Merge. ● Fix incorrect results when distributed_aggregation_memory_efficient is on ○ It makes response faster, saves network usage, balances loads ● About error log ○ >650MB for each server in 3 months, both system errors and query errors are present and cannot separate easily ○ system.text_log and system.query_log will help
  • 18. © Geniee, Inc. 本日の内容 18 ● 登壇者紹介 ● ClickHouse導入の経緯 ● システム構成の紹介 ● ClickHouse導入による成果・課題 ● 未来のClickHouseへの要望等 (Our requests about CH) ● 質疑応答
  • 19. © Geniee, Inc. 質疑 応答 Q&A time
  • 21. © Geniee, Inc. 参考文献 21 ● https://clickhouse.yandex/docs/en/development/architecture/ ● https://clickhouse.yandex/docs/en/operations/
  • 22. © Geniee, Inc. distributed_aggregation_memory_efficient SELECT banner_id, zone_id, any(ssp_id), toDate(local_interval_start_utc, 'UTC') AS date, 0 AS bid, sum(imp_count) AS impression, sum(click_count) AS click, sum(conversion_cost_nanojpy) AS revenue_jpy, sum(cost_nanojpy) AS cost_jpy, sum(geniee_cost_nanojpy) AS winprice_jpy, sum(geniee_margin_nanojpy) AS geniee_margin_revenue_jpy, sum(vendor_margin_nanojpy) AS vendor_margin_revenue_jpy, sum(agency_margin_nanojpy) AS agency_margin_revenue_jpy, is_rtb_as_yield, any(campaign_currency) FROM buyer.reports_v3 PREWHERE (date = '2019-11-01') AND ((banner_id % 16) = 0) GROUP BY banner_id, zone_id, date, is_rtb_as_yield HAVING (impression != 0) OR (click != 0) OR (revenue_jpy != 0) OR (cost_jpy != 0) OR (winprice_jpy != 0) with distributed_aggregation_memory_efficient = 0: 349589 rows in set. Elapsed: 6.661 sec. Processed 39.54 billion rows, 318.27 GB (5.94 billion rows/s., 47.78 GB/s.) 349589 rows in set. Elapsed: 6.537 sec. Processed 39.54 billion rows, 318.28 GB (6.05 billion rows/s., 48.69 GB/s.) 349589 rows in set. Elapsed: 6.364 sec. Processed 39.54 billion rows, 318.28 GB (6.21 billion rows/s., 50.02 GB/s.) with distributed_aggregation_memory_efficient = 1: 1378 rows in set. Elapsed: 4.290 sec. Processed 39.52 billion rows, 317.87 GB (9.21 billion rows/s., 74.10 GB/s.) 1378 rows in set. Elapsed: 4.327 sec. Processed 39.51 billion rows, 317.51 GB (9.13 billion rows/s., 73.38 GB/s.) 1378 rows in set. Elapsed: 4.323 sec. Processed 39.53 billion rows, 318.04 GB (9.14 billion rows/s., 73.56 GB/s.) 22 Faster, but Results are different