GreptimeDB v0.2 正式发布 | 50%+ PromQL 兼容、写入性能优化、Dashboard with Playground
四月春暖花开,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
、FROM
语句[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
现在我们可以将时间查询精确到微秒,如:
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 已正式开放内测,欢迎关注公众号或官网了解最新动态!
公众号:GreptimeDB
GitHub: https://github.com/GreptimeTeam/greptimedb
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack
LinkedIn: https://www.linkedin.com/company/greptime/
评论