本次 v0.12 更新聚焦于索引功能和 Metric Engine 的全面优化,同时提升了系统的性能与功能,为《GreptimeDB 2025 年路线图》中的关键更新版本 v0.13 打下了坚实基础。
从 v0.11 到 v0.12,Greptime 团队取得了显著的进展:合并了 125 个 PR,其中包括 47 项功能增强,41 项错误修复,7 项代码重构,6 项性能优化以及大量的测试工作。在此期间,共有 3 位来自社区的个人贡献者提交了 17 次代码贡献。
👏 非常感谢团队和各位个人贡献者的努力,也欢迎更多对技术感兴趣的同学加入我们。
索引
引入跳数索引(Skipping Index)
新增的跳数索引大幅降低了存储空间的占用,适合写入吞吐量较高或对存储成本敏感的场景。尽管跳数索引会在某些查询中带来略微的性能损失,但其在存储空间和计算成本上的优势明显。我们特别推荐在 traces 中的 trace_id
字段使用跳数索引。
统一的索引创建语法
在本次更新中,我们统一了倒排索引、跳数索引和全文索引的创建语法,解决了之前语法不一致的问题。现在,用户可以通过列约束来轻松创建不同类型的索引,且支持通过 ALTER
修改已有索引。
语法示例为:
CREATE TABLE IF NOT EXISTS system_metrics (
host STRING INVERTED INDEX,
idc STRING SKIPPING INDEX,
cpu_util DOUBLE,
memory_util DOUBLE,
disk_util DOUBLE,
desc1 STRING,
desc2 STRING FULLTEXT INDEX,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(host, idc),
TIME INDEX(ts)
);复制
同时,支持通过 ALTER
添加或移除索引:
ALTER TABLE table_name MODIFY COLUMN column_name SET SKIPPING INDEX WITH(granularity = 1024, type = 'BLOOM');
ALTER TABLE table_name MODIFY COLUMN column_name UNSET SKIPPING INDEX;复制
Metric Engine
性能优化
引入稀疏主键编码(目前处于试验阶段,默认关闭):在 metrics 场景的测试中,编码速度提升了 3 倍以上; 批量建表速度优化:在通过 Prometheus Remote-Write 协议写入 metrics
数据时,GreptimeDB 在首次写入会自动创建大量表,v0.12 的优化将建表速度从分钟级提升至秒级,大幅减少了写入时的阻塞时间;DROP DATABASE
性能提升:该操作的执行速度也得到了大幅优化,删除数据库的时间从分钟级提升至秒级。
PromQL 兼容性优化
目前,GreptimeDB 完全兼容 Kubernetes 相关监控大盘,具体优化包括:
修复了嵌套的 and unless or operator 未符合预期的行为; 支持 on
ignoring
向量匹配;支持 sort_desc
,sort
,sort_by_label
和sort_by_label_desc
函数;修复了值转义问题; 支持子查询(Subquery); 改进了查询报错的用户体验。
不兼容更新
GreptimeDB 不再支持存储 Interval 列类型; DateTime 类型调整:不再支持 DateTime 原始类型,改为作为 Timestamp(6) 的别名; 统一不同索引创建的语法; 部分启动参数和配置文件更新,请根据 v0.12 更新文档进行调整。
其他更新
Alter table 增强
新增支持一次性增加多个列:
CREATE TABLE alter_test(i INTEGER, j TIMESTAMP TIME INDEX);
ALTER TABLE alter_test ADD COLUMN "foo" STRING default 'foo' PRIMARY KEY, ADD COLUMN "bar" STRING default 'bar';复制
支持 set/unset index(参考上文索引介绍部分的 ALTER
example)。
Metasrv 新增基于 RDS(PostgreSQL)实现的选举组件
Metasrv 对元数据存储的 KvBackend 和选举组件进行了抽象设计,支持不同的后端实现。v0.12 版本前只有一个基于 Etcd 的后端实现,随着基于 PostgreSQL 的 KvBackend 和选举组件的完成,用户可选择 PostgreSQL 作为后端,以应对大规模元数据存储和更高的稳定性需求。
性能提升
TSBS 测试结果
与 v0.11 版本相比,v0.12 在整体性能上有显著提升。写入速率提升近 40%,大多数查询性能提升约 30%~40%。
💜p.s. 参考紫色标注部分,详细参数:
https://github.com/GreptimeTeam/greptimedb/blob/main/docs/benchmarks/tsbs/v0.12.0.md
详细对比数据请见下方:
Amazon EC2
Machine | c5d.2xlarge |
CPU | 8 core |
Memory | 16GB |
Disk | 100GB (GP3) |
OS | Ubuntu Server 24.04 LTS |
写入性能
Environment | v0.12 Ingest rate (rows/s) | v0.11 Ingest rate (rows/s) |
---|---|---|
EC2 c5d.2xlarge | 326839.28 | 234620.19 |
查询性能
Query type | v0.12 (ms) | v0.11 (ms) |
---|---|---|
cpu-max-all-1 | 12.46 | 14.75 |
cpu-max-all-8 | 24.20 | 30.69 |
double-groupby-1 | 673.08 | 987.85 |
double-groupby-5 | 963.99 | 1455.95 |
double-groupby-all | 1330.05 | 2143.96 |
groupby-orderby-limit | 952.46 | 1353.49 |
high-cpu-1 | 5.08 | 8.24 |
high-cpu-all | 4638.57 | 5312.82 |
lastpoint | 591.02 | 576.06 |
single-groupby-1-1-1 | 4.06 | 6.01 |
single-groupby-1-1-12 | 4.73 | 7.42 |
single-groupby-1-8-1 | 8.23 | 10.20 |
single-groupby-5-1-1 | 4.61 | 6.70 |
single-groupby-5-1-12 | 5.61 | 8.72 |
single-groupby-5-8-1 | 9.74 | 12.07 |
日志场景测试报告
日志场景测试报告将在几天内发布,敬请关注官网博客更新。
升级提示
在升级到 v0.12 版本之前,建议先把 GreptimeDB 升级到 v0.11,参考 v0.11 的升级指南获取更多信息:https://docs.greptime.com/zh/0.11/user-guide/administration/upgrade/
最新版本的数据格式与 v0.11.x 完全兼容,用户无需导出或导入数据。但 v0.11.x 与最新版本之间存在一些重大不兼容变更,建议进行一些手动操作来升级您的 GreptimeDB。主要的不兼容变更包括:
配置变更
默认的读写缓存路径已更改为:
读缓存路径: ${data_home}/cache/object/read
;写缓存路径: ${data_home}/cache/object/write
;cache_path
仅设置缓存的主目录,默认值为 ${data_home},不建议手动设置,可以让 GreptimeDB 管理缓存路径;部分 experimental 的写缓存配置项升级为正式配置。
之前的写缓存配置为:
[[region_engine]]
[region_engine.mito]
enable_experimental_write_cache = true
experimental_write_cache_size = "10G"
experimental_write_cache_ttl = "8h"
experimental_write_cache_path = "/path/to/write/cache"复制
现在需要改为:
[[region_engine]]
[region_engine.mito]
write_cache_size = "10G"
write_cache_ttl = "8h"
# 不再需要手动设置 write_cache_path。
# write_cache_path = "${data_home}"复制
gRPC 配置项变更
在 v0.12 前,gRPC 配置项为:
## The gRPC server options.
[grpc]
## The address to bind the gRPC server.
addr = "127.0.0.1:3001"
## The hostname advertised to the metasrv,
## and used for connections from outside the host
hostname = "127.0.0.1:3001"复制
v0.12 更改为下列配置:
## The gRPC server options.
[grpc]
## The address to bind the gRPC server.
bind_addr = "127.0.0.1:3001"
## The address advertised to the metasrv, and used for connections from outside the host.
## If left empty or unset, the server will automatically use the IP address of the first network interface
## on the host, with the same port number as the one specified in `grpc.bind_addr`.
server_addr = "127.0.0.1:3001"复制
本次更新包含了两个配置项变更:
addr -> bind_addr
,表示 grpc server 的绑定地址;hostname
->server_addr
,是广播给其他节点的地址,外部通过该地址与当前节点建立连接并通信。
⚠️ 以上修改旨在确保配置项语义清晰明确。
手动创建索引
从 v0.12 开始,GreptimeDB 将倒排索引与主键解耦,不会再自动为主键创建倒排索引,如有需求可以手动创建。请注意此项变更,避免出现查询性能回退,手动设置索引方法如下:
ALTER TABLE `cpu` MODIFY COLUMN `region` SET INVERTED INDEX;
SHOW INDEX FROM `cpu`;
+-------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+-----------------------------------------------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+-----------------------------------------------------+---------+---------------+---------+------------+
| cpu | 1 | PRIMARY | 1 | hostname | A | NULL | NULL | NULL | YES | greptime-primary-key-v1 | | | YES | NULL |
| cpu | 1 | PRIMARY, INVERTED INDEX | 2 | region | A | NULL | NULL | NULL | YES | greptime-primary-key-v1, greptime-inverted-index-v1 | | | YES | NULL |
| cpu | 1 | TIME INDEX | 1 | ts | A | NULL | NULL | NULL | NO | | | | YES | NULL |
+-------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+-----------------------------------------------------+---------+---------------+---------+------------+复制
建表语句统一索引创建语法
v0.12 中更改了 CREATE TABLE
语句,只能使用列约束来创建倒排、跳数和全文索引。在创建索引时,必须在索引类型后指定 INDEX
关键字。
新的写法为:
CREATE TABLE IF NOT EXISTS `logs` (
message STRING NULL FULLTEXT INDEX WITH(analyzer = 'English', case_sensitive = 'false'),
ts TIMESTAMP(9) NOT NULL,
TIME INDEX (ts),
);复制
详情请参考官方最新升级文档:
https://docs.greptime.com/zh/user-guide/administration/upgrade
未来展望
根据一月发布的《GreptimeDB 2025 Roadmap》,GreptimeDB 将持续推进一系列重要功能的更新与优化。下一个版本 v0.13 将聚焦于日志和 Flow Engine 的功能完善,并推出更低成本的全文索引实现。
此外,我们预计将于 6 月份发布 v1.0(General Availability,GA 版本),这是 GreptimeDB 走向成熟的关键里程碑,将涵盖数据库基础能力、性能优化、Log Engine 和 Metric Engine 等多方面的重大更新。
p.s. 我们将陆续推出本次更新的 benchmark 报告,欢迎持续关注。
❝
关于 GreptimeGreptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 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/点击「阅读原文」,立即体验 GreptimeDB!
评论





