SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
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!

Mais conteúdo relacionado

Mais procurados (6)

浅谈数据库优化
浅谈数据库优化浅谈数据库优化
浅谈数据库优化
 
一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈
 
百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010百度分布式数据库 刘斌 Sacc2010
百度分布式数据库 刘斌 Sacc2010
 
Hbase架构简介、实践
Hbase架构简介、实践Hbase架构简介、实践
Hbase架构简介、实践
 
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践
 
Sql server 2014 新功能探索
Sql server 2014  新功能探索Sql server 2014  新功能探索
Sql server 2014 新功能探索
 

Destaque

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
 

Destaque (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
 
Memcached简介
Memcached简介Memcached简介
Memcached简介
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介
 
青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry青云虚拟机部署私有Docker Registry
青云虚拟机部署私有Docker Registry
 
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redis
 
Introduction of own cloud
Introduction of own cloudIntroduction of own cloud
Introduction of own cloud
 
青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes 青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes
 
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
 
Power drill列存储底层设计
Power drill列存储底层设计Power drill列存储底层设计
Power drill列存储底层设计
 
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
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 

Semelhante a C store底层存储设计

開放原始碼 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!
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
Yiwei Ma
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
yp_fangdong
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
thinkinlamp
 
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计
YANGL *
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
 
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
 

Semelhante a C store底层存储设计 (20)

诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
 
MySQL运维那些事
MySQL运维那些事MySQL运维那些事
MySQL运维那些事
 
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
 
開放原始碼 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)
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
No sql带来了什么 孙立
No sql带来了什么   孙立No sql带来了什么   孙立
No sql带来了什么 孙立
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
 
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计王龙:百度数据库架构演变与设计
王龙:百度数据库架构演变与设计
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Alibaba数据库运维最佳实践
Alibaba数据库运维最佳实践Alibaba数据库运维最佳实践
Alibaba数据库运维最佳实践
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
 
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico
 
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
 
数据架构方面的一些探讨
数据架构方面的一些探讨数据架构方面的一些探讨
数据架构方面的一些探讨
 

C store底层存储设计