IoTDB MPP框架源码解读之SQL的一生(襁褓)

随着Apache IoTDB 0.14.0-preview1 版本成功的在6.30发布,意味着IoTDB的新版分布式框架的主体功能基本完善了,当然还有一些扩展功能因为开发时间比较紧张,并未随这次发版一起进入,如CQ、Trigger、select into等高阶功能。

这次的发版也可以称为IoTDB分布式发展史,甚至也可以称为IoTDB整体发展史上的一个里程碑事件。正如乔老师在我们内部6.30的总结会上说的,这次新分布式框架奠定了IoTDB未来至少5年的基调,这至少5年内,我们都不会再做框架上的大改动了。

新版MPP查询框架的优势

之前IoTDB的查询实现,可以说是为每种查询手写了最佳实现,除了底层共用了与文件交互的SeriesReader外,几乎每种查询都有自己独立的自上而下的流程。这种方式的好处在于前期查询种类较少时,每种查询的性能都能调整到最优。
但是随着IoTDB的发展,查询种类越来越丰富之后,我们发现原来的这种方式,扩展性比较差,一个limitoffset的功能竟然会散落在各种查询的内部逻辑里,导致有时候做功能改动时,总会漏改某处。想新增一个查询功能时,也会有很多历史包袱,甚至开发人员需要了解所有种类的查询,去各个种类查询的逻辑中修改。而新的MPP查询框架,遵循传统关系型数据库的规则,定义出基础的查询算子,每种查询由多个查询算子组合而成,相比之下,新MPP的查询框架优势在于:

  1. 添加新功能容易扩展,算子功能更加高内聚低耦合

a. 对于Limit功能,原来散落在各个不同类型的QueryDataSet中,现在就一个LimitOperator

  1. 统一计算框架、丰富谓词条件

a. 原来select子句里的计算框架独立于where条件里的Filter,MPP中因为有了Operator和TsBlock的抽象,统一用TransformOperator来进行select子句和where子句的计算

b. 以前where子句里的谓词只支持一些简单的二元运算符(>, <, ==等),现在得益于统一的计算框架,无需编写冗余的重复代码,天然支持了更复杂的计算表达式,如where (s1 + s2) * 3 + 4 > s3

c. 之前的fill只对group by和单点查询支持,现在因为fill作为独立的Operator,可与其他任意Operator搭配使用

  1. 良好的PlanNode抽象,为后续各种查询优化打好基础

a. 如对于limit下推,之前因为每种查询都有自己单独的PhysicalPlan,不利于优化规则编写,只能把push down的代码散落在每一处。而现在可以较为统一的编写PushDownRule

  1. 统一不同Operator间传递的数据结构为内存中列式存储的TsBlock
    可存储一列时间戳、任意多列值,便于之后做各种执行优化(如SIMD、Operator内改造成按列操作,提高CPU Cache命中率)。而之前不同查询的不同阶段传递的数据结构不同,最底层SeriesReader向上传递的是按批返回的BatchData(原本是只支持一列时间戳和一列值,引入多元时间序列后,支持了一列时间戳和多列值,但多列值按行存,而非列存,结构不统一);上层计算迭代时,使用RowRecord按行返回。

a. 目前MPP的实现中因为时间问题,很多代码参照了之前的老代码编写,导致部分Operator也按行返回数据了(TsBlock中只有一行数据),这部分之后需要慢慢改造

  1. 固定查询线程数,引入优先级和时间片的概念,查询执行调度更加可控与可编程。

a. 旧查询引擎的查询线程数虽然固定,但是没有调度和时间片概念,先进先出,一个查询会一直占用一个查询线程直到拿到FetchSize行数据,这个会导致慢查询长时间持有查询线程,导致后面短频快的查询被阻塞。

  1. 引入背压机制,控制查询总内存

a. 旧查询引擎在查询执行过程中没有内存控制,查询并发数上升后,很容易爆内存;MPP框架在查询数据传输处引入DataBlockManagerMemoryPool,向MemoryPool申请到内存后,该查询才能继续运行,保证查询内存可控。

原生分布式数据库

这次的MPP框架也意味着IoTDB成为了原生的分布式数据库,0.14.0-preview1中的新版单机IoTDB是由分布式IoTDB的部分组件组合而成的,这是与旧版分布式IoTDB比较大的不同。旧版分布式IoTDB将单机IoTDB作为独立模块,相当于在上层做了一层中间件,去管理下层的很多IoTDB旧单机实例。旧版分布式的这种实现也不利于扩展,原来开发IoTDB旧单机和旧分布式的是两拨人,互相可能也不太了解各自模块的实现,导致一旦旧单机做了一些改动,旧分布式那边可能就无法运行了,需要做相应的适配。所以这次新版分布式,我们也是将IoTDB彻底改造成了原生分布式数据库,如此一来,就不会有之前分布式和单机之间的鸿沟了,因为如今的新单机只不过是分布式的一个特例罢了。

系列文章的规划

早在我研二的时候,其实就有写一个IoTDB查询源码解析的系列,但是因为当时IoTDB的查询如上述所述,实现的太过琐碎,很难整理成一个整体的脉络,从前到后串讲起来。想要写的话,可能每种查询都得单独写一篇文章了。得益于现在的MPP框架,我打算写一个系列文章《IoTDB MPP框架源码解读之SQL的一生》,初步打算以中国古代对各个年龄段的称谓命名,分为襁褓(不满周岁)、孩提(二至三岁)、黄口(十岁左右)、弱冠(二十岁)、而立(三十岁)、不惑(四十岁)、天命(五十岁)、花甲(六十岁)、古稀(七十岁)、耄耋(八十岁)、鲐背(九十岁),共11篇,具体内容如下所示:

  • IoTDB MPP框架源码解读之SQL的一生(襁褓)——即本文,主要介绍这一系列文章的由来和概览;

  • IoTDB MPP框架源码解读之SQL的一生(孩提)——介绍Protocol层,通过Protocol层的封装,IoTDB能够支持多种协议:如IoTDB原生协议、InfluxDB Protocol和MQTT等;

  • IoTDB MPP框架源码解读之SQL的一生(黄口)——介绍逻辑计划生成

  • IoTDB MPP框架源码解读之SQL的一生(弱冠)——介绍分布式计划生成

  • IoTDB MPP框架源码解读之SQL的一生(而立)——介绍聚合查询在分布式计划拆分时的细节

  • IoTDB MPP框架源码解读之SQL的一生(不惑)——介绍不同FragmentInstance间交互的异步数据传输模块

  • IoTDB MPP框架源码解读之SQL的一生(天命)——介绍每个FragmentInstance在DataNode上本地物理执行计划的生成

  • IoTDB MPP框架源码解读之SQL的一生(花甲)——介绍本地执行计划的运行载体Driver的实现细节

  • IoTDB MPP框架源码解读之SQL的一生(古稀)——介绍DataNode上的查询调度模块

  • IoTDB MPP框架源码解读之SQL的一生(耄耋)——介绍查询中的表达式计算的框架

  • IoTDB MPP框架源码解读之SQL的一生(鲐背)——用一个例子,将前面所有的知识串联起来,带领大家亲手在IoTDB中实现一个查询功能

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

推荐阅读更多精彩内容