GreptimeDB v0.4 重大更新 — 新版引擎 Mito2 专为时序数据而生

引言

从去年 11 月 GreptimeDB 首次上线开源以来,Greptime 团队经过一轮又一轮的持续迭代,从 v0.1 的初步架构完成,到 v0.2 兼容了 PromQL 的单机版本,再到 v0.3 增加了分布式的能力。

v0.3 功能层面已经相对稳定,包括了单机版,分布式,PromQL 兼容性以及对不同接入协议的支持,很多用户开始尝试,我们也收到了大量的反馈和建议,同时,我们也在 GreptimeCloud 项目里面吃自己狗粮,底层完全依托于 v0.3,不断地把需求回吐给 DB 团队。

其中呼声最大的便是查询性能问题,坦率的讲,v0.3 版本虽然功能稳定,写入性能也满足需求,但在查询性能上依然有很大的提升空间,还不足以应对大规模的数据查询分析。v0.4 为了解决这个问题,对存储查询引擎 Mito 做了一次重大升级,几乎是重写了一遍,而围绕引擎相关的组件也随之重构,最后通过 TSBS 测试套件实测提升了平均有 6 倍,具体可以参考文末的测试报告(PS: 可能熟悉车的朋友会觉得 Mito 比较眼熟,没错,是来自于 Alfa Romeo MiTo,谁让公司有三位 Alfa Romeo 车主呢)。

在充分测试的保障下,今天,我们终于可以激动地宣布:GreptimeDB v0.4 正式发布,和以往版本不同,v0.4 版本的发布标志着 GreptimeDB 已基本做好踏入生产环境的准备,更意味着一段新的探索与挑战即将启程!

总结来说,此次新版本更新主要在以下几个方面:

  • 性能优化:重新设计的新版引擎 Mito2;
  • 稳定性优化:CREATE, DROP, ALTER 等 DDL 统一单机和分布式实现并引入 Procedure 框架保证最终一致性;
  • 体验优化:支持 Vector/OpenTelemetry 等。

从 v0.3 到 v0.4,Greptime 团队主要项目中,共有来自 6 个国家和地区的 42 位贡献者,累计合并了 726 个 PRs,涉及到 7659 个文件修改,包含了 271 个功能优化,163 个修复,107 个重构以及大量测试。同时,伴随着版本的更新,使用文档和技术文档也已更新至最新。另外,我们还发布了 C++, Erlang 和 JS SDK, 官方目前已经支持了 Golang/Java/Rust/C++/Erlang/JS 6 种语言。社区方面,我们也迎来了一位新的 Committer: @ Niwaka。

GreptimeDB v0.4 重点内容

  • 查询存储性能

    • 完全重新设计了新版引擎 Mito2,专门针对时间序列数据进行了优化,实测性能比 v0.3 提升 5-20 多倍不等;
    • 受 Cassandra 启发,支持了 TWCS(Time Window Compaction Strategy)压缩策略;
    • 支持了新的对象存储 Google Cloud Storage。
  • 稳定性和可靠性

    • 丰富 sqlness 测试场景;
    • 依托于混沌测试 Case 的不断完善,v0.4 版本将具备更可靠的分布式健壮性;
    • 基于 Procedure 框架实现 Create/Alter/Drop Table 等 DDL 操作并统一单机和分布式实现;
    • 重构了整个分布式架构,优化心跳协议,使得分布式版本运行更加稳定。
  • 体验优化

    • 新增支持 range select,支持与普通函数嵌套使用;
    • 全新的 Dashboard;
    • 优化 DESC TABLE 体验;
    • 支持 Apache ORC 格式的外部表;
    • 支持用户友好的 gRPC 行格式写入协议。
  • 集成与其他

    • Vector 增加 GreptimeDB metrics 的输出支持;
    • 支持使用 KubeBlocks 启动 GreptimeDB 集群;
    • 集成 EMQX;
    • 支持 CentOS;
    • 发布 JS/Erlang/C++ 官方客户端。