欢迎参与 8 月 1 日中午 11 点的线上分享,了解 GreptimeDB 联合处理指标和日志的最新方案! 👉🏻 点击加入

Skip to content
On this page
产品
2023-4-19

GreptimeDB v0.2 正式发布 | 50%+ PromQL 兼容、写入性能优化

本文对新发布的 v0.2 版本进行了简单介绍。

四月春暖花开,GreptimeDB v0.2 也如期而至。在社区的助力下,GreptimeDB 正按计划一步一个脚印朝着设定的里程碑前行。

在这一月的时间内, GreptimeDB:

  • 优化数据的导入导出,让用户快速上手;

  • 提升 PromQL 兼容性,替换 Prometheus 成本更低;

  • 写入性能优化,满足更复杂的使用场景;

  • 重构使用文档,更友好的用户体验;

  • 带有使用引导的 dashboard,快速了解产品;

  • 为数据库可靠安全等其他方面进行了一系列相关的优化

这些交付的背后是 233 merged PRs ,101 个优化和 42 个修复,涉及 687 个文件变更,约 44548 行代码修改,41 位贡献者以及 2600+ 的关注者。特别感谢社区和团队的努力,让我们一起回顾 v0.2 的主要内容。

GreptimeDB v0.2

Features

COPY TOCOPY FROM 命令通常被用作数据迁移或备份工具。GreptimeDB 不仅支持了向本地磁盘导出数据或从本地磁盘导入数据,还支持对象存储比如 S3。

我们从 Datanode 中移除了 SQL 接口,这样就需要再提供一个类似 mysql-cli 的方式进行调试。受到 InfluxDB IOx 的启发推出了 REPL,可以起到这个作用。使用简单,具有历史记录和提示功能,可以通过我们的 gRPC 接口直接执行 SQL 语句查询。

(图 1:通过 gRPC 接口直接执行 SQL 语句查询)
(图 1:通过 gRPC 接口直接执行 SQL 语句查询)
  • PromQL 兼容性达到 50%+

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

(图 2:Complicance History)
(图 2:Complicance History)

我们增强了 Timestamp 来支持在建表时指定时间戳精度,遵循 MySQL 中的 fractional seconds 语法。已经支持以下几个时间精度:

  • 0: TimeUnit::Second

  • 3: TimeUnit::Millisecond

  • 6: TimeUnit::Microsecond

  • 9: TimeUnit::Nanosecond

比如,现在我们可以将时间查询精确到微秒:

sql
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 TABLEALTER TABLE 的 procedure 均已开发完成。我们计划在 DROP TABLE 的 procedure 开发完成后逐渐切换到 procedure 框架。

全新模块:Playground

提供了互动文档的能力,可以在文档中交互式地使用数据库。

(图 3:Playground)
(图 3:Playground)

初步支持 PromQL 查询

(图 4:PromQL 查询)
(图 4: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 修复和代码贡献,才让这个项目不断壮大、迈向新高峰。

(图 5:Contributors)
(图 5:Contributors)

让我们为共同的成果感到自豪,继续携手努力,共同打造新一代云原生时序数据库。

关于 Greptime

Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。

欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~

Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb

官网:https://greptime.cn/

文档:https://docs.greptime.cn/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/

加入我们的社区

获取 Greptime 最新更新,并与其他用户讨论。