狠狠撸

狠狠撸Share a Scribd company logo
C-Store底层存储设计
梁智超
liangzhichao@chinamobile.com
C-Store设计思想
? 在只读的数据仓库应用中,支持更新事务也是
很有必要的!

? 在实时的数据仓库应用中,将新灌入数据的可
见性延迟压得越低越好!
? 但基于读优化的数据结构,很难再提供高效的
更新性能!
? C-Store将两个针对读和写分别优化的存储模块
集成到一起来解决读写两难的困境!
C-Store数据模型
? 逻辑上:数据库(Database)由表(Table)组
成,表由属性列(Column)组成,支持唯一主
键和外键,使用标准SQL查询。
? 物理上:C-Store只实现投影(Projection),每
个投影与一张表关联,包含了该表中的一个或
多个属性列以及其任意数目其它表中的属性列。
EMP

DEPT

Name

Age

Dept

Salary

Name

Floor

Bob

25

Math

10K

Biology

10

Bill

27

EECS

50K

Math

8

Jill

24

Biology

80K

EECS

19
C-Store数据模型(cont.)

EMP3(name, salary | salary)

EMP2(dept, age, DEPT.floor
| DEPT.floor)

Name

Age

Dept

Age

DEPT.floor

Jill

24

Math

25

8

Bob

25

Biology

24

10

Bill

27

EECS

27

19

Salary

Bob
EMP1(name, age
| age)

Name

10K

Bill

50K

Jill

80K

DEPT1(name, floor | floor)
Floor

Math

8

Biology

10

EECS
EMP

Name

19

DEPT

Name

Age

Dept

Salary

Name

Floor

Bob

25

Math

10K

Biology

10

Bill

27

EECS

50K

Math

8

Jill

24

Biology

80K

EECS

19
C-Store数据模型(cont.)
? 投影以列存的方式存储,即投影中有几个属性
列,就有几个存储列的数据结构。

? 投影通过基于排序属性值的水平分区切割成段
(Segment),每个段都会有一个标识。
? 段中的每个属性列的值都会关联一个存储主键。
EMP1(name, age
| age)

SK Name

SK Age

1

Jill

1

24

Name

Age

2

Bob

2

25

Jill

24

1

Bill

1

27

Bob

25

Bill

27

SID = 1
SID = 2

段中具有相同存储主键的属性列构成一条逻
辑上的记录!
C-Store存储设计
? 读写分离,最新的更新数据全部写到Writeable
Store (WS),只读数据存储在Read-Optimized
Store (RS)。
? 查询时需要将RS和WS中的数据合并处理。
1) WS和RS均采用列存储,分享相同
的物理设计,包括投影、段等;
2) WS中的段与RS中的段一一对应;
3) WS中SK是显示存储的,RS中SK根
据列属性值的存储位置计算得到;
4) WS中的数据通过Tuple Mover实现
与RS中数据的Merge;

Writeable Store
Tuple Mover

Read-Optimized Store
RS中数据存储和压缩
? RS中存储大部分数据,且将数据库表转化为多
个投影会导致数据膨胀,所以RS中的数据需要
进行压缩。
? RS中的数据压缩就是对投影中每个列的压缩,
包括四种不同情况:
压缩列就是投影中的排序列,且
压缩列中的distinct值很少

压缩列不是投影中的排序列,且
压缩列中的distinct值很少

压缩列就是投影中的排序列,且
压缩列中的distinct值很多

压缩列不是投影中的排序列,且
压缩列中的distinct值很多
RS中数据存储和压缩(cont.)
? 压缩列就是投影中的排序列,且压缩列中的
distinct值很少。
Salary

使用Run-Length Encoding将连续的列属性值转
化为三元组(列属性值,在列中第一次出现
的位置,出现次数)

3000
3000
3000

(3000, 0, 3)

8000
8000
8000
8000

(8000, 3, 4)

整个列就可以使用多个三元组来表示

所有三元组使用B树索引来管理,B树
索引中所有节点不留空闲空间,使用
大数据块来存节点以降低B树的层数
RS中数据存储和压缩(cont.)
? 压缩列不是投影中的排序列,且压缩列中的
distinct值很少。
Salary
8000
3000
3000

8000
8000
3000
8000

列属性值转化为二元组(列属性值,该列属性
值出现在列中位置的Bitmap)

(8000, 1001101)
(3000, 0110010)

因为distinct值很少,所以每个二元
组中的Bitmap都很稀疏,可以继续
使用Run-Length Encoding对Bitmap
进行压缩

构造B树将列中的每个位置映射给该位置上的列属
性值,以快速定位列中每个位置上的列属性值
RS中数据存储和压缩(cont.)
? 压缩列就是投影中的排序列,且压缩列中的
distinct值很多。
Salary

Salary

3000
4000
4000

3000
1000
0

4500
6800
7400
8000

500
2300
600
600

将列属性值表示成为前一个列属性值的
增量

使用面向块的压缩算法对转换后的数据
进行压缩,类似于IBM的VSAM对B树索引
主键的编码

使用B树索引管理块级的压缩对象, B树
索引中所有节点不留空闲空间
RS中数据存储和压缩(cont.)
? 压缩列不是投影中的排序列,且压缩列中的
distinct值很多。
Salary
7400
6800
4000

8000
6800
4000
4500

可以选择不压缩数据

直接使用B树索引管理数据,B树
索引中所有节点不留空闲空间,
使用大数据块来存节点以降低B
树的层数
WS中数据存储
? WS中的数据比RS中的数据少很多,所以不进
行数据压缩。

? 投影中每列的更新数据都使用二元组(列属性
值,SK)来表示,且针对SK建B树索引。
? 投影中的排序属性列使用附加的二元组(排序
属性值,该排序属性值第一次出现的SK)来表
示,且针对排序属性值建B树索引。
? 先查询排序属性列二元组的B树索引,再查询
其他列二元组的B树索引。
WS中数据存储(cont.)
EMP1(name, age | age)的更
新数据

Name列更新数据
的二元组

SK

Name

Age

Jill

1

1

Jill

24

Tom

2

2

Tom

24

Rose

3

3

Rose

25

Bob

4

4

Bob

25

Bill

5

5

Bill

27

排序属性列的附
加二元组

(针对排序
属性建B树
索引)

24

3

27

5

当使用排序属性进行查询时,先查询
排序属性列二元组的B树索引,获取符
合条件的SK,再查询其他列二元组的B
树索引获取对应的属性列值

1

25

(针对SK建
B树索引)

C-Store直接使用BerkeleyDB来管理WS!

More Related Content

What's hot (6)

浅谈数据库优化
浅谈数据库优化浅谈数据库优化
浅谈数据库优化
Sky Jian
?
一个“兼职顿产补”的数据库运维经验谈
一个“兼职顿产补”的数据库运维经验谈一个“兼职顿产补”的数据库运维经验谈
一个“兼职顿产补”的数据库运维经验谈
Liang Xie
?
百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010
Chuanying Du
?
贬产补蝉别架构介绍、实践
贬产补蝉别架构介绍、实践贬产补蝉别架构介绍、实践
贬产补蝉别架构介绍、实践
Li Map
?
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践
Xupeng Yun
?
Sql server 2014 新功能探索
Sql server 2014  新功能探索Sql server 2014  新功能探索
Sql server 2014 新功能探索
Rico Chen
?
浅谈数据库优化
浅谈数据库优化浅谈数据库优化
浅谈数据库优化
Sky Jian
?
一个“兼职顿产补”的数据库运维经验谈
一个“兼职顿产补”的数据库运维经验谈一个“兼职顿产补”的数据库运维经验谈
一个“兼职顿产补”的数据库运维经验谈
Liang Xie
?
百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010
Chuanying Du
?
贬产补蝉别架构介绍、实践
贬产补蝉别架构介绍、实践贬产补蝉别架构介绍、实践
贬产补蝉别架构介绍、实践
Li Map
?
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践
Xupeng Yun
?
Sql server 2014 新功能探索
Sql server 2014  新功能探索Sql server 2014  新功能探索
Sql server 2014 新功能探索
Rico Chen
?

Viewers also liked (11)

A novel method to extend flash memory lifetime in flash based dbms
A novel method to extend flash memory lifetime in flash based dbmsA novel method to extend flash memory lifetime in flash based dbms
A novel method to extend flash memory lifetime in flash based dbms
Zhichao Liang
?
惭别尘肠补肠丑别诲介绍
惭别尘肠补肠丑别诲介绍惭别尘肠补肠丑别诲介绍
惭别尘肠补肠丑别诲介绍
Zhichao Liang
?
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
Zhichao Liang
?
青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry
Zhichao Liang
?
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redis
Zhichao Liang
?
Introduction of own cloud
Introduction of own cloudIntroduction of own cloud
Introduction of own cloud
Zhichao Liang
?
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉 青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
Zhichao Liang
?
Some key value stores using log-structure
Some key value stores using log-structureSome key value stores using log-structure
Some key value stores using log-structure
Zhichao Liang
?
Power drill列存储底层设计
Power drill列存储底层设计Power drill列存储底层设计
Power drill列存储底层设计
Zhichao Liang
?
Storage Class Memory: Technology Overview & System Impacts
Storage Class Memory: Technology Overview & System ImpactsStorage Class Memory: Technology Overview & System Impacts
Storage Class Memory: Technology Overview & System Impacts
Zhichao Liang
?
微软Bot framework介绍
微软Bot framework介绍微软Bot framework介绍
微软Bot framework介绍
Zhichao Liang
?
A novel method to extend flash memory lifetime in flash based dbms
A novel method to extend flash memory lifetime in flash based dbmsA novel method to extend flash memory lifetime in flash based dbms
A novel method to extend flash memory lifetime in flash based dbms
Zhichao Liang
?
惭别尘肠补肠丑别诲介绍
惭别尘肠补肠丑别诲介绍惭别尘肠补肠丑别诲介绍
惭别尘肠补肠丑别诲介绍
Zhichao Liang
?
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍开源笔补蝉蝉平台蹿濒测苍苍功能介绍
开源笔补蝉蝉平台蹿濒测苍苍功能介绍
Zhichao Liang
?
青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry
Zhichao Liang
?
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redis
Zhichao Liang
?
Introduction of own cloud
Introduction of own cloudIntroduction of own cloud
Introduction of own cloud
Zhichao Liang
?
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉 青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
青云颁辞谤别翱厂虚拟机部署办耻产别谤苍别迟别蝉
Zhichao Liang
?
Some key value stores using log-structure
Some key value stores using log-structureSome key value stores using log-structure
Some key value stores using log-structure
Zhichao Liang
?
Power drill列存储底层设计
Power drill列存储底层设计Power drill列存储底层设计
Power drill列存储底层设计
Zhichao Liang
?
Storage Class Memory: Technology Overview & System Impacts
Storage Class Memory: Technology Overview & System ImpactsStorage Class Memory: Technology Overview & System Impacts
Storage Class Memory: Technology Overview & System Impacts
Zhichao Liang
?
微软Bot framework介绍
微软Bot framework介绍微软Bot framework介绍
微软Bot framework介绍
Zhichao Liang
?

Similar to C store底层存储设计 (20)

诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
maclean liu
?
贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题
XiaoJun Hong
?
惭测厂蚕尝运维那些事
惭测厂蚕尝运维那些事惭测厂蚕尝运维那些事
惭测厂蚕尝运维那些事
Jinrong Ye
?
110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury
Zoom Quiet
?
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
?
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptxSC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
WeiminChen11
?
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
Yiwei Ma
?
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
Herman Wu
?
No sql带来了什么 孙立
No sql带来了什么   孙立No sql带来了什么   孙立
No sql带来了什么 孙立
Shaoning Pan
?
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
yp_fangdong
?
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
zhuozhe
?
惭测厂蚕尝应用优化实践
惭测厂蚕尝应用优化实践惭测厂蚕尝应用优化实践
惭测厂蚕尝应用优化实践
mysqlops
?
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
thinkinlamp
?
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计
YANGL *
?
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
Will Huang
?
础濒颈产补产补数据库运维最佳实践
础濒颈产补产补数据库运维最佳实践础濒颈产补产补数据库运维最佳实践
础濒颈产补产补数据库运维最佳实践
freezr
?
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
?
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
bngoogle
?
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico
Rico Chen
?
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
José Lin
?
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
maclean liu
?
贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题
XiaoJun Hong
?
惭测厂蚕尝运维那些事
惭测厂蚕尝运维那些事惭测厂蚕尝运维那些事
惭测厂蚕尝运维那些事
Jinrong Ye
?
110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury110412 kningsoft-mongo db-intro-usage-in-mercury
110412 kningsoft-mongo db-intro-usage-in-mercury
Zoom Quiet
?
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
?
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptxSC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
SC存储家族之厂颁4000系列 for CML Master Class ver1.1.pptx
WeiminChen11
?
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
Yiwei Ma
?
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
Herman Wu
?
No sql带来了什么 孙立
No sql带来了什么   孙立No sql带来了什么   孙立
No sql带来了什么 孙立
Shaoning Pan
?
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
yp_fangdong
?
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
zhuozhe
?
惭测厂蚕尝应用优化实践
惭测厂蚕尝应用优化实践惭测厂蚕尝应用优化实践
惭测厂蚕尝应用优化实践
mysqlops
?
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
thinkinlamp
?
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计
YANGL *
?
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
Will Huang
?
础濒颈产补产补数据库运维最佳实践
础濒颈产补产补数据库运维最佳实践础濒颈产补产补数据库运维最佳实践
础濒颈产补产补数据库运维最佳实践
freezr
?
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
?
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
bngoogle
?
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico
Rico Chen
?
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
José Lin
?

C store底层存储设计