cstore_fdw: columnar storage for postgresql

32
cstore_fdw – Columnar store for analytic workloads Hadi Moshayedi & Ben Redman

Upload: citusdata

Post on 30-May-2015

685 views

Category:

Documents


4 download

DESCRIPTION

A copy of the slides for the "Columnar Store for PostgreSQL" talk from Postgres Open 2014

TRANSCRIPT

Page 1: cstore_fdw: Columnar Storage for PostgreSQL

cstore_fdw – Columnar store for analytic

workloads

Hadi Moshayedi &Ben Redman

Page 2: cstore_fdw: Columnar Storage for PostgreSQL
Page 3: cstore_fdw: Columnar Storage for PostgreSQL

What is CitusDB?

• CitusDB is a scalable analytics database that extends PostgreSQL– Citus shards your data and automatically parallelizes your

queries– Citus isn’t a fork of Postgres. Rather, it hooks onto the

planner and executor for distributed query execution.– Always rebased to newest Postgres version– Natively supports new data types and extensions

Page 4: cstore_fdw: Columnar Storage for PostgreSQL

A C

D

worker node #1(extended PostgreSQL)

C

worker node #2(extended PostgreSQL)

A

worker node #3(extended PostgreSQL)

. . . .

1 shard =1 Postgres table

master node(extended PostgreSQL)

shard and shardplacement metadata

Page 5: cstore_fdw: Columnar Storage for PostgreSQL

Talk Overview

1. Why customers want columnar stores2. Live demo3. Optimized Row Columnar (ORC) format4. PostgreSQL benefits5. Benchmark numbers

Page 6: cstore_fdw: Columnar Storage for PostgreSQL

Id Sz Ln Ht … … … … … … … … … … …

1 4 3 4 … … … … … … … … … … …

2 4 11 3 … … … … … … … … … … …

3 1 4 2 … … … … … … … … … … …

4 8 4 12 … … … … … … … … … … …

4…

… … … … … … … … … … … … … …

4…

… … … … … … … … … … … … … …

4…

… … … … … … … … … … … … … …

30Mrows

700 columns

Page 7: cstore_fdw: Columnar Storage for PostgreSQL

Example SQL querySELECT

id, AVG(price), MAX(price)FROM

itemsWHERE

quantity > 100 AND last_stock_date < ‘2013-

10-01’GROUP BY

weight;

Page 8: cstore_fdw: Columnar Storage for PostgreSQL

Id … price … … quant … … last_stm … … … … … weight

1 … 3.90 … … 31 … … 2013-… … … … … … 0.6

2 … 13 … … 70 … … 2010-… … … … … … 0.8

3 … 4.25 … … 432 … … 2013-… … … … … … 1

4 … 4 … … 45 … … 2013-… … … … … … 6

4… … 95 … … 37 … … 2013-… … … … … … 0.6

4… … 59 … … 90 … … 2012-… … … … … … 1.5

Row-oriented store

Page 9: cstore_fdw: Columnar Storage for PostgreSQL

Id … price … … quant … … last_stm … … … … … weight

1 … 3.90 … … 31 … … 2013-… … … … … … 0.6

2 … 13 … … 70 … … 2010-… … … … … … 0.8

3 … 4.25 … … 432 … … 2013-… … … … … … 1

4 … 4 … … 45 … … 2013-… … … … … … 6

4… … 95 … … 37 … … 2013-… … … … … … 0.6

4… … 59 … … 90 … … 2012-… … … … … … 1.5

Row-oriented store

Page 10: cstore_fdw: Columnar Storage for PostgreSQL

Id … price … … quant … … last_stm … … … … … weight

1 … 3.90 … … 31 … … 2013-… … … … … … 0.6

2 … 13 … … 70 … … 2010-… … … … … … 0.8

3 … 4.25 … … 432 … … 2013-… … … … … … 1

4 … 4 … … 45 … … 2013-… … … … … … 6

4… … 95 … … 37 … … 2013-… … … … … … 0.6

4… … 59 … … 90 … … 2012-… … … … … … 1.5

Row-oriented store

Page 11: cstore_fdw: Columnar Storage for PostgreSQL

Id … price … … quant … … last_stm … … … … … weight

1 … 3.90 … … 31 … … 2013-… … … … … … 0.6

2 … 13 … … 70 … … 2010-… … … … … … 0.8

3 … 4.25 … … 432 … … 2013-… … … … … … 1

4 … 4 … … 45 … … 2013-… … … … … … 6

4… … 95 … … 37 … … 2013-… … … … … … 0.6

4… … 59 … … 90 … … 2012-… … … … … … 1.5

Row-oriented store

Page 12: cstore_fdw: Columnar Storage for PostgreSQL

Cost of row storage

• Read 700 columns instead of 5• >39 GB of unnecessary I/O

Input Type

Estimated Input Rate

Cost to query performance

Memory 10 GB/s 3.9 seconds

SSD 600 MB/s >60 seconds

Page 13: cstore_fdw: Columnar Storage for PostgreSQL

Example SQL querySELECT

id, AVG(price), MAX(price)FROM

itemsWHERE

quantity > 100 AND last_stock_date < ‘2013-

10-01’GROUP BY

weight;

Page 14: cstore_fdw: Columnar Storage for PostgreSQL

Id sz price … … quant … … last_stm … … … … … weight

1 4 3.90 … … 31 … … 2013-… … … … … … 0.6

2 3 13 … … 70 … … 2010-… … … … … … 0.8

3 2 4.25 … … 432 … … 2013-… … … … … … 1

4 4 4 … … 45 … … 2013-… … … … … … 6

4… 19 95 … … 37 … … 2013-… … … … … … 0.6

4… 2 59 … … 90 … … 2012-… … … … … … 1.5

Column-oriented store

Page 15: cstore_fdw: Columnar Storage for PostgreSQL

Column-oriented storeId sz price … … quant … … last_stm … … … … … weight

1 4 3.90 … … 31 … … 2013-… … … … … … 0.6

2 3 13 … … 70 … … 2010-… … … … … … 0.8

3 2 4.25 … … 432 … … 2013-… … … … … … 1

4 4 4 … … 45 … … 2013-… … … … … … 6

4… 19 95 … … 37 … … 2013-… … … … … … 0.6

4… 2 59 … … 90 … … 2012-… … … … … … 1.5

Page 16: cstore_fdw: Columnar Storage for PostgreSQL

Column-oriented storeId sz price … … quant … … last_stm … … … … … weight

1 4 3.90 … … 31 … … 2013-… … … … … … 0.6

2 3 13 … … 70 … … 2010-… … … … … … 0.8

3 2 4.25 … … 432 … … 2013-… … … … … … 1

4 4 4 … … 45 … … 2013-… … … … … … 6

4… 19 95 … … 37 … … 2013-… … … … … … 0.6

4… 2 59 … … 90 … … 2012-… … … … … … 1.5

Page 17: cstore_fdw: Columnar Storage for PostgreSQL

Columnar Store Motivation

• Read subset of columns to reduce I/O• Better compression– Less disk usage– Less disk I/O

Page 18: cstore_fdw: Columnar Storage for PostgreSQL

State of the Columnar Store

1. Fork a popular database, swap in your storage engine, and never look back

2. Develop an open columnar store format for the Hadoop Distributed Filesystem (HDFS)

3. Use PostgreSQL extension machinery for in-memory stores / external databases

Page 19: cstore_fdw: Columnar Storage for PostgreSQL

ORC File Layout benefits

1. Columnar layout – reads columns only related to the query

2. Compression – groups column values (10K) together and compresses them

3. Skip indexes – applies predicate filtering to skip over unrelated values

Page 20: cstore_fdw: Columnar Storage for PostgreSQL

Block 1Block 2Block 3Block 4Block 5Block 6Block 7

150K rows(configurable)

150K rows(configurable) 10K column values

(configurable) per block

Page 21: cstore_fdw: Columnar Storage for PostgreSQL

Compression

• Current compression method is PG_LZ from PostgreSQL core

• Easy to add new compression methods depending on the CPU / disk trade-off

• cstore_fdw enables using different compression methods at the column block level

Page 22: cstore_fdw: Columnar Storage for PostgreSQL

Table sizes normalized to 1.0

Page 23: cstore_fdw: Columnar Storage for PostgreSQL

Drawbacks to ORC

• Support for limited data types. Each data type further needs to have a separate code path for min/max value collection and constraint exclusion.

• Gathering statistics from the data and table JOINs are an afterthought.

Page 24: cstore_fdw: Columnar Storage for PostgreSQL

Recent Benchmark Results

• TPC-H is a standard benchmark• Performed in-memory, SSD, and HDD

tests on 10 GB of data• Used m2.2xlarge and m3.2xlarge on

EC2• Compared vanilla PostgreSQL, CStore,

CStore with compression

Page 25: cstore_fdw: Columnar Storage for PostgreSQL

10GB of uncached data on m2.2xlarge

Page 26: cstore_fdw: Columnar Storage for PostgreSQL

10GB of uncached data on m3.2xlarge

Page 27: cstore_fdw: Columnar Storage for PostgreSQL

Total issued disk I/O measures with iotop

Page 28: cstore_fdw: Columnar Storage for PostgreSQL

10GB of cached data on m2/m3.2xlarge

Page 29: cstore_fdw: Columnar Storage for PostgreSQL

1.1 Release• CStore is an open source project actively

in development: github.com/citusdata/cstore_fdw– Improved statistics gathering– Automatic management of table filenames– Management of table file data

Page 30: cstore_fdw: Columnar Storage for PostgreSQL

Future Work

– Improve memory usage– Native Delete / Insert / Update support– Improve read query performance (vectorized

execution)– Different compression codecs– Many more; contribute to the discussion on

GitHub!

Page 31: cstore_fdw: Columnar Storage for PostgreSQL

Summary• CStore: Open source columnar store fdw

for Postgres• Improves query times, reduces disk I/O,

and reduces disk utilization• Uses foreign wrapper APIs

1 Supports all PostgreSQL data types2 Statistics collection for better query plans3 Load extension. Create Table. Copy

Page 32: cstore_fdw: Columnar Storage for PostgreSQL

cstore_fdw – Columnar Store for Analytic

Workloads

Hadi Moshayedi – [email protected] Redman – [email protected]