漫谈OceanBase 列式存储

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

  • 大部分OLAP查询只须要读取部分列而不是所有列数据,列式存储能够避免读取无用数据;
  • 将同一列的数据在物理上存放在一块儿,可以极大地提升数据压缩率。

OLAP和OLTP

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

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

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

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

绑定变量真正的用途是在OLTP系统中,这个系统一般有这样的特色,用户并发数很大,用户的请求十分密集,而且这些请求的SQL 大多数是能够重复使用的。设计

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

列组(Column Group)

OceanBase经过列组支持行列混合存储,每一个列组存储多个常常一块儿访问的列。
OceanBase 列组设计
如上图所示,OceanBase SSTable首先按照列组存储,每一个列组内部再按行存储。分为几种状况:索引

  • 全部列属于同一个列组。数据在SSTable中按行存储,OLTP应用每每配置为这种方式。
  • 每列对应一个列组。数据在SSTable中按列存储,这种方式在实际应用中比较少见。
  • 每一个列组对应一行数据的部分列。数据在SSTable中按行列混合存储,OLAP应用每每配置为这种方式。
相关文章
相关标签/搜索