本文作者包括 Yu Yan、Bo Zheng、Hongzhi Wang、Jinkai Zhang 和 Yutong Wang,他们分别来自哈尔滨工业大学(Harbin Institute of Technology,Harbin,China)和 CnosDB Inc.(Beijing,China)。本文发表在 2023 年的 Springer Nature Switzerland AG 的《DASFAA 2023》(LNCS 13946)会议上,其 DOI 为:https://doi.org/10.1007⁄978-3-031-30678-5_58。
本研究聚焦于 时间序列数据库(Time-Series Database) 的设计与开发,这是大数据和物联网(Internet of Things, IoT)领域中的核心问题之一。随着电力行业、化学工业的监控设备、分析仪器以及检测仪器等应用的发展,时间序列数据的生成速度加快,数据规模呈指数增长。这些数据普遍具有以下特性: 1. 生成速度快:单个监测点可在一秒内生成大量数据。 2. 唯一时间戳:每条数据都有唯一的时间戳。 3. 采集范围广:实时监测系统通常包含数千个监控点。
传统数据库(如 MySQL)已经难以满足大规模时间序列数据的存储与管理需求,因此近年来出现了各种类型的时间序列数据库管理系统。但现有的分布式时间序列数据库在数据存储效率和写入性能方面仍然存在不足,且难以处理超大规模的时间序列数据。因此,亟需一种扩展性强、存储效率高、写入速度快的时间序列数据库系统来满足工业需求,解决海量数据的管理瓶颈。
CNOSDB 的开发正是基于这一背景,其目标是在云原生环境中构建一个灵活的分布式时间序列数据库,具有更高的写入性能和存储效率,以支持超大规模时间序列数据管理。
本文介绍了 CNOSDB 的设计思路与关键技术,并详细阐述了系统架构、数据压缩算法以及存储策略等内容。
CNOSDB 的系统架构采用 C/S 模式,由 Golang 构建,具有良好的节点扩展性。它主要分为三个部分: 1. 客户端(Client):用户通过 HTTP 或 UDP 提交请求(如创建、插入、查询、删除等)。 2. 管理节点(Management Node):负责解析用户请求并执行查询任务。其中,Meta Module
是管理节点的核心,负责控制整个数据库的元数据,包括数据实体字段、验证规则、数据类型等;Time-to-Live (TTL)
模块控制数据的生命周期,通过以 bucket-vnode
(桶-虚拟节点)为单位实现高效的数据过期管理,而非对部分数据进行筛选操作。 3. 数据节点(Data Node):用于存储分片的数据,同时采用哈希算法实现数据负载均衡。为了提升写入性能,采用 LSM 树结构(Log-Structured Merge-tree)实现顺序写入操作。
时间序列数据生成速度快,容易占用大量存储资源。因此,CNOSDB 集成了多种数据压缩算法,针对不同类型的时间序列数据(如时间戳、整数、浮点数等)进行优化,主要包括: - 时间戳压缩:使用 Delta-of-Delta 算法,通过计算相邻时间戳的差值,再对差值的差值进行编码,减少时间跨度。 - 整数压缩:在编码时,首先使用 Zigzag 编码;若编码值小于 Simple8b 的最大值,则使用 Simple8b 编码,否则直接存储原始值。 - 浮点数压缩:采取 XOR 差值计算方法,第一个浮点数使用完整的 8 字节存储,后续值使用与前一个数的异或差值存储。 - 其他数据类型:如字符串使用 Snappy 压缩,布尔值使用简单的位打包策略。
此外,CNOSDB 引入了一种自适应压缩策略,将数据拟合为周期性或非周期性函数进行存储,从而进一步提升整体压缩率。
考虑到时间序列数据通常查询频率低、写入速度要求高,且数据的生命周期管理较为严格,CNOSDB 设计了一个三层存储策略,包括数据层、桶层与顺序写入层: 1. 数据分片(Shard):以时间戳为基础自动生成分片,根据用户设置的数据保留策略确定时间区间,并将插入数据路由到相应的 bucket-vnode
。 2. 分组操作(Grouping):为避免 “热写” 问题,在时间区间内部通过哈希算法进一步划分分组。 3. 顺序写入(Sequential Writing):采用 LSM 树结构,在最终的存储节点上实现批量数据的顺序写入。
实验结果表明,CNOSDB 在支持高效的写入性能和查询能力方面表现卓越: 1. 写入性能:使用批量大小为 20,000 的数据,系统可以在秒级时间内完成写入任务。 2. 查询速度:对数据的查询可以在毫秒级时间内完成。 3. 压缩效果:通过整合多种数据压缩算法,系统实现了针对不同数据类型的高压缩率,大幅减少了存储空间的占用。
此外,CNOSDB 的用户界面(UI)友好,支持命令行交互与图形界面,不仅能轻松切换与管理数据保留策略,还能实时监控数据库的读写请求频率和传输速度。
CNOSDB 的突出特点在于: 1. 系统结合了多种压缩算法,针对时间戳、整数和浮点数等数据类型分别优化存储效率,大幅提升了数据压缩比。 2. 创新性的三层存储策略保障了系统的高效写入性能,并提供了基于时间戳的批处理能力。 3. 分布式架构及负载均衡策略提升了系统扩展性和节点同步能力。
本研究为云原生分布式时间序列数据库的设计提供了新的方法论,也为工业领域(如电力、化学工程等)的大规模数据管理带来了高效可靠的解决方案。
CNOSDB 的开发对大规模时间序列数据的管理有着重要的实际意义,不仅能够应用于电力、工业检测等领域,还为金融、医疗等需要处理高频率、多维度时序数据的应用场景提供技术支持。此外,其高压缩率和高性能特性也为降低企业存储开销提供了可行方案。
未来,CNOSDB 可以进一步优化其分布式算法和负载均衡策略,同时增加对更多复杂查询场景的支持。此外,在云原生技术的基础上扩展其多租户能力以及跨平台兼容性,进一步提升数据库的普适性和实用性,也是值得探索的领域。