SlideShare a Scribd company logo
1 of 49
Download to read offline
10 Reasons To Start
Your Analytics Project
with PostgreSQL
Satoshi Nagayasu
@snaga
HKOSCon 2016
Agenda
• Collecting Data / Database Federation
• Building Data Warehouse and Data Mart
• Writing Queries / SQL Features
• Performance
• In-Database Analytics
Collecting Data / Database
Federation
Foreign Data Wrapper
Unlogged Table
Foreign Data Wrapper
• Connects external data sources (RDBMS, NoSQL, files,
etc) to the PostgreSQL executor.
• Allows SELECT/INSERT/UPDATE/DELETE operations
for external tables.
PostgreSQL
Oracle
MySQL
HDFS
https://wiki.postgresql.org/wiki/Foreign_data_wrappers
Unlogged Table
• Does not record XLOG.
• Has better performance compared to regular
table.
• Will be truncated after crash
recovery.
http://pgsnaga.blogspot.jp/2011/10/data-loading-into-unlogged-tables-and.html
Building Data Warehouse
and Data Mart
Materialized Views
Transactional DDLs
Materialized View
• Defines a view with caching records.
• Allows to avoid running complicated queries and
aggregations every time.
• Requires updating cache by the users.
Table
View
Table Table
Materialized
View
Table
Query Query
Cache
Transactional DDLs
• Most of DDLs can be performed in transaction in
PostgreSQL.
• Schema can be modified with keeping atomicity
even online. (commit or rollback)
• Transactional DDLs would help DBAs manage
their schema easier.
Writing Queries / SQL
Features
Rich SQL features
Compatibility with SQL standard
Writing Queries / SQL Features
• Rich SQL features
– Subqueries
– WITH clauses (Common Table Expressions, CTEs)
– Many aggregation functions
– Window functions
• JSON support
• Compatibility with the SQL standard
WITH clause
• Defines a temporary table for a query.
• May make a better performance compared to
using the same subquery more than once.
WITH foo AS (
SELECT ... FROM ... GROUP BY ...
)
SELECT ... FROM foo WHERE ...
UNION ALL
SELECT ... FROM foo WHERE ...;
https://www.postgresql.org/docs/9.5/static/queries-with.html
Many Aggregations
• New in 9.4
– percentile_cont()
– percentile_disc()
– mode()
– rank()
– dense_rank()
– percent_rank()
– cume_dist()
• New in 9.5
– ROLLUP()
– CUBE()
– GROUPING SETS()
https://www.postgresql.org/docs/9.5/static/functions-aggregate.html
ROLLUP
• Calculates total/subtotal values
CUBE
• Calculates for all combinations of the
specified columns
GROUPING SETS
• Runs multiple GROUP BY queries at once
Two GROUP BYs
at once.
JSON data type
testdb=# create table t1 ( j jsonb );
CREATE TABLE
testdb=# insert into t1 values ('{ "key1": "value1", "key2":
"value2" }');
INSERT 0 1
testdb=# select * from t1;
j
--------------------------------------
{"key1": "value1", "key2": "value2"}
(1 row)
testdb=# select j->>'key2' key2 from t1;
key2
--------
value2
(1 row)
JSON data type
testdb=# select n_nationkey,n_name from nation where
n_nationkey = 12;
n_nationkey | n_name
-------------+---------------------------
12 | JAPAN
(1 row)
testdb=# select jsonb_build_object('n_nationkey', n_nationkey,
'n_name', n_name) from nation where n_nationkey = 12;
jsonb_build_object
------------------------------------------------------------
{"n_name": "JAPAN ", "n_nationkey": 12}
(1 row)
JSON data type
Operator Description
9.4
-> Get an element by key as a JSON object
->> Get an element by key as a text object
#> Get an element by path as a JSON object
#>> Get an element by path as a text object
<@, @> Evaluate whether a JSON object contains a key/value pair
? Evaluate whether a JSON object contains a key or a value
?| Evaluate whether a JSON object contains ANY of keys or values
?& Evaluate whether a JSON object contains ALL of keys or values
9.5
|| Insert or Update an element to a JSON object
- Delete an element by key from a JSON object
#- Delete an element by path from a JSON object
http://www.postgresql.org/docs/9.5/static/functions-json.html
JSON data type
• Allows to collect data without defining schema.
• “Schema-less”, “Schema on Read” or “Schema-
later”.
• Still accessible with SQL.
JSON
Data Type
Fluentd
pg-Json plugin
View
(Schema)
App
App
Fluentd
Performance
3 types of Join
Full text search (n-gram)
Table Partition
BRIN Index
Table Sample
Parallel Queries
3 types of Join
• Nested Loop (NL) Join
– Works good when joining small number of records
between tables with indexes.
• Merge Join
• Hash Join
– Works better than NL when joining large number of
records between large tables.
Full-text search (n-gram)
• Splits a text into N-char tokens and build an index.
– Pg_trgm: Tri-gram (3-char)
– Pg_bigm: Bi-gram (2-char)
• CJK has lots of 2-char words, so Bi-gram may be
useful rather than Tri-gram.
– CJK: Chinese, Japanese and Korean.
Pg_trgm: https://www.postgresql.org/docs/9.5/static/pgtrgm.html
Pg_bigm: http://pgbigm.osdn.jp/index_en.html
Pg_bigm performance
• Wikipedia title data (2,789,266 records)
– https://dumps.wikimedia.org/zhwiki/20160601/
– zhwiki-20160601-pages-articles-multistream-index.txt.bz2
zhwikidb=> select * from zhwiki_index where title like '%香港%';
id1 | id2 | title
----------+-------+----------------------------------------
5693863 | 2087 | 香港特別行政區基本法第二十三條
11393231 | 4323 | 香港特别行政区
12830042 | 5085 | 香港大学列表
14349335 | 6088 | 香港行政区划
14349335 | 6090 | 香港行政區劃
14349335 | 6091 | 香港十八区
14349335 | 6092 | 香港十八區
16084672 | 7168 | 香港兒童文學作家
18110426 | 8206 | 北區 (香港)
18110426 | 8236 | 東區 (香港)
19537078 | 9528 | 香港專業教育學院
19537078 | 9567 | 香港中文大學
Pg_bigm performance
Aggregate (actual time=481.512..481.541 rows=1 loops=1)
-> Seq Scan on zhwiki_index (actual time=1.458..478.326 rows=317 loops=1)
Filter: (title ~~ '%香港電影%'::text)
Rows Removed by Filter: 2788949
Planning time: 0.125 ms
Execution time: 481.654 ms
(6 rows)
select count(*) from zhwiki_index
where title like '%香港電影%';
Pg_bigm performance
Aggregate (actual time=1.790..1.792 rows=1 loops=1)
-> Bitmap Heap Scan on zhwiki_index (actual time=0.299..1.225 rows=317
loops=1)
Recheck Cond: (title ~~ '%香港電影%'::text)
Rows Removed by Index Recheck: 1
Heap Blocks: exact=191
-> Bitmap Index Scan on zhwiki_index_title_idx (actual
time=0.258..0.258 rows=318 loops=1)
Index Cond: (title ~~ '%香港電影%'::text)
Planning time: 0.103 ms
Execution time: 1.833 ms
(9 rows)
select count(*) from zhwiki_index
where title like '%香港電影%';
481.6ms → 1.8ms.
200x faster than a regular LIKE.
Table Partition
• Table Partitioning by Range or List
– Called “Constraint Exclusion”
• Does not scan unnecessary partitions
– Determined by the “constraints”.
• Is able to eliminate “full table scan” for large tables
entirely.
https://www.postgresql.org/docs/9.5/static/ddl-partitioning.html
BRIN Index
• Block Range INdex (New in 9.5)
– Holds "summary“ data, instead of raw data.
– Reduces index size tremendously.
– Also reduces creation/maintenance cost.
– Needs extra tuple fetch to get the exact record.
0
50,000
100,000
150,000
200,000
250,000
300,000
Btree BRIN
Elapsedtime(ms)
Index Creation
0
50,000
100,000
150,000
200,000
250,000
300,000
Btree BRIN
NumberofBlocks
Index Size
0
2
4
6
8
10
12
14
16
18
Btree BRIN
Elapsedtime(ms)
Select 1 record
https://gist.github.com/snaga/82173bd49749ccf0fa6c
BRIN Index
• Structure of BRIN Index
Table File
Block Range 1 (128 Blocks)
Block Range 2
Block Range 3
Block
Range
Min. Value Max. Value
1 1992-01-02 1992-01-28
2 1992-01-27 1992-02-08
3 1992-02-08 1992-02-16
… … …
Holds only min/max values
for “Block Ranges”,
128 blocks each.
(in case a date
column)
TABLESAMPLE
• Allows to get approximate results for aggregations by
sampling.
• BERNOULLI
– Accurate
– Sample by Tuple
• SYSTEM
– Performance
– Sample by Block
http://blog.2ndquadrant.com/tablesample-in-postgresql-9-5-2/
TABLESAMPLE
• Calculating the average of total price.
– The actual value and the approximate ones
TABLESAMPLE
Without TABLESAMPLE
1787ms
SYSTEM Sampl.
22ms
BERNOULLI Sampl.
405ms
Parallel Queries
• The leader process cooperates with those worker
processes for:
– Sequential scan
– Joins (Nested Loop & Hash)
– Aggregations
• Will be shipped with 9.6
– 9.6 is beta2 as of today
Leader
Worker Worker
Client
Data
Read &
Examine
Query
Result
Launch & Gather
Parallel Aggregation
Performance & Scalability
• count(*) on 30M rows
– Shows a good parallel scalability
In-Database Analytics
User Defined Functions
Apache MADlib
In-Database Analytics
• In-Database Analytics?
– Performs analytics workload in the database
without pulling the data out of the server.
• Advantages of In-Database Analytics
– No need to move “BigData” between server and
client for analytics.
– Higher performance hardware resources (CPU,
memory, storage) compared to client PCs.
In-Database Analytics
• User defined functions
– PL/Python, PL/R, PL/v8, ... or C lang.
– Allow you to run (almost) any logics within the
database.
• Apache MADlib
– Machine Learning Library for PostgreSQL
UDF by Python
CREATE OR REPLACE FUNCTION dumpenv(OUT text, OUT text)
RETURNS SETOF record
AS $$
import os
for e in os.environ:
plpy.notice(str(e) + ": " + os.environ[e])
yield(e, os.environ[e])
$$ LANGUAGE plpythonu;
UDF by Python
CREATE OR REPLACE FUNCTION dumpenv(OUT text, OUT text)
RETURNS SETOF record
AS $$
import os
for e in os.environ:
plpy.notice(str(e) + ": " + os.environ[e])
yield(e, os.environ[e])
$$ LANGUAGE plpythonu;
testdb=# select * from dumpenv() order by 1 limit 10;
column1 | column2
--------------------+-----------------------
G_BROKEN_FILENAMES | 1
HISTCONTROL | ignoredups
HISTSIZE | 1000
HOME | /home/snaga
HOSTNAME | localhost.localdomain
LANG | ja_JP.UTF-8
LC_COLLATE | C
LC_CTYPE | C
LC_MESSAGES | C
LC_MONETARY | C
(10 rows)
Apache MADlib
• An Open Source Machine Learning Library
– Can run in PostgreSQL, Greenplum Database and
Apache HAWQ.
– Supports many ML algorithms.
http://madlib.incubator.apache.org/
Others
Strict type checking and
constraints.
Industry Standard Interface (for
BI tools)
Others
• Strict type checking and constraints.
– Avoid “Garbage in, garbage out.”
• Industry Standard Interface (for BI tools)
– ODBC, JDBC
Summary
• PostgreSQL has already had lots of features that
help your analytics project
– In terms of productivity and performance.
• And more “BigData” features are coming in the
future release.
– Parallel query must be a big-shot.
• Let’s start your analytic project with PostgreSQL
and join our community. 
– PostgreSQL 9.6 beta2 is available now!
Resources
• http://www.postgresql.org
• http://wiki.postgresql.org
• http://planet.postgresql.org
• http://pgcon.org
pgDay Asia 2016
• pgDay Asia 2016 / FOSSASIA 2016
– March 17-19 in Singapore
• Speakers:
– 19+ speakers from 9 countries
• Sessions:
– 19 Regular Sessions.
– Plus, lightning talks
• Attendees:
– Around 100 attendees
pgDay Asia 2017
• FOSSASIA 2017 (March, 2017)
– Probably, the same format, in the same season, in the
same region.
• Do not miss the next one!
– Will be better and bigger. 
• Join us at:
– http://pgday.asia
– https://www.facebook.com/pgdayasia
Q&A

More Related Content

What's hot

How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PostgreSQL-Consulting
 

What's hot (20)

PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
GPGPU Accelerates PostgreSQL (English)
GPGPU Accelerates PostgreSQL (English)GPGPU Accelerates PostgreSQL (English)
GPGPU Accelerates PostgreSQL (English)
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeology
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando Patroni
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)
 
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richa...
 
PGConf.ASIA 2019 Bali - AppOS: PostgreSQL Extension for Scalable File I/O - K...
PGConf.ASIA 2019 Bali - AppOS: PostgreSQL Extension for Scalable File I/O - K...PGConf.ASIA 2019 Bali - AppOS: PostgreSQL Extension for Scalable File I/O - K...
PGConf.ASIA 2019 Bali - AppOS: PostgreSQL Extension for Scalable File I/O - K...
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Learning postgresql
Learning postgresqlLearning postgresql
Learning postgresql
 
pgconfasia2016 plcuda en
pgconfasia2016 plcuda enpgconfasia2016 plcuda en
pgconfasia2016 plcuda en
 
PostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldPostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized World
 
PostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesPostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major Features
 
ELK: Moose-ively scaling your log system
ELK: Moose-ively scaling your log systemELK: Moose-ively scaling your log system
ELK: Moose-ively scaling your log system
 
PostgreSQL replication
PostgreSQL replicationPostgreSQL replication
PostgreSQL replication
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
 
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
 
Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우
 

Viewers also liked (6)

Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
AWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster RecoveryAWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster Recovery
 
AWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWS
 
AWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorksAWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorks
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
 

Similar to 10 Reasons to Start Your Analytics Project with PostgreSQL

From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
DataStax
 
PostgreSQL 9.0 & The Future
PostgreSQL 9.0 & The FuturePostgreSQL 9.0 & The Future
PostgreSQL 9.0 & The Future
Aaron Thul
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
Paul Chao
 

Similar to 10 Reasons to Start Your Analytics Project with PostgreSQL (20)

Parquet performance tuning: the missing guide
Parquet performance tuning: the missing guideParquet performance tuning: the missing guide
Parquet performance tuning: the missing guide
 
Apache Drill talk ApacheCon 2018
Apache Drill talk ApacheCon 2018Apache Drill talk ApacheCon 2018
Apache Drill talk ApacheCon 2018
 
Cassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A ComparisonCassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A Comparison
 
Postgresql Database Administration Basic - Day2
Postgresql  Database Administration Basic  - Day2Postgresql  Database Administration Basic  - Day2
Postgresql Database Administration Basic - Day2
 
What's New In PostgreSQL 9.4
What's New In PostgreSQL 9.4What's New In PostgreSQL 9.4
What's New In PostgreSQL 9.4
 
QuestDB: ingesting a million time series per second on a single instance. Big...
QuestDB: ingesting a million time series per second on a single instance. Big...QuestDB: ingesting a million time series per second on a single instance. Big...
QuestDB: ingesting a million time series per second on a single instance. Big...
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDs
 
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
 
MySQL 5.7 in a Nutshell
MySQL 5.7 in a NutshellMySQL 5.7 in a Nutshell
MySQL 5.7 in a Nutshell
 
Cassandra training
Cassandra trainingCassandra training
Cassandra training
 
Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014
 
Perl Programming - 04 Programming Database
Perl Programming - 04 Programming DatabasePerl Programming - 04 Programming Database
Perl Programming - 04 Programming Database
 
PostgreSQL as an Alternative to MSSQL
PostgreSQL as an Alternative to MSSQLPostgreSQL as an Alternative to MSSQL
PostgreSQL as an Alternative to MSSQL
 
Oracle Query Optimizer - An Introduction
Oracle Query Optimizer - An IntroductionOracle Query Optimizer - An Introduction
Oracle Query Optimizer - An Introduction
 
PostgreSQL 9.0 & The Future
PostgreSQL 9.0 & The FuturePostgreSQL 9.0 & The Future
PostgreSQL 9.0 & The Future
 
Fast federated SQL with Apache Calcite
Fast federated SQL with Apache CalciteFast federated SQL with Apache Calcite
Fast federated SQL with Apache Calcite
 
Using existing language skillsets to create large-scale, cloud-based analytics
Using existing language skillsets to create large-scale, cloud-based analyticsUsing existing language skillsets to create large-scale, cloud-based analytics
Using existing language skillsets to create large-scale, cloud-based analytics
 
2016 feb-23 pyugre-py_mongo
2016 feb-23 pyugre-py_mongo2016 feb-23 pyugre-py_mongo
2016 feb-23 pyugre-py_mongo
 
Using MongoDB and Python
Using MongoDB and PythonUsing MongoDB and Python
Using MongoDB and Python
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
 

More from Satoshi Nagayasu

映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論
Satoshi Nagayasu
 
統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定
Satoshi Nagayasu
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer Management
Satoshi Nagayasu
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価
Satoshi Nagayasu
 

More from Satoshi Nagayasu (20)

データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
Oracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始めOracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始め
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性
 
pgDay Asia 2016 & 2017
pgDay Asia 2016 & 2017pgDay Asia 2016 & 2017
pgDay Asia 2016 & 2017
 
A Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was bornA Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was born
 
データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)
 
[WIP] pgDay Asia 2016
[WIP] pgDay Asia 2016[WIP] pgDay Asia 2016
[WIP] pgDay Asia 2016
 
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 SingaporePostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
 
PostgreSQL 9.4
PostgreSQL 9.4PostgreSQL 9.4
PostgreSQL 9.4
 
PostgreSQL Community in Japan
PostgreSQL Community in JapanPostgreSQL Community in Japan
PostgreSQL Community in Japan
 
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
 
映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論
 
統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定
 
PgAccelerator
PgAcceleratorPgAccelerator
PgAccelerator
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer Management
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価
 
20040228 Hokkaido 1
20040228 Hokkaido 120040228 Hokkaido 1
20040228 Hokkaido 1
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

10 Reasons to Start Your Analytics Project with PostgreSQL

  • 1. 10 Reasons To Start Your Analytics Project with PostgreSQL Satoshi Nagayasu @snaga HKOSCon 2016
  • 2. Agenda • Collecting Data / Database Federation • Building Data Warehouse and Data Mart • Writing Queries / SQL Features • Performance • In-Database Analytics
  • 3. Collecting Data / Database Federation Foreign Data Wrapper Unlogged Table
  • 4. Foreign Data Wrapper • Connects external data sources (RDBMS, NoSQL, files, etc) to the PostgreSQL executor. • Allows SELECT/INSERT/UPDATE/DELETE operations for external tables. PostgreSQL Oracle MySQL HDFS https://wiki.postgresql.org/wiki/Foreign_data_wrappers
  • 5. Unlogged Table • Does not record XLOG. • Has better performance compared to regular table. • Will be truncated after crash recovery. http://pgsnaga.blogspot.jp/2011/10/data-loading-into-unlogged-tables-and.html
  • 6. Building Data Warehouse and Data Mart Materialized Views Transactional DDLs
  • 7. Materialized View • Defines a view with caching records. • Allows to avoid running complicated queries and aggregations every time. • Requires updating cache by the users. Table View Table Table Materialized View Table Query Query Cache
  • 8. Transactional DDLs • Most of DDLs can be performed in transaction in PostgreSQL. • Schema can be modified with keeping atomicity even online. (commit or rollback) • Transactional DDLs would help DBAs manage their schema easier.
  • 9. Writing Queries / SQL Features Rich SQL features Compatibility with SQL standard
  • 10. Writing Queries / SQL Features • Rich SQL features – Subqueries – WITH clauses (Common Table Expressions, CTEs) – Many aggregation functions – Window functions • JSON support • Compatibility with the SQL standard
  • 11. WITH clause • Defines a temporary table for a query. • May make a better performance compared to using the same subquery more than once. WITH foo AS ( SELECT ... FROM ... GROUP BY ... ) SELECT ... FROM foo WHERE ... UNION ALL SELECT ... FROM foo WHERE ...; https://www.postgresql.org/docs/9.5/static/queries-with.html
  • 12. Many Aggregations • New in 9.4 – percentile_cont() – percentile_disc() – mode() – rank() – dense_rank() – percent_rank() – cume_dist() • New in 9.5 – ROLLUP() – CUBE() – GROUPING SETS() https://www.postgresql.org/docs/9.5/static/functions-aggregate.html
  • 14. CUBE • Calculates for all combinations of the specified columns
  • 15. GROUPING SETS • Runs multiple GROUP BY queries at once Two GROUP BYs at once.
  • 16. JSON data type testdb=# create table t1 ( j jsonb ); CREATE TABLE testdb=# insert into t1 values ('{ "key1": "value1", "key2": "value2" }'); INSERT 0 1 testdb=# select * from t1; j -------------------------------------- {"key1": "value1", "key2": "value2"} (1 row) testdb=# select j->>'key2' key2 from t1; key2 -------- value2 (1 row)
  • 17. JSON data type testdb=# select n_nationkey,n_name from nation where n_nationkey = 12; n_nationkey | n_name -------------+--------------------------- 12 | JAPAN (1 row) testdb=# select jsonb_build_object('n_nationkey', n_nationkey, 'n_name', n_name) from nation where n_nationkey = 12; jsonb_build_object ------------------------------------------------------------ {"n_name": "JAPAN ", "n_nationkey": 12} (1 row)
  • 18. JSON data type Operator Description 9.4 -> Get an element by key as a JSON object ->> Get an element by key as a text object #> Get an element by path as a JSON object #>> Get an element by path as a text object <@, @> Evaluate whether a JSON object contains a key/value pair ? Evaluate whether a JSON object contains a key or a value ?| Evaluate whether a JSON object contains ANY of keys or values ?& Evaluate whether a JSON object contains ALL of keys or values 9.5 || Insert or Update an element to a JSON object - Delete an element by key from a JSON object #- Delete an element by path from a JSON object http://www.postgresql.org/docs/9.5/static/functions-json.html
  • 19. JSON data type • Allows to collect data without defining schema. • “Schema-less”, “Schema on Read” or “Schema- later”. • Still accessible with SQL. JSON Data Type Fluentd pg-Json plugin View (Schema) App App Fluentd
  • 20. Performance 3 types of Join Full text search (n-gram) Table Partition BRIN Index Table Sample Parallel Queries
  • 21. 3 types of Join • Nested Loop (NL) Join – Works good when joining small number of records between tables with indexes. • Merge Join • Hash Join – Works better than NL when joining large number of records between large tables.
  • 22. Full-text search (n-gram) • Splits a text into N-char tokens and build an index. – Pg_trgm: Tri-gram (3-char) – Pg_bigm: Bi-gram (2-char) • CJK has lots of 2-char words, so Bi-gram may be useful rather than Tri-gram. – CJK: Chinese, Japanese and Korean. Pg_trgm: https://www.postgresql.org/docs/9.5/static/pgtrgm.html Pg_bigm: http://pgbigm.osdn.jp/index_en.html
  • 23. Pg_bigm performance • Wikipedia title data (2,789,266 records) – https://dumps.wikimedia.org/zhwiki/20160601/ – zhwiki-20160601-pages-articles-multistream-index.txt.bz2 zhwikidb=> select * from zhwiki_index where title like '%香港%'; id1 | id2 | title ----------+-------+---------------------------------------- 5693863 | 2087 | 香港特別行政區基本法第二十三條 11393231 | 4323 | 香港特别行政区 12830042 | 5085 | 香港大学列表 14349335 | 6088 | 香港行政区划 14349335 | 6090 | 香港行政區劃 14349335 | 6091 | 香港十八区 14349335 | 6092 | 香港十八區 16084672 | 7168 | 香港兒童文學作家 18110426 | 8206 | 北區 (香港) 18110426 | 8236 | 東區 (香港) 19537078 | 9528 | 香港專業教育學院 19537078 | 9567 | 香港中文大學
  • 24. Pg_bigm performance Aggregate (actual time=481.512..481.541 rows=1 loops=1) -> Seq Scan on zhwiki_index (actual time=1.458..478.326 rows=317 loops=1) Filter: (title ~~ '%香港電影%'::text) Rows Removed by Filter: 2788949 Planning time: 0.125 ms Execution time: 481.654 ms (6 rows) select count(*) from zhwiki_index where title like '%香港電影%';
  • 25. Pg_bigm performance Aggregate (actual time=1.790..1.792 rows=1 loops=1) -> Bitmap Heap Scan on zhwiki_index (actual time=0.299..1.225 rows=317 loops=1) Recheck Cond: (title ~~ '%香港電影%'::text) Rows Removed by Index Recheck: 1 Heap Blocks: exact=191 -> Bitmap Index Scan on zhwiki_index_title_idx (actual time=0.258..0.258 rows=318 loops=1) Index Cond: (title ~~ '%香港電影%'::text) Planning time: 0.103 ms Execution time: 1.833 ms (9 rows) select count(*) from zhwiki_index where title like '%香港電影%'; 481.6ms → 1.8ms. 200x faster than a regular LIKE.
  • 26. Table Partition • Table Partitioning by Range or List – Called “Constraint Exclusion” • Does not scan unnecessary partitions – Determined by the “constraints”. • Is able to eliminate “full table scan” for large tables entirely. https://www.postgresql.org/docs/9.5/static/ddl-partitioning.html
  • 27. BRIN Index • Block Range INdex (New in 9.5) – Holds "summary“ data, instead of raw data. – Reduces index size tremendously. – Also reduces creation/maintenance cost. – Needs extra tuple fetch to get the exact record. 0 50,000 100,000 150,000 200,000 250,000 300,000 Btree BRIN Elapsedtime(ms) Index Creation 0 50,000 100,000 150,000 200,000 250,000 300,000 Btree BRIN NumberofBlocks Index Size 0 2 4 6 8 10 12 14 16 18 Btree BRIN Elapsedtime(ms) Select 1 record https://gist.github.com/snaga/82173bd49749ccf0fa6c
  • 28. BRIN Index • Structure of BRIN Index Table File Block Range 1 (128 Blocks) Block Range 2 Block Range 3 Block Range Min. Value Max. Value 1 1992-01-02 1992-01-28 2 1992-01-27 1992-02-08 3 1992-02-08 1992-02-16 … … … Holds only min/max values for “Block Ranges”, 128 blocks each. (in case a date column)
  • 29. TABLESAMPLE • Allows to get approximate results for aggregations by sampling. • BERNOULLI – Accurate – Sample by Tuple • SYSTEM – Performance – Sample by Block http://blog.2ndquadrant.com/tablesample-in-postgresql-9-5-2/
  • 30. TABLESAMPLE • Calculating the average of total price. – The actual value and the approximate ones
  • 32. Parallel Queries • The leader process cooperates with those worker processes for: – Sequential scan – Joins (Nested Loop & Hash) – Aggregations • Will be shipped with 9.6 – 9.6 is beta2 as of today Leader Worker Worker Client Data Read & Examine Query Result Launch & Gather
  • 33. Parallel Aggregation Performance & Scalability • count(*) on 30M rows – Shows a good parallel scalability
  • 34. In-Database Analytics User Defined Functions Apache MADlib
  • 35. In-Database Analytics • In-Database Analytics? – Performs analytics workload in the database without pulling the data out of the server. • Advantages of In-Database Analytics – No need to move “BigData” between server and client for analytics. – Higher performance hardware resources (CPU, memory, storage) compared to client PCs.
  • 36. In-Database Analytics • User defined functions – PL/Python, PL/R, PL/v8, ... or C lang. – Allow you to run (almost) any logics within the database. • Apache MADlib – Machine Learning Library for PostgreSQL
  • 37. UDF by Python CREATE OR REPLACE FUNCTION dumpenv(OUT text, OUT text) RETURNS SETOF record AS $$ import os for e in os.environ: plpy.notice(str(e) + ": " + os.environ[e]) yield(e, os.environ[e]) $$ LANGUAGE plpythonu;
  • 38. UDF by Python CREATE OR REPLACE FUNCTION dumpenv(OUT text, OUT text) RETURNS SETOF record AS $$ import os for e in os.environ: plpy.notice(str(e) + ": " + os.environ[e]) yield(e, os.environ[e]) $$ LANGUAGE plpythonu; testdb=# select * from dumpenv() order by 1 limit 10; column1 | column2 --------------------+----------------------- G_BROKEN_FILENAMES | 1 HISTCONTROL | ignoredups HISTSIZE | 1000 HOME | /home/snaga HOSTNAME | localhost.localdomain LANG | ja_JP.UTF-8 LC_COLLATE | C LC_CTYPE | C LC_MESSAGES | C LC_MONETARY | C (10 rows)
  • 39. Apache MADlib • An Open Source Machine Learning Library – Can run in PostgreSQL, Greenplum Database and Apache HAWQ. – Supports many ML algorithms. http://madlib.incubator.apache.org/
  • 40. Others Strict type checking and constraints. Industry Standard Interface (for BI tools)
  • 41. Others • Strict type checking and constraints. – Avoid “Garbage in, garbage out.” • Industry Standard Interface (for BI tools) – ODBC, JDBC
  • 42. Summary • PostgreSQL has already had lots of features that help your analytics project – In terms of productivity and performance. • And more “BigData” features are coming in the future release. – Parallel query must be a big-shot. • Let’s start your analytic project with PostgreSQL and join our community.  – PostgreSQL 9.6 beta2 is available now!
  • 43. Resources • http://www.postgresql.org • http://wiki.postgresql.org • http://planet.postgresql.org • http://pgcon.org
  • 44. pgDay Asia 2016 • pgDay Asia 2016 / FOSSASIA 2016 – March 17-19 in Singapore • Speakers: – 19+ speakers from 9 countries • Sessions: – 19 Regular Sessions. – Plus, lightning talks • Attendees: – Around 100 attendees
  • 45.
  • 46.
  • 47.
  • 48. pgDay Asia 2017 • FOSSASIA 2017 (March, 2017) – Probably, the same format, in the same season, in the same region. • Do not miss the next one! – Will be better and bigger.  • Join us at: – http://pgday.asia – https://www.facebook.com/pgdayasia
  • 49. Q&A