查看原文
其他

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

Jiachun Feng GreptimeDB 2024-01-30

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

在这一月的时间内, GreptimeDB:

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

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

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

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

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

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


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

GreptimeDB v0.2

Features

• 支持 COPY TOFROM 语句[1]

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

• 新增 REPL[2]

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

• PromQL 兼容性达到 50%+

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

• 建表支持多种时间戳精度[4]

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

• 0: TimeUnit::Second

• 3: TimeUnit::Millisecond

• 6: TimeUnit::Microsecond

• 9: TimeUnit::Nanosecond

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

mysql> create table demo (ts timestamp(6time index, cnt int);Query OK, 0 rows affected (0.05 sec)

• Procedure on Create & Alter Table[6]

Procedure 框架的作用是帮助执行系统中的多步操作,保证其最终能够执行完成或回滚。我们的 Procedure 框架借鉴了 HBase ProcedureV2[7]以及 Accumulo FATE[8]两个类似的框架。

目前 CREATE TABLE 和 ALTER TABLE 的 procedure 均已开发完成。我们计划在 DROP TABLE 的 procedure 开发完成后逐渐切换到 procedure 框架。

• Dashboard with Playground[9]

全新模块:Playground

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

初步支持PromQL查询

• 其他

     DELETE 语句增强,支持任意 where 条件

    • 支持 Region manifest checkpoint 以控制磁盘用量和加速启动

    • 分布式模式下支持运行 python script

Protocol

• 优化写入的私有 gRPC 协议[10]

为了进一步优化写入性能,我们在 ArrowFlight 之外增加了一种私有 gRPC 协议。这一协议支持 Unary Call 和 Client Streaming Call,从而提高数据写入的效率。与此同时,原有的 ArrowFlight 则侧重于查询方面的性能表现。

Clients

• Java SDK[11] 新增流式写入 API,更好地支持超高吞吐数据写入

• 新增 Golang SDK[12],欢迎试用

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[13]

致谢社区

感谢亲爱的社区和所有贡献者们,是你们的每一个建议、BUG 修复和代码贡献,才让这个项目不断壮大、迈向新高峰。

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

参考

[1] https://docs.greptime.com/reference/sql/copy
[2] https://docs.greptime.com/user-guide/operations/cli-repl
[3] https://github.com/GreptimeTeam/greptimedb/pull/1042
[4] https://docs.greptime.com/reference/data-types#data-types
[5] https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html
[6] https://github.com/GreptimeTeam/greptimedb/issues/286
[7] https://github.com/apache/hbase/blob/master/src/main/asciidoc/_chapters/pv2.adoc
[8] https://accumulo.apache.org/1.8/accumulo_user_manual.html#_fault_tolerant_executor_fate
[9] https://github.com/GreptimeTeam/dashboard
[10] https://github.com/GreptimeTeam/greptimedb/pull/1196
[11] https://github.com/GreptimeTeam/greptimedb-client-java
[12] https://github.com/GreptimeTeam/greptimedb-client-go
[13] https://github.com/orgs/GreptimeTeam/projects

关于 Greptime

Greptime 格睿科技于 2022 年创立,目前正在完善和打造时序数据库 GreptimeDB 和格睿云 GreptimeCloud 这两款产品。

GreptimeDB 是款用 Rust 语言编写的时序数据库。具有分布式,开源,云原生,兼容性强等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。

GreptimeCloud 基于开源的 GreptimeDB,为用户提供全托管的 DBaaS,以及与可观测性、物联. 网等领域结合的应用产品。利用云提供软件和服务,可以达到快速的自助开通和交付,标准化的运维支持,和更好的资源弹性。GreptimeCloud 已正式开放内测,欢迎关注公众号或官网了解最新动态!

官网:https://greptime.com/

GitHub: https://github.com/GreptimeTeam/greptimedb

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

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

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

往期精彩文章:

GreptimeDB v0.1 发布|原生支持 Python,  PromQL 和对象存储

GreptimeCloud 内测申请开放|浅谈数据库云服务值得关注的 4 大体验

从制作九转大肠来谈起 | GreptimeDB 如何提高多步操作的容错能力

👇 点击下方阅读原文,立刻下载体验开源的时序数据库 GreptimeDB v0.2~

继续滑动看下一个

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

Jiachun Feng GreptimeDB
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存