MariaDB ColumnStore调研

1.概述

ColumnStore(2016.12.14 GA)实际是 mariaDB 版的 InfiniDB。InfiniDB 倒闭于2014年9月,开源版本继续放在 github 上开源。老版本InfiniDB 的 mysql 版本是5.1.39(数据来源网络)。ColumnStore目前使用 MariaDB 10.1。

2.主要开发者

Daniel Lee
Nishant Vyas

3.使用协议

GPL

特性

  • 列存,同时支持行存引擎 Innodb
  • 横向扩展的 MPP 构架存储引擎
  • 内建冗余和高可用机制
  • 支持全部 SQL(MYSQL)语法包括 join,window function 和跨引擎 join
  • 可与 HDFS 协同工作
  • 在线 shema 变更

4.架构

MariaDB ColumnStore’s architecture
MariaDB ColumnStore’s architecture

由构架图可见,主要有两个组件,User Module(UM),Performance Module(PM)

所有 ColumnStore 的数据的获取和管理都是通过 PM 节点进行。

存储构架

Storage Architecture
  • 列是存储单元,而不像行存储引擎 InnoDB。列存系统存储数据的文件格式是 每列一个文件,而不是一行都在一个文件中。
  • Partitions 用来实际存储一列。在 MariaDB ColumnStore 中,Partition 是多个 Segment 组成的逻辑概念,默认1个 Partition 有4个 Sement。
  • Segment 是实际的存储文件,每个 Segment 包含一定数量的 Extents,默认是2个 Extents。系统需要时会创建 Segment 文件。
  • Extent 是800万个列数据的集合。每个 Extent 有需要 Blocks 组成。
  • Block 存储8K bytes 数据,是实际磁盘 I/O 的最小单位。

存储实现细节

在每个 Extent 和 Block 中,MC 存储列的值使用固定长度的数据类型在1到8 bytes 长。对于 string 类型超过这个长度的情况,一个额外的Dictionary extent 会创建来存储 string 的值。这种情况下,column extent 存储对应 string 在 Dictionary extent 的指针。

因为MC 使用固定长度的数据类型,对于同一行的其他列,可以直接定位。例如,如果我们有“NAME”列的 extent 里的行234的,query engine 可以快速定位行234的列“AMOUNT”。这对于快速形成一行的查询有极大帮助(因为通常来说,单条查询对于列存是比较弱的)。

默认,列和字典值都是压缩的。这个设定消耗 CPU 来换取 I/O 的减少,可以加快 query 的响应时间。MC 使用 Snappy library (https://google.github.io/snappy/) 提供压缩特性。这种压缩算法在列的去重值较少时非常优秀,在一些场景下能提供10倍的压缩。

物理上,Segment 文件存储在 DBRoot 文件夹里。一个 DBRoot 包含一个物理存储单元,并且指定给一个物理 PM 服务器。系统会自动分布数据到可用的 DBRoots 上。

Extent Map

系统维护Extent 的元数据依靠 Extent Map。这个 Extent Map 包括 Extent 的最大值和最小值。这将帮助 MariaDB ColumnStore 提供一个简单但是有用的 horizontal partitioning scheme。在查询时,优化器可以消除不在 WHERE 条件里的 Extents。

例如:

Extent Map

如果一个查询的 WHERE 语句有“COL1 BETWEEN 220 and 250”,那优化器就可以消除 COL1的 Extent1,2和4。这就节省了75%的 IO以及很多比较操作。并且这个支持多个 column 的比较。原理相同就不细说了。

在时间序列,半排序的数据以及时间列中使用这个 MAP 非常有效。

额外的,系统在使用 Extent Map 的最大值和最小值可以进行 Bulk deletion 操作。(没有明说,但是猜测,一个 extent 如果没有全部清空,空间应该不释放,这一条不一定对。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容