Column-Stores vs. Row-Stores: How Different Are ... - Yale University

9 downloads 146 Views 1MB Size Report
Jun 12, 2008 - Row vs. Column-Stores. Street. Address. Phone #. E-mail. First. Name. Last. Name. Last ... Writes tend to
Column-Stores vs. Row-Stores: How Different Are They Really? Daniel Abadi (Yale), Samuel Madden (MIT), Nabil Hachem (AvantGarde Consulting) June 12th, 2008

Daniel Abadi -- Yale University

Row vs. Column-Stores Row-Store

Column-Store

Last First Street Name Name E-mail Phone # Address

+ Easy to add a new record

− Might read in unnecessary data

Last Name

First Name

E-mail

Phone #

Street Address

+ Only need to read in relevant data

− Tuple writes might require multiple seeks Daniel Abadi -- Yale University

Column-Stores • Really good for read-mostly data warehouses  Lot’s of column scans and aggregations  Writes tend to be in batch  [CK85], [SAB+05], [ZBN+05], [HLA+06], [SBC+07] all verify this  Top 3 in TPC-H rankings (Exasol, ParAccel, and Kickfire) are column-stores  Factor of 5 faster on performance  Factor of 2 superior on price/performance Daniel Abadi -- Yale University

Data Warehouse DBMS Software • $4.5 billion industry (out of total $16 billion DBMS software industry) • Growing 10% annually

Daniel Abadi -- Yale University

Momentum • Right solution for growing market  $$$$ • Vertica, ParAccel, Kickfire, Calpont, Infobright, and Exasol new entrants • Sybase IQ’s profits rapidly increasing • Yahoo’s world largest (multi-petabyte) data warehouse is a column-store (from Mahat Technologies acquisition)

Daniel Abadi -- Yale University

Paper Looks At Key Question • How much of the buzz around columnstores just marketing hype?  Do you really need to buy Sybase IQ or Vertica?  How far will your current row-store take you?  Can you get column-store performance from a rowstore?  Can you simulate a column-store in a row-store?

Daniel Abadi -- Yale University

Paper Methodology • Comparing row-store vs. column-store is dangerous/borderline meaningless • Instead, compare row-store vs. row-store and column-store vs. column-store  Simulate a column-store inside of a row-store  Remove column-oriented features from column-store until it behaves like a row-store

Daniel Abadi -- Yale University

Simulate Column-Store Inside Row-Store Last First Street Name Name E-mail Phone # Address

Option A: Vertical Partitioning Last Name

1 2 3

First Name

1 2 3

E-mail

Option B: Index Every Column Last Name Index

1 2 3

First Name Index

… Daniel Abadi -- Yale University

Experiments • Star Schema Benchmark (SSBM)  Fact table contains 17 columns and 60,000,000 rows  4 dimension tables, biggest one has 80,000 rows  Queries perform 2-4 joins between fact table and dimension tables, aggregate 1-2 columns from fact table  [OOC06]

• Implemented by professional DBA  Original row-store plus 2 column-store simulations on same row-store product Daniel Abadi -- Yale University

SSBM Averages

250.0

Time (seconds)

200.0 150.0 100.0 50.0 0.0

Average

Normal Row-Store

Vertically Partitioned Row-Store

Row-Store With All Indexes

25.7

79.9

221.2

Daniel Abadi -- Yale University

What’s Going On? • Vertically Partitioned Case  Tuple Sizes  Horizontal Partitioning

• All Indexes Case  Tuple Reconstruction

Daniel Abadi -- Yale University

Tuple Size TID

1 2 3

Column Data

TID

Column Data

Tuple Header

1 2 3

TID

Column Data

1 2 3

•Queries touch 3-4 foreign keys in fact table, 1-2 numeric columns •Complete fact table takes up ~4 GB (compressed) •Vertically partitioned tables take up 0.7-1.1 GB (compressed) Daniel Abadi -- Yale University

Horizontal Partitioning • Fact table horizontally partitioned on year  Year is an element of the ‘Date’ dimension table  Most queries in SSBM have a predicate on year  Since vertically partitioned tables do not contain the ‘Date’ foreign key, row-store could not similarly partition them

Daniel Abadi -- Yale University

What’s Going On? • Vertically Partitioned Case  Tuple Sizes  Horizontal Partitioning

• All Indexes Case  Tuple Construction

Daniel Abadi -- Yale University

Tuple Construction • Common type of query: 

SELECT store_name, SUM(revenue) FROM Facts, Stores WHERE fact.store_id = stores.store_id AND stores.country = “Canada” GROUP BY store_name

Daniel Abadi -- Yale University

Tuple Construction • Result of lower part of query plan is a set of TIDs that passed all predicates • Need to extract SELECT attributes at these TIDs  BUT: index maps value to TID  You really want to map TID to value (i.e., a vertical partition)   Tuple construction is SLOW Daniel Abadi -- Yale University

So…. • All indexes approach is a poor way to simulate a column-store • Problems with vertical partitioning are NOT fundamental  Store tuple header in a separate partition  Allow virtual TIDs  Allow HP using a foreign key on a different VP

• So can row-stores simulate columnstores? Daniel Abadi -- Yale University

Row-Store vs. Column-Store 30.0

Time (seconds)

25.0 20.0 15.0 10.0 5.0 0.0 Average

Row-Store

Row-Store (M V)

C-Store

25.7

11.7

4.4

Daniel Abadi -- Yale University

Row-Store vs. Column-Store 30.0

Time (seconds)

25.0 20.0 15.0 10.0 5.0 0.0 Average

Row-Store

Row-Store (M V)

C-Store

25.7

11.7

4.4

Daniel Abadi -- Yale University

Column-Store Experiments • Start with column-store (C-Store) • Remove column-store-specific performance optimizations • End with column-store with a row-oriented query executer

Daniel Abadi -- Yale University

Compression Quarter

• Higher data value locality in column-stores  Better ratio  reduced I/O

• Can use schemes like run-length encoding  Easy to operate on directly for improved performance ([AMF06])

Q1 Q1 Q1 Q1 Q1 Q1 Q1 … Q2 Q2 Q2 Q2 …

Daniel Abadi -- Yale University

Quarter (Q1, 1, 300) (Q2, 301, 350) (Q3, 651, 500) (Q4, 1151, 600)

Early vs. Late Materialization Select + Aggregate

QUERY: SELECT custID,SUM(price) FROM table WHERE (prodID = 4) AND (storeID = 1) AND GROUP BY custID

4

2

2 7

4

1

3 13

4

3

3 42

4

1

3 80

• Early Materialization: create rows first. But:

Construct 4 4 4 4 prodID

2 1 3 1

2 3 3 3

storeIDcustID

7 13 42 80 price

 Poor memory bandwidth utilization  Lose opportunity for vectorized operation Daniel Abadi -- Yale University

Other Column-Store Optimizations • Invisible join  Column-store specific join  Optimizations for star schemas  Similar to a semi-join

• Block Processing

Daniel Abadi -- Yale University

Simplified Version of Results 50.0

Time (seconds)

40.0 30.0 20.0 10.0 0.0 Original C-St ore Average

4.4

C-St ore, No

C-St ore, Early

Compression

Mat erializat ion

14.9

40.7

Daniel Abadi -- Yale University

Conclusion • Might be possible to simulate a row-store in a column-store, BUT:  Need better support for vertical partitioning at the storage layer  Need support for column-specific optimizations at the executer level

• Working with HP Labs to find out

Daniel Abadi -- Yale University

Come Join the Yale DB Group!

Daniel Abadi -- Yale University