openGemini v1.1.0带来了哪些改变?

原创
2023/10/11 17:48
阅读数 22

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

  1. 修复:懒加载和降采样场景下,当存在乱序文件时,没有开启乱序merge功能,导致降采样功能失效
  2. 修复:top/bottom算子返回的查询结果数据中,Tag与Field不匹配
  3. 修复:indexscantransform子DAG构建失败后未关闭cursor
  4. 修复:客户端取消查询的异常场景下,DAG资源未正确释放
  5. 修复:按时间分组查询时,由于分组时间太小,使得分组过多,此时数据已在内存,最终导致OOM
  6. 修复:故障场景删除DB,导致进程退出
  7. 修复:乱序数据合并时出现内部错误导致数据文件混入乱序数据,最终导致按时间分组聚合的查询结果不正确
  8. 修复:ts-sql节点离线或者CQ任务被删除后依然被调度执行
  9. 修复:内核goroutine内存逃逸

总结

openGemini作为一款开源的时序数据库系统,社区蓬勃发展是广大开发者共同的心愿。本文主要介绍v1.1.0正式版本所涉及的主要性能优化、新功能、内核优化和修复的主要Bug。是对前两个rc版本以及近期优化的汇总。

如何参与社区贡献,参考:

  1. https://docs.opengemini.org/zh/dev-guide/get_started/
  2. https://docs.opengemini.org/zh/guide/contribution/Document.html

 

openGemini官网:http://www.openGemini.org

openGemini开源地址:https://github.com/openGemini

openGemini公众号:

欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部