引言
从去年 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++ 官方客户端。
GreptimeDB v0.4 性能测试
GreptimeDB 是基于 TSBS 进行了性能测试。TSBS(Time Series Benchmark Suite)是以 Go 为主语言的一套程序,用于生成时序数据集并对读写性能进行基准测试。最初由老牌时序数据库厂商 InfluxDB 工程师发布,并不断由 TimescaleDB 团队进行改进。该套件是可扩展的,可以包含不同类型的数据和查询类型,并在系统之间进行比较。GreptimeDB 在套件基础上做了对应的扩展,具体项目地址: https://github.com/GreptimeTeam/tsbs/
测试硬件和数据准备
硬件环境
测试数据 (基于 TSBS)
启动配置(默认配置,仅修改数据目录)
[storage]
data_home = "/var/greptimedb/"
测试结果(与 v0.3.2 对比,数值越小越好)
升级提示
为了进行彻底地优化,不受历史包袱干扰 0.3 -> 0.4 有一些 breaking change,需要停机升级。为此我们提供了升级工具,稍晚会在官方文档中加入升级手册,大致步骤如下:
- 创建一个新的 0.4 集群;
- 关闭旧集群流量入口(停写);
- 通过 CLI 升级工具导出数据;
- 导入数据到新集群;
- 入口流量切换到 0.4 新集群。
GreptimeDB 未来展望
GreptimeDB 不断追求的核心目标仍然是建立一个具备弹性的 ServerlessDB 架构。同时我们意识到未来的趋势在于数据库的自治化,我们会逐步在数据库自治方面投入更多,结合智能化的调度技术,逐步实现时序数据库的安全自动驾驶。
致谢社区
感谢每一位关注 GreptimeDB、给 GreptimeDB 提建议甚至提交代码的朋友,是你们的支持让我们前进得更坚定。GreptimeDB 是一个基于 Rust 的数据库项目,无论你是在学习 Rust 语言想要寻找项目上手的同学,还是已经有一定经验的技术大牛,甚至是希望对开源社区有所贡献的非技术同学,你一定能在 GreptimeDB 找到适合你的贡献方式,成为我们的贡献者,和来自全世界各地的其他社区贡献者一起交流最新技术。悄悄说一句,成为贡献者能收到 Greptime 限量精美周边礼品哦~