从去年 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 新集群。
关于 Greptime
Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。
欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~
Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack