四月春暖花开,GreptimeDB v0.2 也如期而至。在社区的助力下,GreptimeDB 正按计划一步一个脚印朝着设定的里程碑前行。
在这一月的时间内, GreptimeDB:
优化数据的导入导出,让用户快速上手;
提升 PromQL 兼容性,替换 Prometheus 成本更低;
写入性能优化,满足更复杂的使用场景;
重构使用文档,更友好的用户体验;
带有使用引导的 dashboard,快速了解产品;
为数据库可靠安全等其他方面进行了一系列相关的优化
这些交付的背后是 233 merged PRs ,101 个优化和 42 个修复,涉及 687 个文件变更,约 44548 行代码修改,41 位贡献者以及 2600+ 的关注者。特别感谢社区和团队的努力,让我们一起回顾 v0.2 的主要内容。
GreptimeDB v0.2
Features
COPY TO
和 COPY FROM
命令通常被用作数据迁移或备份工具。GreptimeDB 不仅支持了向本地磁盘导出数据或从本地磁盘导入数据,还支持对象存储比如 S3。
我们从 Datanode 中移除了 SQL 接口,这样就需要再提供一个类似 mysql-cli 的方式进行调试。受到 InfluxDB IOx 的启发推出了 REPL,可以起到这个作用。使用简单,具有历史记录和提示功能,可以通过我们的 gRPC 接口直接执行 SQL 语句查询。

- PromQL 兼容性达到 50%+
我们已经初步支持了 PromQL,并通过了超过 50% 的 Prometheus 的兼容性测试,大大提升了与 PromQL 的兼容性。为了不断进行优化,并将所有与 PromQL 兼容性相关的 PR 和任务收集在这里,我们创建了这个 issue,以便于跟踪进展。

我们增强了 Timestamp
来支持在建表时指定时间戳精度,遵循 MySQL 中的 fractional seconds 语法。已经支持以下几个时间精度:
0:
TimeUnit::Second
3:
TimeUnit::Millisecond
6:
TimeUnit::Microsecond
9:
TimeUnit::Nanosecond
比如,现在我们可以将时间查询精确到微秒:
mysql> create table demo (ts timestamp(6) time index, cnt int);Query OK, 0 rows affected (0.05 sec)
Procedure 框架的作用是帮助执行系统中的多步操作,保证其最终能够执行完成或回滚。我们的 Procedure 框架借鉴了 HBase ProcedureV2 以及 Accumulo FATE 两个类似的框架。
目前 CREATE TABLE
和 ALTER TABLE
的 procedure 均已开发完成。我们计划在 DROP TABLE
的 procedure 开发完成后逐渐切换到 procedure 框架。
全新模块:Playground
提供了互动文档的能力,可以在文档中交互式地使用数据库。

初步支持 PromQL 查询

其他
DELETE
语句增强,支持任意 where 条件支持 Region manifest checkpoint 以控制磁盘用量和加速启动
分布式模式下支持运行 python script
Protocol
为了进一步优化写入性能,我们在 ArrowFlight 之外增加了一种私有 gRPC 协议。这一协议支持 Unary Call 和 Client Streaming Call,从而提高数据写入的效率。与此同时,原有的 ArrowFlight 则侧重于查询方面的性能表现。
Clients
Java SDK 新增流式写入 API,更好地支持超高吞吐数据写入
新增 Golang SDK,欢迎试用
Refactor
重构协议解析层,我们希望所有协议解析相关都留在 Frontend 这一层,包括解析成逻辑计划。之前因为一些原因 Datanode 也保留了 SQL Parser,这种妥协的设计消耗了我们大量的维护精力,比如每次引入新特性都要在这两个地方分别修改。所以我们决定清除掉这个技术债。
写入性能优化数据
在 GreptimeDB v0.2 中,我们为 metrics 采集场景优化了批量写入的能力。相对 SQL 接口而言,批量写入 API 可将写入吞吐提升 20 倍左右,在真实的业务场景中测试可以获得单 core 高达 38 万点每秒的写入吞吐(测试机型使用 AMD Ryzen™ 7 7735HS CPU)。
The plan for v0.3
查询性能
在 0.2 我们重点优化了写入性能,在 0.3 查询性能将成为重点课题,我们将从部分用户的重点查询场景入手,也会包含一些数据结构和索引上的优化。
分布式
从 0.3 开始,分布式能力将提高优先级,分布式未来主要聚焦在三个方面:高可用,功能和用户体验。我们制定了中长期的迭代计划,按月迭代,每个月集中做一个主题,详情见 GitHub Projects。
致谢社区
感谢亲爱的社区和所有贡献者们,是你们的每一个建议、BUG 修复和代码贡献,才让这个项目不断壮大、迈向新高峰。

让我们为共同的成果感到自豪,继续携手努力,共同打造新一代云原生时序数据库。
关于 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