Open Source Column Store John Sichi Project Founder for Sponsored by.

25
Open Source Column Store John Sichi Project Founder for Sponsored by

Transcript of Open Source Column Store John Sichi Project Founder for Sponsored by.

Page 1: Open Source Column Store John Sichi Project Founder for Sponsored by.

Open SourceColumn Store John SichiProject Founder for

Sponsored by

Page 2: Open Source Column Store John Sichi Project Founder for Sponsored by.

Why Are You Here?

‣ You have a boatload of data

‣ You need to analyze it

‣ You are lazy

‣ You are cheap

‣ You are smart

Page 3: Open Source Column Store John Sichi Project Founder for Sponsored by.

Analytic Data Volume Scale

‣ terabytes: distributed horizontal parallelism (column store a plus)

‣ 10's of gigabytes: vanilla PostgreSQL, MySQL ®

Page 4: Open Source Column Store John Sichi Project Founder for Sponsored by.

TPC-H* Scale Factor 10

‣ LucidDB 0.7.4 (prerelease)

‣ 6GB buffer pool; libaio and O_DIRECT

‣ MySQL 5.0.22

‣ MyISAM storage engine

‣ Scale factor 10 = 10GB flat file data = 60 million lineitems

‣ same schema; all primary and foreign keys indexed

‣ Machine used for timing runs

‣ AMD64 2GHz, RHEL5, kernel 2.6.18-8.el5, JRockit R27.4

‣ 8 GB RAM, 1MB L2 cache, SATA 10K RPM, ext3

‣ * (not an official TPC-H compliant execution)

Page 5: Open Source Column Store John Sichi Project Founder for Sponsored by.

Query Performance Compared

‣ all times in seconds (queries 19 through 22 omitted)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 180

500

1000

1500

2000

2500

3000

3500

4000

TPC-H SF 10 Queries

MySQL

LucidDB

Query 11Bad Run(ignore)

thrash

Page 6: Open Source Column Store John Sichi Project Founder for Sponsored by.

Load Performance Compared

‣ all times in seconds

Load data with PRIMARY KEY

CREATE INDEX

0

5000

10000

15000

20000

25000

30000

35000

TPC-H SF 10 Load

MySQL

LucidDB

Page 7: Open Source Column Store John Sichi Project Founder for Sponsored by.

Storage Compression

‣ storage in bytes for LINEITEM table (LucidDB)

MySQL LucidDB

0

2000000000

4000000000

6000000000

8000000000

10000000000

12000000000

14000000000

TPC-H SF 10 Storage

Index

Base Data

RAM

Page 8: Open Source Column Store John Sichi Project Founder for Sponsored by.

Column Store: Pay As You Go

‣ base data storage per column in LINEITEM table (LucidDB)

L_LINESTATUS

L_RETURNFLAG

L_SHIPINSTRUCT

L_LINENUMBER

L_SHIPMODE

L_TAX

L_DISCOUNT

L_QUANTITY

L_ORDERKEY

L_PARTKEY

L_SUPPKEY

L_COMMITDATE

L_SHIPDATE

L_RECEIPTDATE

L_EXTPRICE

L_COMMENT

TPC-H SF 10 Column Storage Breakdown

Page 9: Open Source Column Store John Sichi Project Founder for Sponsored by.

Bitmap Indexing

‣ storage per index on LINEITEM table (LucidDB)

L_RETURNFLAG_IDX

L_SHIPMODE_IDX

L_DISCOUNT_IDX

L_QUANTITY_IDX

L_COMMITDATE_IDX

L_SHIPDATE_IDX

L_RECEIPTDATE_IDX

L_SUPPKEY_IDX

L_PARTKEY_IDX

L_ORDERKEY_IDX

L_PARTSUPPKEY_IDX

PRIMARY_KEY

TPC-H SF 10 Index Storage Breakdown

Page 10: Open Source Column Store John Sichi Project Founder for Sponsored by.

Storage Architecture Benefits

‣ Disks are getting bigger, not faster, and data keeps growing, so...

‣ Apply aggressive compression (homogeneous domains)

‣ Only read what you need

‣ Optimal use of available I/O bandwidth

‣ Larger effective data cache

‣ What can you do with all the storage/bandwidth you save?

‣ More precomputed aggregate tables (OLAP cubes)

‣ More indexes, materialized views

Page 11: Open Source Column Store John Sichi Project Founder for Sponsored by.

Scaling Beyond Main Memory

‣ all times in seconds (LucidDB only)

Load Index Query

0

2000

4000

6000

8000

10000

12000

14000

16000

SF 10 vs 30

SF 10 (actual)

3 * SF 10

SF 30 (actual)

Page 12: Open Source Column Store John Sichi Project Founder for Sponsored by.

Star Join Optimization

page_hits

(0.006%)

user_profile

(20%)

browser

(30%)

calendar

(1%)

page_info

(10%)

“For each heavily-commented page

visited by twentysomethings using

a Mozillaesque browser in the given week,

return the URL and hit count.”

-- join fact with filtered dimensions,

-- then aggregate

select page_info.page_url, count(*)

from page_hits, browser,

user_profile, calendar, page_info

where page_hits.browser_id=browser.id

and page_hits.user_id=user_profile.id

and page_hits.access_date=calendar.date_id

and page_hits.page_id=page_info.id

and browser.family='Mozilla'

and user_profile.age between 20 and 30

and calendar.week='2008 Week 10'

and page_info.comment_count > 10

group by page_info.page_url

Page 13: Open Source Column Store John Sichi Project Founder for Sponsored by.

Star Join Plan (Index Semijoin)

page_hits(0.006%)

user_profilebrowsercalendar page_info

Filter(1%)

Filter(10%)

Filter(20%)

Filter(30%)

Bitmap accesspage_hits.

access_date

Bitmap accesspage_hits.browser_id

Bitmap accesspage_hits.

user_id

Bitmap accesspage_hits.page_id

Bitmapintersection

HashAggregate Result

Hash Join

Page 14: Open Source Column Store John Sichi Project Founder for Sponsored by.

Intelligent Prefetch

‣ Make every disk read count!

‣ High selectivity, fragmentation: page reads may be non-contiguous

Page 15: Open Source Column Store John Sichi Project Founder for Sponsored by.

Hybrid Architecture

‣ Java (standalone or deployed in J2EE app server)

‣ catalog, sessions, parser, validator, optimizer, JDBC driver

‣ JDBC clients (e.g. Mondrian OLAP, JMX mbeans)

‣ scalar expression codegen/evaluation

‣ connectivity, extensibility (user-defined routines)

‣ C++ heavy lifting (integrated via JNI and java.nio)

‣ sorter, hash join/agg, nested loop join, flatfile reader

‣ persistence, cache, btrees, column read/write, bitmap indexes

Page 16: Open Source Column Store John Sichi Project Founder for Sponsored by.

External Data Extraction

‣ SQL/MED: “Management of External Data” in SQL:2003

‣ Integrated with LucidDB's catalog+optimizer

AnyDBMS

csv Files

SalesForce.com

LucidDBStorage

StagingTables

INSERT INTO staging_tableSELECT ... FROM foreign_tableWHERE last_modification_date > ...;

LucidEra'sSalesForceWrapper

Flat FileWrapper

JDBCWrapper

Foreign

Data

Wrapper

Plugins

Page 17: Open Source Column Store John Sichi Project Founder for Sponsored by.

User-Defined Transforms

public class TopN

{

/**

* Return the first n rows of a cursor.

*/

public static void execute(

ResultSet cursorInput,

int n,

PreparedStatement resultInserter)

throws SQLException

{

int columnCount = cursorInput.getMetaData().getColumnCount();

for (; n > 0; --n) {

if (!cursorInput.next()) break;

for (int i=1; i <= columnCount; i++) {

resultInserter.setObject(i, cursorInput.getObject(i));

}

resultInserter.executeUpdate();

}

}

}

Page 18: Open Source Column Store John Sichi Project Founder for Sponsored by.

Pipelined Transform Invocation

-- install the jar

create or replace jar applib.applibJar

library '/path/to/plugin/applib.jar'

options(0);

-- register the UDX

create or replace function applib.topn(in_cursor cursor, n int)

returns table(in_cursor.*)

language java

parameter style system defined java

no sql

external name 'applib.applibJar:com.lucidera.luciddb.applib.cursor.TopN.execute';

-- invoke the UDX as a filter while moving data

insert into top10_popular_browsers

select * from table(

applib.topn(

cursor(select * from browsers order by usage_count desc),

10));

Page 19: Open Source Column Store John Sichi Project Founder for Sponsored by.

Page-level Multiversioning

‣ default page size: 32KB

‣ never overwrite data pages: copy-on-write

Page 20: Open Source Column Store John Sichi Project Founder for Sponsored by.

LucidDB Project History

‣ Original codebase developed at Broadbase (1996 – 2001), KANA

‣ closed source; Windows NT with Visual C++ and Microsoft JVM

‣ sold as traditional enterprise software (data mart)

‣ Modernized frameworks (Sun JVM, Linux, g++, SQL:2003) developed as open source by The Eigenbase Project (2003-present)

‣ Broadbase design+code acquired and reworked into Eigenbase frameworks by LucidEra (2005-2007)

‣ new additions: page versioning, upsert

‣ 70+ production SaaS deployments in LucidEra data center since 2006

‣ First packaged open source release (GPL v2) in Jan 2007

‣ 3-5 month release cycle since then

Page 21: Open Source Column Store John Sichi Project Founder for Sponsored by.

Under Development

‣ Point-in-time query

‣ Concurrent OLAP (including Mondrian cache consistency) and ETL

‣ Hot/incremental/differential backup

‣ Reduce downtime and archive size/bandwidth

‣ Tablespaces

‣ Better manageability for complex deployments

‣ Parallel Executor

‣ Keep all those cores humming!

Page 22: Open Source Column Store John Sichi Project Founder for Sponsored by.

Q&A

‣ http://www.luciddb.org

‣ http://pub.eigenbase.org/wiki/LucidDbDocs

‣ http://pub.eigenbase.org/wiki/LucidDbTpch

[email protected]

[email protected]

Page 23: Open Source Column Store John Sichi Project Founder for Sponsored by.

Bonus Slides...

‣ presentation ends on previous slide

Page 24: Open Source Column Store John Sichi Project Founder for Sponsored by.

Eigenbase Integration

Page 25: Open Source Column Store John Sichi Project Founder for Sponsored by.

Column Store Details

Multiple columns can be stored on a single cluster

Cluster pages flushed to disk once they're filled during loads

Each cluster bulk loaded independent of other clusters

Clusters uniquely identified by pageId of root in btree map

...

Column0 Column1 ColumnN

Clusters

PageId X:

Contains

rids 0-95

PageId Y:

Contains

rids 96-255

PageId Z:

Contains

rids

8000-8500...

Pages from a

Single Cluster

startRid pageId

0 X

96 Y

256

... ...

8000 Z

Rid-to-PageId Btree Map