SlideShare a Scribd company logo
1 of 47
Download to read offline
Amazon Redshiftによる
リアルタイム分析サービスの構築
クックパッド株式会社
青木峰郎
ユニークブラウザ数
0万
1,000万
2,000万
3,000万
4,000万
5,000万
2013/4 Q1 Q2 Q3 Q4 2014/4 Q1 Q2 Q3 Q4
PC
スマホ(ブラウザ)
スマホ(アプリ)
フィーチャーフォン
その他
4,404万UB
(2014年4月期 決算説明会資料より)
‣ 単語の検索頻度
‣ 単語の組み合わせ頻度
‣ 現在盛り上がっている
単語
‣ ユーザーの年代や居住
地域を軸とした分析
たべみる
Agenda
1. たべみるのシステム構成
2. データ連携の詳細
3. SQLによるデータ処理
4. データ更新のパターン
たべみるのシステム構成(web)
app
Redshift ELBEC2
システム構成詳細
‣ app: Rails 4 / Ruby 2.1
‣ db: Redshift (dw2.large 12)
目標応答時間
500ms
応答速度向上の施策
1 圧縮
2 sortkey
3 サマリーテーブル
※10ミリ秒単位でチューニングする場合、分散キー(distkey)はほぼ無関係
サマリーテーブルいつ作る?
安心と伝統の
夜間バッチ
Redshift
MySQL
Treasure Data
(Hadoop)
夜間バッチ構成
検索ログ
ユーザーマスター
バッチ
サーバー
単語マスター
file
file
file
生データ 中間データ サマリー
table
table
table
table
table
table
table
table
table
table
データ連携
信頼と実績の
TSV渡し
バッチ
サーバー
TSV
ソースDB
テーブル
Redshift
テーブル
データ連携方式
S3
TSV
PUT COPYexport
‣ フォーマット変換
‣ クレンジング
‣ SQLでできない処理
他の用途では
fluentdによる継続ロードも
サマリーテーブル作成
SQLで加工
(ELT)
ELTのお約束
1 エクスポート禁止
データ移動は遅い
DB外処理は非並列
2 UPDATE禁止
複数回実行しにくい
VACUUMが厄介
3 1行INSERT禁止 COPYかINSERT SELECT
insert select
だけ使え!!
SQLでは書けなかった処理
1 日本語処理 半角→全角変換
2 可変数カラム タブ区切り文字列の分割
ようするに
文字列処理
SQLでも書ける!こんな処理
‣ 単語の組み合わせ生成
‣ 未来の月曜日N週分の生成
‣ テーブルの縦横変換
‣ 移動平均、移動累積和
‣ グループごとのランキングトップN
ジョイン
ジョイン
ジョイン
ウィンドウ関数
ウィンドウ関数
テーブルの縦横変換
log_time num word1 word2 word3
18:00:00 1 おじや
18:03:42 2 大根 煮物
18:19:01 1 ケーキ
18:32:56 3 えび グラタン ▲マカロニ
18:49:23 2 おじや たまご
log_time seq word
18:00:00 1 おじや
18:03:42 1 大根
(同上) 2 煮物
18:19:01 1 ケーキ
18:32:56 1 えび
(同上) 2 グラタン
(同上) 3 ▲マカロニ
18:49:23 1 おじや
(同上) 2 たまご
「横持ち」テーブル 「縦持ち」テーブル
テーブルの縦横変換
seq
1
2
3
4
5
6
transpose_matrix select
log.log_time
, m.seq
, case m.seq
when 1 then log.word1
when 2 then log.word2
when 3 then log.word3
when 4 then log.word4
when 5 then log.word5
when 6 then log.word6
end as word
from
search_log log
inner join transpose_matrix m
on log.num >= m.seq;
グループごとのランキング
user_category_id keyword search_count rank
20 サラダ 235,097 1
20 パスタ 190,413 2
20 もやし 187,999 3
30 なす 321,977 1
30 きゅうり 260,460 2
30 じゃがいも 217,201 3
40 大根 229,324 1
40 ささみ 201,876 2
40 チーズ 179,024 3
50 大根 139,141 1
50 いんげん 110,471 2
グループごとのランキング
user_category_id keyword search_count rank
20 サラダ 235,097 1
20 パスタ 190,413 2
20 もやし 187,999 3
30 なす 321,977 1
30 きゅうり 260,460 2
30 じゃがいも 217,201 3
40 大根 229,324 1
40 ささみ 201,876 2
40 チーズ 179,024 3
50 大根 139,141 1
50 いんげん 110,471 2
グループごとのランキング
user_category_id keyword search_count rank
20 サラダ 235,097 1
20 パスタ 190,413 2
20 もやし 187,999 3
30 なす 321,977 1
30 きゅうり 260,460 2
30 じゃがいも 217,201 3
40 大根 229,324 1
40 ささみ 201,876 2
40 チーズ 179,024 3
50 大根 139,141 1
50 いんげん 110,471 2
グループごとのランキング
select

user_category_id, keyword, search_count,

rank() over (

partition by user_category_id

order by search_count desc

)

from

user_category_search_count;
データ更新パターン
テーブル更新パターン
1 差分更新 更新データのみ追加
2 洗い替え 全行作り直し
3 アトミック洗い替え 洗い替えの変種
パターン1:差分更新
ターゲットテーブルソーステーブル
追加されたデータ
差分
insert into TARGET_TABLE
select … from SOURCE_TABLE
where data_date >= TODAY ;
パターン2:洗い替え
作成
drop table TARGET_TABLE;
create table TARGET_TABLE (…);
insert intoTARGET_TABLE select … from SOURCE_TABLE;
ターゲットテーブルソーステーブル
ターゲット
テーブルソーステーブル 新規テーブル
作成 すり替え
create table t_NEW (…);
insert into t_NEW select … from SOURCE_TABLE;
begin transaction;
alter table TARGET_TABLE rename to t_OLD;
alter table t_NEW rename to TARGET_TABLE;
commit;
パターン3:アトミック洗い替え
応用:アトミックな本番切り替え
targetsource new
作成 すり替え
targetsource new
targetsource new
switch_the_world.sql
更新パターンの使い分け
生データ 中間データ サマリー
table
table
table
table
table
table
table
差分更新 洗い替え
アトミック
洗い替え
まとめ
なぜRedshiftだったのか
1. COOKPADがAWSにあるから
2. マネージドサービスだから
3. 並列処理性能が高いから
4. ウィンドウ関数など高度な機能が実装されているから
5. あるていどオンライン処理にも耐えられるから
Amazon Redshiftによるリアルタイム分析サービスの構築

More Related Content

What's hot

What's hot (20)

ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Amazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオンAmazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオン
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門
 
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
 
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
 
Presto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon AthenaPresto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon Athena
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
データ分析基盤について
データ分析基盤についてデータ分析基盤について
データ分析基盤について
 
Redshift勉強会
Redshift勉強会Redshift勉強会
Redshift勉強会
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 

Viewers also liked

[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
Amazon Web Services Japan
 

Viewers also liked (20)

20170725 black belt_monitoring_on_aws
20170725 black belt_monitoring_on_aws20170725 black belt_monitoring_on_aws
20170725 black belt_monitoring_on_aws
 
(BDT314) A Big Data & Analytics App on Amazon EMR & Amazon Redshift
(BDT314) A Big Data & Analytics App on Amazon EMR & Amazon Redshift(BDT314) A Big Data & Analytics App on Amazon EMR & Amazon Redshift
(BDT314) A Big Data & Analytics App on Amazon EMR & Amazon Redshift
 
Building a Sustainable Data Platform on AWS
Building a Sustainable Data Platform on AWSBuilding a Sustainable Data Platform on AWS
Building a Sustainable Data Platform on AWS
 
[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
[よくわかるクラウドデータベース] リクルートにおけるRedshift導入・活用事例
 
20170726 black belt_stepfunctions
20170726 black belt_stepfunctions20170726 black belt_stepfunctions
20170726 black belt_stepfunctions
 
AWS Black Belt Online Seminar 2017 Amazon Connect
AWS Black Belt Online Seminar 2017 Amazon ConnectAWS Black Belt Online Seminar 2017 Amazon Connect
AWS Black Belt Online Seminar 2017 Amazon Connect
 
(BDT305) Amazon EMR Deep Dive and Best Practices
(BDT305) Amazon EMR Deep Dive and Best Practices(BDT305) Amazon EMR Deep Dive and Best Practices
(BDT305) Amazon EMR Deep Dive and Best Practices
 
AWS Black Belt Online Seminar 2017 AWS Shield
AWS Black Belt Online Seminar 2017 AWS ShieldAWS Black Belt Online Seminar 2017 AWS Shield
AWS Black Belt Online Seminar 2017 AWS Shield
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 
20170621 aws-black belt-ads-sms
20170621 aws-black belt-ads-sms20170621 aws-black belt-ads-sms
20170621 aws-black belt-ads-sms
 
AWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめ
AWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめAWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめ
AWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめ
 
AWS Black Belt Online Seminar 2017 Deployment on AWS
AWS Black Belt Online Seminar 2017 Deployment on AWSAWS Black Belt Online Seminar 2017 Deployment on AWS
AWS Black Belt Online Seminar 2017 Deployment on AWS
 
AWS Black Belt online seminar 2017 Snowball
AWS Black Belt online seminar 2017 SnowballAWS Black Belt online seminar 2017 Snowball
AWS Black Belt online seminar 2017 Snowball
 
AWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-Ray
 
AWS Black Belt Online Seminar 2017 Amazon Aurora
AWS Black Belt Online Seminar 2017 Amazon AuroraAWS Black Belt Online Seminar 2017 Amazon Aurora
AWS Black Belt Online Seminar 2017 Amazon Aurora
 
AWS Black Belt Online Seminar 2017 Amazon GameLift
AWS Black Belt Online Seminar 2017 Amazon GameLiftAWS Black Belt Online Seminar 2017 Amazon GameLift
AWS Black Belt Online Seminar 2017 Amazon GameLift
 
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
 
AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策
 
AWS Black Belt Online Seminar 2017 Amazon EMR
AWS Black Belt Online Seminar 2017 Amazon EMR AWS Black Belt Online Seminar 2017 Amazon EMR
AWS Black Belt Online Seminar 2017 Amazon EMR
 
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
 

Recently uploaded

Recently uploaded (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Amazon Redshiftによるリアルタイム分析サービスの構築