Apache Doris(incubating) 0.12.0 版本正式发布
经过了近 6 个月的研发,Apache Doris(Incubating) 0.12.0 版本在 Apache 社区正式发布了。这是 Doris 进入 Apache 孵化器后第四个正式版本。
在 0.12 版本中,有共计 40 位同学贡献了 627 个 commit。Contributor 的数量也增长到了 87 名。在此,感谢每一位为 Doris 做出贡献的同学,也希望越来越多的人能够加入到社区当中,为 Doris 添砖加瓦。
0.12 版本发布了诸多重磅功能。
全新的存储格式 SegmentV2
这个版本中,我们对底层的数据文件格式进行了完全的重构。原有的存储格式是类似 orcfile 的列存格式,存在诸多的设计问题,如按字节流的读取方式效率低下、大量随机读问题、不支持字典压缩、不支持数据块的缓存、结构不清晰难以扩展等。
在新的 SegmentV2 存储格式中,我们参考了 Parquet 的设计思路,引入了基于 Page 的最小数据存储单元,并将数据文件划分为数据区、索引区和元数据区三个部分。针对不同的列类型、索引格式实现了不同的 Page 编码方式,显著提升了数据的读写效率,并增强了数据格式的可扩展性。更多 SegmentV2 的细节,可以参阅之前的公众号文章:
【遇见Doris】Apache Doris (incubating) 0.12.0版本预览
在 SegmentV2 的基础上,0.12 版本实现了如下重要功能:
· 字典压缩编码
原有的存储格式中,字符串类型都是采用 Plain Text 的格式进行存储的,这种朴素的方式在某些低基数字符串列的场景下,会极大地浪费存储空间。
SegmentV2 通过 Dictionary Page,实现了字典压缩编码,在不同基数的情况下可以节省数倍的存储空间。
· 基于 Bitmap 的二级索引
之前版本的 Doris 只支持基于 BloomFilter 的二级索引,只能过滤 block 级别的数据,并且在某些低基数列上的效果欠佳。在 0.12 版本中,我们支持了基于 Bitmap 的倒排索引,可以在任意 Key 列上创建。通过倒排索引,可以更精准地进行数据查询和检索。在我们的测试中,通过倒排索引,可以提升数倍的查询性能。
· Page Cache 和内存表
Page 是 SegmentV2 格式中,最小的数据单元,一个 Page 会被完整的解压并读取到内存中。Page 一旦生成,是不可变更的,根据这个特性,我们增加了 Page Cache 功能,通过在内存中缓存解压后的 Page 数据,可以避免大量的重复 IO,降低磁盘 IO。
同时基于 Page Cache 功能,我们也提供了一种内存表的实现方式。用户可以在建表时指定表的属性“in_memory”=“ true”,则系统会尽可能的保证该表的数据 Page 保留在 Page Cache 中,从而提升数据的访问效率。
· 延迟物化
全新的存储格式提供了更清晰的数据读取逻辑,使得 Doris 能够支持延迟物化这种更高效的数据读取能力。延迟物化的含义,举例来说,当用户需要读取 A、B、C 三列的数据,并且在 A 列上有过滤条件时,系统会先读取 A 列并进行过滤,根据过滤后的行号再去读取 B、C 两列,这样可以显著减少 B、C 两列的读取数据量。根据我们的测试,在某些场景下,延迟物化功能可以带来几十倍的性能提升。
Spark on Doris
在新版本中,我们实现了 Spark Doris Connector,从而用户可以直接通过 Spark 对 Doris 中存储的数据进行查询。从 Doris 的角度看,将其数据引入 Spark,可以使用 Spark 一系列丰富的生态产品,扩宽了 Doris 的想象力,也使得 Doris 和其他数据源的联合查询成为可能。
更多详情可以参阅公众号文章:
【遇见Doris】Spark Doris Connector的最佳实践
明细模型上的物化视图功能
在之前的版本中,Doris 仅支持在聚合模型(Aggregate Key)上创建上卷表(Rollup),而如果用户创建的是明细模型(Duplicate Key)表,则无法使用该功能。在新版本中,Doris 支持了在明细模型上创建物化视图的功能。该功能使得用户可以更加灵活地进行数据建模。
当前该功能仅支持 SUM、MIN、MAX 三种上卷聚合方式,更多的聚合方式如 HLL、BITMAP_UNION、AVG、COUNT 等将在后续的 3 位版本迭代中陆续推出。
更多详情,请访问 Doris 官网并搜索 "CREATE MATERIALIZED VIEW"
支持 ORC 格式数据的导入
在 0.11 版本中我们支持了 Parquet 文件格式。而在 0.12 版本中,我们进一步支持了 ORC 格式的数据文件的导入,进一步降低了用户的使用门槛,可以更加方便地从不同数据源中导入数据。
动态分区
在之前的版本中,数据表的分区(Partition)需要手动创建。对于一些例行任务场景,用户需要维护额外的脚本或服务来定期地增加新的分区或删除旧的分区。在新版本中,我们支持了动态分区的定义和创建,分区可以按照定义定期地进行创建和删除,用户无需再担心因分区未及时创建而导致数据无法导入的问题了。
更多详情,请访问 Doris 官网并搜索 "动态分区"。
差集、交集、Grouping Set
0.12 版本中,我们支持了更丰富的 SQL 语法和算子。其中差集(Expect)和交集(Intersect)算子避免了用户通过改写 Join 来获取想要的结果,同时也带来了查询性能的提升。
Grouping Set 功能能够让用户更便捷地通过简单的 SQL 语法获取不同纬度的聚合查询结果,进一步降低了 SQL 的复杂度。
更多详情,请访问 Doris 官网并搜索 "GROUP BY"。
更多增强特性
除了以上主要功能更新外,0.12 版本也做了诸多性能和功能方面的改进。
· 插件框架和审计日志插件
0.12 版本分别实现了 FE 端和 BE 端的插件框架。该框架支持用户对一些功能组件进行定制化的开发和安装。目前该功能还处于实验阶段。我们提供了一个 FE 端的审计日志插件供使用,通过该插件,用户可以直接通过 Doris 的查询能力来分析 Doris 系统内的查询请求情况。
更多详情,请访问 Doris 官网并搜索 "插件开发手册" 和 "审计日志插件"。
· 显著提升了 Doris On Elasticsearch 的性能
通过更精细的谓词下推、以及 API 接口的改进、Doris On ES 可能是目前最好用的 SQL on ES 系统。Doris On ES 也在更多的公司落地并解决问题:https://my.oschina.net/u/4022229/blog/3561066
· Bitmap 聚合方式支持 64 位整型
Bitmap 聚合方式从支持 32 位整型扩展到了 64 位。使得可以在更多场景实现快速精确去重能力。
· 更多的列类型转换
支持 Float 转 Double,Date 和 Datetime 的互转、Integer 转 Date/Datetime,以及 Varchar 转换为整型、浮点和日期类型等。通过更丰富的列类型转换,使得用户能够更灵活地应对业务场景的变更。
更多详情,请访问 Doris 官网并搜索 "ALTER TABLE"。
· 基于 NIO 模型的 MySQL 协议连接层
通过 XNIO 框架(https://xnio.jboss.org/),Doris 的连接层现在可以支持百万量级的连接请求。新的连接层框架可以在高并发场景降低 Doris 在连接协议上的开销和负载。
该功能可以通过添加 FE 的配置项:mysql_service_nio_enabled=true 开启。、
下载地址
可以通过点击原文、或从 Doris 官网下载 0.12.0 版本。同时,因为 Doris 项目处于快速迭代中,很多迭代功能和 bug 修复无法及时地体现在 Apache 官方版本中,因此百度在 github 上维护了一个镜像库用于发布 3 位快速迭代版本。
3 位快速迭代版本主要用于 bug 修复,建议生产环境使用。
https://github.com/baidu-doris/incubator-doris/releases
下一版本预告
在接下来的 0.13 版本中,我们将支持更好的物化视图功能、Spark 导入功能,并且对查询引擎性能做进一步地优化,敬请期待。
升级注意事项
0.12 版本仅支持从 0.11 版本升级,不支持从 0.10 及之前的版本升级。
关于 SegmentV2 的升级方式,请访问 Doris 官网并搜索 "Segment V2 升级手册"。
欢迎扫码关注:
Apache Doris(incubating)官方公众号
相关链接:
Apache Doris 官方网站:
http://doris.incubator.apache.org
Apache Doris Github:
https://github.com/apache/incubator-doris
Apache Doris 开发者邮件组:
dev@doris.apache.org
版权声明: 本文为 InfoQ 作者【ApacheDoris】的原创文章。
原文链接:【http://xie.infoq.cn/article/60cfd3cd5451c7ee6676b91ca】。文章转载请联系作者。
评论