SlideShare a Scribd company logo
1 of 51
PipelineDB とは?
2016/07/22
Stream勉強会
@tamtam180
Agenda
• Self Introduce
• What’s PipelineDB
• What’s Continuous Query
• Continuous Transform/Trigger
• DEMO
• Enterprise Edition
• Tips
Self Introduce
• Twitter: @tamtam180
• Works
– SquareEnix
• PlayOnline, FF-XIV
–Server Programmer
– SmartNews
• Advertising
–Software Engineer
What’s PipelineDB
What’s PipelineDB
• OSS Database (+Enterprise Edition)
– GPLv3
• Support Continuous Query
• on PostgreSQL as extension
– 0.8.x on 9.4, 0.9.x on 9.5
– No special client libraries
• Support probabilistic data structure & algorithm
– Bloom-filter, hyperloglog, Count-Min sketch,
– FSS Top-K, T-Digest
What’s Continuous Query
What’s Continuous Query
• RDB
Timestamp ChannelID CampaignID UserID Sales
2016/06/18	13:41:10 1000 10 100 30
2016/06/18	13:43:15 1000 10 101 20
2016/06/18	13:47:20 1001 11 123 15
2016/06/18	14:10:10 1000 12 100 30
2016/06/19	14:15:30 1002 14 101 20
2016/06/19	15:16:30 1003 11 100 15
2016/06/19	16:17:56 1001 14 123 30
Aggregate
What’s Continuous Query
• RDB
Timestamp ChannelID CampaignID UserID Sales
2016/06/18	13:41:10 1000 10 100 30
2016/06/18	13:43:15 1000 10 101 20
2016/06/18	13:47:20 1001 11 123 15
2016/06/18	14:10:10 1000 12 100 30
2016/06/19	14:15:30 1002 14 101 20
2016/06/19	15:16:30 1003 11 100 15
2016/06/19	16:17:56 1001 14 123 30
Aggregate
SELECT
TO_CHAR(timestamp, ‘YYYY-MM-DD’) as ymd,
campaignId, SUM(sales)
FROM clicks
WHERE
timestamp < NOW() - INTERVAL ’-3 day’
GROUP BY ymd, campaignId
What’s Continuous Query
• PipelineDB
Stream
CV
CV
data record
CREATE STREAM stream_name (
timestamp TIMESTAMP,
channelId BIGINT,
campaignId BIGINT,
userId BIGINT,
sales BIGINT
);
CREATE CONTINUOUS VIEW cv_name WITH(max_age=‘3 days’) AS
SELECT
TO_CHAR(timestamp, ‘YYYY-MM-DD’) as ymd,
campaignId, SUM(sales)
FROM
stream_name
GROUP BY
ymd, campaignId;
What’s Continuous Query
• Continuous Query: STREAM
CREATE STREAM stream_name (
timestamp TIMESTAMP,
channelId BIGINT,
campaignId BIGINT,
userId BIGINT,
sales BIGINT
);
Internal
• Stream
–外部テーブル (foreign table)
–外部サーバ Foreign Server
•pipeline_streams
–Foreign Data Wrapper
• stream_fdw
• Stream Buffer
Internal
STREAM
BUFFER
Query	on
microbatch
Incremental
table	update
HeapTuple
HeapTuple
HeapTuple_
HeapTuple_
HeapTuple_
INSERT	INTO..
Concurrent
circular	buffer
Preallocated block	
of	shared	memory
HeapTuple
{0,1,0,1,1}
WIP
(pokemon go)
Internal
https://wiki.postgresql.org/images/a/ad/
South_Bay_PG_Meetup_2016-03-08_PipelineDB.pdf
What’s Continuous Query
• Continuous Query: STREAM
What’s Continuous Query
• Continuous View
CREATE CONTINUOUS VIEW cv_name AS
SELECT
TO_CHAR(timestamp, ‘YYYY-MM-DD’) as ymd,
campaignId, SUM(sales)
FROM
stream_name
WHERE
arrival_timestamp > clock_timestamp() - interval ‘3 days’
GROUP BY
ymd, campaignId;
Deprecated
What’s Continuous Query
• Continuous View
CREATE CONTINUOUS VIEW cv_name WITH(max_age=‘3 days’)
AS
SELECT
TO_CHAR(timestamp, ‘YYYY-MM-DD’) as ymd,
campaignId, SUM(sales)
FROM
stream_name
GROUP BY
ymd, campaignId;
What’s Continuous Query
What’s Continuous Query
• Data Insert
INSERT INTO stream_name (timestamp, campaignId, sales)
VALUES
(‘2016-07-22 11:00:01’, 100, 25),
(‘2016-07-22 11:00:02’, 101, 20),
(‘2016-07-22 11:00:03’, 101, 22)
;
What’s Continuous Query
• Also use COPY statement
COPY stream_name (timestamp, campaignId, sales)
FROM ‘/some/path/file.csv’
COPY stream_name (timestamp, campaignId, sales)
FROM STDIN
What’s Continuous Query
On SmartNews Ads
On SmartNews Ads
APP
FluentdFILE
Kinesis
Consumer
Pipeline
DB
JSON
JSON
Chartio
Console
On SmartNews Ads
• 1 Column JSONB
CREATE STREAM imp_stream ( item JSONB );
CREATE STREAM vimp_stream ( item JSONB );
CREATE STREAM click_stream ( item JSONB );
On SmartNews Ads
• Create Counter table per stream
CREATE CONTINUOUS VIEW imp_count
WITH(max_age='7 day', step_factor=1)
AS
SELECT
(TO_CHAR(TO_TIMESTAMP((item::jsonb->>'timestamp')::bigint),
'YYYY-MM-DD HH24:00:00'))::timestamp as dt,
COUNT(*) as cnt
FROM imp_stream
GROUP BY dt;
STREAMに紐付くCVが1つも無いとINSERT時に
警告が出まくる
On SmartNews Ads
• この状態を作っておけば
STREAM
Consumer
STREAM
CV-1
CV-1
JSON
On SmartNews Ads
• Consumer等は弄る必要が無く、
• 後はCVを定義していくだけ
STREAM
Consumer
STREAM
CV-1
CV-1
CV-3
CV-2
JSON
probabilistic data structure
HLL
HLL
• HyperLogLog
– 異なり数を数えます
– 推定値
– ユニークユーザの算出
– HLLは合成ができる
https://stefanheule.com/papers/edbt13-hyperloglog.pdf
HLL
• Distinct count => HLLで算出
CREATE CONTINUOUS VIEW imp_count
WITH(max_age='7 day', step_factor=1)
AS
SELECT
(TO_CHAR(TO_TIMESTAMP((item::jsonb->>'timestamp')::bigint),
'YYYY-MM-DD HH24:00:00'))::timestamp as dt,
COUNT(distinct (item->>'uuid')::text) as uuid_ucnt
FROM imp_stream
GROUP BY dt;
exact_count_distinctを使えば正確な値も算出
できる
HLL
• HyperLogLogの合成
• よくある問題
– 1時間単位のユニークユーザーが欲しい
– 1日単位のユニークユーザーが欲しい
– 任意の期間のユニークユーザーが欲しい
– 複数リージョンにオフィスがあるので、Timezoneを考慮して出
して欲しい(例: JSTとPST)
HLL
• 1時間単位でHLLのまま保持
CREATE CONTINUOUS VIEW test_cv WITH(max_age='30 days')
AS
SELECT
to_char(to_timestamp((item->>'timestamp')::bigint + 3600*9), 'YYYY-
MM-DD') as ymd_jst,
date_part('hour', to_timestamp((item->>'timestamp')::bigint +
3600*9))::integer as h_jst,
hll_agg((item->>'uuid')::text) as uuid_agg,
FROM test_stream
GROUP BY
ymd_jst, h_jst;
HLL
• SELECT時にMergeする
SELECT
ymd_jst, h_jst,
hll_cardinality(combine(uuid_agg)) as ucnt
FROM test_cv
GROUP BY ymd_jst, h_jst
ORDER BY ymd_jst DESC, h_jst DESC
LIMIT 24 * 3;
SELECT
ymd_jst,
hll_cardinality(combine(uuid_agg)) as ucnt
FROM test_cv
GROUP BY ymd_jst
ORDER BY ymd_jst DESC
LIMIT 24 * 3;
HOURLY
DAILY
HLL
Continuous Transform
Continuous Transform
• Streamに入ってきたデータを処理して
別のStreamにコピーする
– フィルタリング
– データの整形
– 何もしないで複製
Continuous Transform
• Streamに入ってきたデータを処理して
別のStreamにコピーする
Stream StreamContinuous
Transform
CVCV
Continuous Transform
• TRANSFORMを定義する
CREATE CONTINUOUS TRANSFORM xxx_etl AS
SELECT item::jsonb
FROM xxx_stream
WHERE
to_timestamp((item->'obj'-
>>'timestamp_sec')::bigint) > clock_timestamp() -
interval '7 days’
AND (item->'obj'->>'flag')::bigint = 1
THEN EXECUTE PROCEDURE
pipeline_stream_insert('xxx_stream_etl')
pipeline_stream_insert
は組み込みで定義されている
自分でも定義できる
Continuous Transform
• CTを2つ定義すればStreamのコピーができる
Stream StreamContinuous
Transform
Continuous
Transform
Stream
Continuous Trigger
Continuous Trigger
• Trigger
– いわゆるトリガーです
– あるキャンペーンの消化金額が日予算を超えたらアラートを通知
– Impression SmoothingがBehindしている時に通知
• とかが出来る
– 通知
• 別のテーブルにレコードを挿入
• HTTP通信をしてWebHookを叩く
• EMAILを投げる(MailGunとか使う)
サンプルを作る時間が無かった!!
padhoc
padhoc
• ちょっと確認したい場合に、毎回CVを作るのは大変
• padhocコマンドを使うと、インスタントに確認できる
• 設定に` continuous_queries_adhoc_enabled = true` が必要
– デフォルトはなぜか false
• padhoc -c “SELECT count(*) FROM stream”
• padhoc -c "select (item->>'ip')::text as ip, count(*) from imp_stream group by ip" -d
pipeline
Enterprise Edition
Enterprise Edition
• NDAなんだ。すまない。
• Extensionとして提供
• 出来る事
–クラスタ
•READ最適化(デフォルト)
•WRITE最適化
–HA
Tips
Tips: timestamp
• STREAM ó CTはTransactionがずっとかかって
いることになっている
–clock_timestamp()
–arrival_timestamp
–now()
Tips: timestamp
• clock_timestamp()
• Only one time in statement
Current date and time
(changes during statement execution)
ERROR: clock_timestamp() may only appear
once in a WHERE clause
Tips
• 他にもTipsはあるけど、
気になったら直接聞いてください。
We are hiring!
• SmartNewsではエンジニアを募集しているみたいです
–広告エンジニア
–フロントエンドエンジニア
–iOS/Androidエンジニア
–プロダクティビティエンジニア
–機械学習/自然言語処理エンジニア
–などなど
• http://about.smartnews.com/ja/careers/
ランチ
ありがとうございました。

More Related Content

What's hot

fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
Yohei Azekatsu
 

What's hot (20)

噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
Modern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured StreamingModern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured Streaming
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Evolution of Impala #hcj2014
Evolution of Impala #hcj2014
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 

Viewers also liked

Viewers also liked (8)

Pm
PmPm
Pm
 
fluent-plugin-norikra #fluentdcasual
fluent-plugin-norikra #fluentdcasualfluent-plugin-norikra #fluentdcasual
fluent-plugin-norikra #fluentdcasual
 
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
 
AWS管理を自動化する奥義
AWS管理を自動化する奥義AWS管理を自動化する奥義
AWS管理を自動化する奥義
 
How to extract valueable information from real time data feeds
How to extract valueable information from real time data feedsHow to extract valueable information from real time data feeds
How to extract valueable information from real time data feeds
 
Stream Processing in SmartNews #jawsdays
Stream Processing in SmartNews #jawsdaysStream Processing in SmartNews #jawsdays
Stream Processing in SmartNews #jawsdays
 
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
 
地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI
 

Similar to PipelineDBとは?

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニング
Shin Matsumoto
 
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigiComplex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
SATOSHI TAGOMORI
 

Similar to PipelineDBとは? (20)

Atc15_reading_networking_session
Atc15_reading_networking_sessionAtc15_reading_networking_session
Atc15_reading_networking_session
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側
 
MariaDB ColumnStore ベンチマークしちゃいませんか?
MariaDB ColumnStore ベンチマークしちゃいませんか?MariaDB ColumnStore ベンチマークしちゃいませんか?
MariaDB ColumnStore ベンチマークしちゃいませんか?
 
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソースストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介
 
クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニング
 
ログにまつわるエトセトラ
ログにまつわるエトセトラログにまつわるエトセトラ
ログにまつわるエトセトラ
 
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
論文輪読: Coordinated and Efficient Huge Page Management with Ingens論文輪読: Coordinated and Efficient Huge Page Management with Ingens
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
 
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigiComplex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
Tableauダッシュボードのパフォーマンスベストプラクティス
TableauダッシュボードのパフォーマンスベストプラクティスTableauダッシュボードのパフォーマンスベストプラクティス
Tableauダッシュボードのパフォーマンスベストプラクティス
 
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
 
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
 
ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
 
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
 

More from tamtam180 (7)

Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
 
Japanese font test
Japanese font testJapanese font test
Japanese font test
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 

PipelineDBとは?