云数据库GeminiDB Influx接口,更好用的时序数据库
GeminiDB Influx接口是一款基于计算存储分离架构。在云计算平台高性能、高可用、高可靠、高安全、可弹性伸缩的基础上,提供了一键部署、快速备份恢复、计算存储独立扩容、监控告警等服务能力。广泛应用于资源监控,业务监控分析,物联网设备实时监控,工业生产监控,生产质量评估和故障回溯等。提供大并发的时序数据读写,压缩存储和类SQL查询,并且支持多维聚合计算和数据可视化分析能力。
GeminiDB Influx接口,弹性扩展、超高性能,全时序场景支持的时序数据库
云数据库GeminiDB Influx接口5大特性
采用云原生存储与计算分离架构,具有支持亿级时间线、极致写入性能、低存储成本、高性能多维聚合查询和极致弹性扩缩容等5大特性。
在时序数据库系统中,存在大量并发查询和写入操作,合理控制内存的使用量显得十分重要。
开源时序数据库在写入数据的时间线增加到千万级别时,进程会因内存耗尽而OOM退出。为了避免写入海量时间线数据导致内存资源被耗尽,GeminiDB Influx接口做了如下优化:
1、在内存分配上,大量使用内存池复用技术,减少临时对象内存申请,降低内存碎片。
2、在内存回收上,实现算法根据内存负载,动态调整GC频率,加快内存空间回收。
3、在单查询上,实行Quota控制,避免单查询耗尽内存。
4、在缓存使用上,针对不同节点规格提供不同的最优配置。
经过改进,在海量时间线下,系统写入性能保持稳定,大幅超出开源实现。对于涉及海量时间线的聚合查询,如高散列聚合查询,查询性能提升更为显著。
相比单机模式,集群模式可以将写入负载分散到集群中各个计算节点上,从而支持更大规模的数据写入。GeminiDB Influx接口支持每天万亿条数据写入,在工程实现上进行了以下优化:
1、时序数据按照时间线做Hash Partition,利用所有节点并行写入,充分发挥集群优势。
2、Shard节点采用针对写场景优化的LSM-Tree布局,写WAL后确保日志持久化,再写入内存Buffer即可返回。
3、数据库多副本复制卸载到分布式存储,降低计算节点到存储节点的网络流量。
4、在大规模写入场景下,GeminiDB Influx接口的写入性能线性扩展度大于80%。
GeminiDB Influx接口对数据采用列式存储,相同类型的数据被集中存储,更有利于数据压缩。采用自研的时序数据自适应压缩算法,在压缩前对数据进行抽样分析,根据数据量、数据分布以及数据类型选择最合适的数据压缩算法。在压缩算法上,相比原生的InfluxDB,重点针对Float、String、Timestamp这三种数据类型进行了优化和改进。
Float数据类型: 对Gorilla压缩算法进行了优化,将可以无损转换的数值转为整数,再根据数据特点,选择最合适的数据压缩算法。
String数据类型:采用了压缩效率更好的ZSTD压缩算法,并根据待压缩数据的Length使用不同Level的编码方法。
Timestamp数据类型:采用差量压缩方法,最后还针对数据文件内的Timestamp进行相似性压缩,进一步降低时序数据存储成本。
在提升聚合查询整体性能方面,GeminiDB Influx接口 做了如下优化:
采用MPP架构:一条查询语句可以在多节点及多核并发执行。
向量化查询引擎:在查询结果数据量很大时,传统的火山模型每次迭代返回一条数据,存在过多的开销导致性能瓶颈。GaussDB(for Influx)内部实现了向量化查询引擎,每次迭代批量返回数据,大大减少了额外开销。
增量聚合引擎:基于滑动窗口的聚合查询,大部分从聚合结果缓存中直接命中,仅需要聚合增量数据部分即可。
多维倒排索引:支持多维多条件组合查询,避免大量Scan数据。
存储摘要索引:加快数据查询中过滤无关数据。
在时序数据库的运行过程中,随着业务量的增加,常常需要对数据库进行在线扩容,以满足业务的要求。传统数据库中的数据存储在本地,扩容后往往需要迁移数据。当数据量达到一定规模时,数据迁移所耗费的时间往往按天计算,给运维带来了很大的困难。
如图所示,每个Database逻辑上由多个Partition组成,每个Partition独立存储,且都可自描述。所有Partition数据都存储在分布式共享存储上,数据库Shard节点和数据没有物理绑定关系。扩容时首先offload源节点Partition,再在目标节点assign即可。