openGemini v1.1.0带来了哪些改变?
openGemini是一款开源、高性能、分布式时序数据库,专注于海量遥测数据存储与分析,采用MPP大规模并行处理架构,兼容InfluxDB的API接口、支持InfluxQL及其周边工具集,具备高扩展性(100+节点的集群规模),支持多平台和多形态部署。
本次社区在前2个rc版本基础上,稳定性更好,发布v1.1.0正式版本,汇集了哪些改变和提升?请耐心读完本文。
本文主要内容包括:
- 性能优化
- 新功能
- 内核优化
- 修复主要Bug
性能优化
性能优化是社区长期坚持的主要工作,在v1.1.0-rc1版本上,性能有了非常大的突破,横向对比性能领先优势明显,纵向对比较v1.0.1版本提升200%-300%。详细请参考性能测试
新功能
高基数存储引擎
高基数是指数据库中某标签字段的值域非常大,比如IP地址,动辄可能千万,再比如交通领域的车牌号,稍微大一点的城市动辄几百万辆车。高基数带来的后果是时序数据库内部时间线急剧增加,可达到数百亿规模,甚至更高,直接表现为索引膨胀,内存资源占用增多,查询效率下降。高基数问题是所有时序数据库普遍面临的一个共同难题。
openGemini自研高基数存储引擎,旨为解决高基数问题,具备明显效果,具体用法参考官网文档
数据订阅 (Subscription)
openGemini数据订阅是将写入openGemini的数据快速分发到本地或远端支持HTTP或HTTPS的节点,通常可用于数据异常检测和数据同步等应用场景。数据订阅以DB为单位,一个终端可以订阅多个DB数据,一个DB可以被多个终端订阅数据。
管理数据订阅任务,请参考官网文档
查询管理 (Query Management)
openGemini查询管理是一个非常实用的功能,可以通过show queries
命令查看当前内核中正在运行的所有查询,还包括database,duration,status,host等信息。通过查看duration,了解查询语句的执行时间,可通过命令kill
终止查询语句的执行。
当前版本的查询管理功能暂不受用户权限限制,将在下一个版本提供权限控制
查询管理功能详情,请参考官网文档
降采样查询 (Continue Query)
openGemini降采样功能是将历史明细数据读取出来,通过后台任务完成相应的降采样计算工作,再将结果重写入新的表中存储,上层应用仅需从结果表中查询降采样后的数据即可。该功能会造成一定的数据读写放大,增加磁盘IO带宽,如果需要对实时数据进行降采样,推荐使用Stream功能。
降采样功能详情,请参考官网文档
日志存储和检索
openGemini日志存储是将日志数据转为openGemini支持的数据格式写入,日志检索是指通过文本关键字在openGemini中检索包含关键字的所有日志数据,支持模糊匹配、正则匹配和精确匹配三种。需要注意的是,日志检索需要在特定的日志消息字段上显示创建文本索引,而创建索引只能通过创表创建。
内存过载保护
openGemini过载保护机制是指当内存使用超过一定水位线时,系统自动杀死所有内核中正在执行的查询语句,以确保系统的可靠性。该功能通过配置项打开,默认关闭。openGemini.conf配置文件的配置示例如下:
## If queries are auto killed for store service
interrupt-query = true
## The default store mem percent threshold of start killing query
interrupt-sql-mem-pct = 90
- interrupt-query = true,表示开启
- interrupt-sql-mem-pct = 90,表示内存使用超过90%便会清理正在执行的查询语句。
内核优化
openGemini在v1.1.0-rc1,v1.1.0-rc2和v1.1.0三个版本上进行了非常多的内核优化,分别是:
- 节点启动支持shard级lazy启动
- 扩大groupcursor limit下推的优化场景
- 写流程的刷盘代码逻辑优化
- 支持单查询多SQL语句并发查询
- GC优化
- 优化读IO流控,限制后台读带宽
- 精简代码逻辑,删除冗余流程
- 新增gzipwritepool
- 新增查询文件句柄cache
- 缓存池处理逻辑优化
- 仅前台业务使用读缓存
- 删除单shard查询时的merge算子
- hint查询使用模板生成查询计划
修复Bugs
- 修复:懒加载和降采样场景下,当存在乱序文件时,没有开启乱序merge功能,导致降采样功能失效
- 修复:top/bottom算子返回的查询结果数据中,Tag与Field不匹配
- 修复:indexscantransform子DAG构建失败后未关闭cursor
- 修复:客户端取消查询的异常场景下,DAG资源未正确释放
- 修复:按时间分组查询时,由于分组时间太小,使得分组过多,此时数据已在内存,最终导致OOM
- 修复:故障场景删除DB,导致进程退出
- 修复:乱序数据合并时出现内部错误导致数据文件混入乱序数据,最终导致按时间分组聚合的查询结果不正确
- 修复:ts-sql节点离线或者CQ任务被删除后依然被调度执行
- 修复:内核goroutine内存逃逸
总结
openGemini作为一款开源的时序数据库系统,社区蓬勃发展是广大开发者共同的心愿。本文主要介绍v1.1.0正式版本所涉及的主要性能优化、新功能、内核优化和修复的主要Bug。是对前两个rc版本以及近期优化的汇总。
如何参与社区贡献,参考:
- https://docs.opengemini.org/zh/dev-guide/get_started/
- https://docs.opengemini.org/zh/guide/contribution/Document.html
openGemini官网:http://www.openGemini.org
openGemini开源地址:https://github.com/openGemini
openGemini公众号:
欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!
开源框架 NanUI 作者转行卖钢材,项目暂停开发 苹果 App Store 免费榜第一是黄色软件 TypeScript 刚刚流行起来,为什么大牛们就开始抛弃了? TIOBE 10 月榜单:Java 跌幅最大,C# 逼近 Java Rust 1.73.0 发布 男子受 AI 女友怂恿刺杀英国女王,被判入狱九年 Qt 6.6 正式发布 路透社:RISC-V 技术成为中美科技战的新战场 RISC-V:不受任何单一公司或国家的控制 联想计划推出 Android PC