技术经验分享:漫谈OceanBase 列式存储

存储 存储软件
分区技术在OLAP系统中的重要性主要体现在数据库管理上,比如数据库加载,可以通过分区交换的方式实现,备份可以通过备份分区表空间实现,删除数据可以通过分区进行删除,至于分区在性能上的影响,它可以使得一些大表的扫描变得很快(只扫描单个分区)。

 列式存储主要的目的有两个:

大部分OLAP查询只需要读取部分列而不是全部列数据,列式存储可以避免读取无用数据;

将同一列的数据在物理上存放在一起,能够极大地提高数据压缩率。

OLAP和OLTP

OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一条语句的执行时间可能会非常长,读取的数据也非常多。所以,在这样的系统中,考核的标准往往是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。

在OLAP系统中,常使用分区技术、并行技术。

分区技术在OLAP系统中的重要性主要体现在数据库管理上,比如数据库加载,可以通过分区交换的方式实现,备份可以通过备份分区表空间实现,删除数据可以通过分区进行删除,至于分区在性能上的影响,它可以使得一些大表的扫描变得很快(只扫描单个分区)。另外,如果分区结合并行的话,也可以使得整个表的扫描会变得很快。总之,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提高,有时候分区会带来性能上的提高,有时候会降低。

在OLAP系统中,不需要使用绑定(BIND)变量,因为整个系统的执行量很小,分析时间对于执行时间来说,可以忽略,而且可避免出现错误的执行计划。但是OLAP中可以大量使用位图索引,物化视图,对于大的事务,尽量寻求速度上的优化,没有必要像OLTP要求快速提交,甚至要刻意减慢执行的速度。

绑定变量真正的用途是在OLTP系统中,这个系统通常有这样的特点,用户并发数很大,用户的请求十分密集,并且这些请求的SQL 大多数是可以重复使用的。

OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,就是很典型的OLTP数据库。

列组(Column Group)

OceanBase通过列组支持行列混合存储,每个列组存储多个经常一起访问的列。

技术经验分享:漫谈OceanBase 列式存储

如上图所示,OceanBase SSTable首先按照列组存储,每个列组内部再按行存储。分为几种情况:

·所有列属于同一个列组。数据在SSTable中按行存储,OLTP应用往往配置为这种方式。

·每列对应一个列组。数据在SSTable中按列存储,这种方式在实际应用中比较少见。

·每个列组对应一行数据的部分列。数据在SSTable中按行列混合存储,OLAP应用往往配置为这种方式。

OceanBase还允许一个列属于多个列组,通过冗余存储这些列,能够提高访问性能。例如,某表格总共包含5列,用户经常一起访问(1,3,5)或者(1,2,3,4)列。如果将(1,3,5)和(l,2,3,4)存储到两个列组中,那么,大部分访问只需要读取一个列组,避免了多个列组的合并操作。

列式存储提高了数据压缩比,然面,实践过程中我们发现,由于OceanBase最初的几个版本内存操作实现得不够精细,例如数据结构设计不合理,数据在内存中膨胀很多倍,导致大查询的性能瓶颈集中在CPU,列式存储的优势完全没有发挥出来。这就告诉我们,列式存储的前提是设计好内存数据结构,把CPU操作优化好,否则,后续的工作都是无用功。为了更好地支持OLAP应用,新版的OceanBase将重新设计列式存储引擎

责任编辑:武晓燕 来源: 云栖社区
相关推荐

2018-06-26 08:27:21

DRDS内核 列式存储

2021-02-08 08:34:55

存储列式 OLAP

2015-09-07 09:13:31

ios教学

2015-06-03 14:14:17

dockeropenstackIaaS

2022-08-10 13:54:40

云存储存储私有云

2018-07-04 09:30:55

列式存储格式

2011-07-06 16:29:10

ASP

2018-12-26 15:00:56

数据库行式存储列式存储

2009-09-28 10:52:00

CCNA考试经验CCNA

2018-02-07 15:25:41

2015-09-15 09:20:22

Neutron技术虚拟化

2010-06-04 18:32:48

MySQL数据库

2010-06-07 15:09:44

访问MySQL数据库

2013-12-10 14:31:41

华为HPC大数据存储

2013-05-03 13:45:42

KVM故障调试

2009-12-18 17:01:37

Ruby基础代码

2009-12-22 19:26:51

WCF绑定

2009-09-16 08:54:02

思科认证CCIECCNA

2009-12-22 16:03:03

WCF异常

2011-05-16 17:36:05

SEO
点赞
收藏

51CTO技术栈公众号