春风吹啊吹CnosDB产品白皮书
目录带有云的诗句>写云的作文
一.背景概述 (3)
二.CnosDB存储引擎 (4)
昆山市城北中学三.CnosDB查询引擎 (8)
四.保留策略 (9)
五.连续查询 (9)
六.订阅机制 (9)
七.CnosDB分布式原理 (10)
八.CnosDB分布式部署架构 (11)
九.产品方案评测数据 (12)
一.背景概述
1.1 研发背景
物联网(The internet of Things,简称IOT)是继互联网后的又一次技术革命,它的出现正与早期的互联网一样,带动企业转型,推动社会经济发展,改变人们的生活方式。随着近几年的发展,IOT技术愈发成熟,网络接入和信息处理能力已经适应多媒体信息传输处理需求,IOT所必需的基础组件(比如传感器等)变得愈发廉价,导致入门门槛变低,正向推动了IOT技术向更多行业渗透的趋势。所以在这样一个大环境下,我们秉承着“一起向未来”的理念,希望研发出一种能够承载海量传感器数据的时间序列数据库。
1.2 产品定位
考试计划CnosDB是开源分布式时间序列数据库,只存储时间序列数据。与此同时,CnosDB遵循开源奉献的精神,对源代码百分之百开源。
CnosDB是一个高性能、高压缩比、高可用性的由社区驱动的开源分布式时序数据库,适用于时序数据的存储,可应用于各种时序场景,如服务器指标、应用程序指标、性能指标、函数接口调用指标等时序数据指标的存储与检测,网络流量数据、探测器数据、日志、市场交易记录等时序数据的存储与管理。其有如下特点:
1.超大数据规模。分布式支持十亿以上的时间序列,支持1000亿以上的数据点存储。支持海量时间序列下的分布式聚合查询。
2.快速的批量写入。定义全新的内存和磁盘数据结构。将硬件资源抽象化,并优化了写入。动态调整节点负载,优化数据偏斜下的性能表现。采用多级存储策略,优化后端IO。
3.超高数据压缩比。采用列式存储多级压缩,综合压缩比超过60倍。
4.丰富的计算函数。CnosQL支持五十多种计算函数。
5.优秀的生态系统。原生支持k8s和docker。支持Java、Go、C/C++、Python开发接口。支持Telegraf,Prometheus、Grafana等第三方工具。
同时CnosDB具有丰富的生态协议,其生态形成思路是:缝合特性,无缝对接,提供基本的存储、查询API,向上兼容多种查询、写入标准。它可以作为Prometheus的长期存储,无缝对接Prometheus。
支持Prometheus查询API,可以在Grafana中直接替换Prometheus的查询。支持InfluxDB API(主要是查询API,
可以在Grafana中直接替换查询)。支持telegraf并且全面兼容InfluxDB
二.CnosDB存储引擎
2.1 基本概念
形容大海的词语CnosDB类似于SQL数据库,但CnosDB是专门为时序数据构建的,可以处理海量的时序数据。SQL数据库可以处理时序数据,但是对于常见的时间序列工作负载没有进行优化,对于时序数据的处理能力远不如CnosDB。CnosDB的数据结构和SQL数据库也有所不同,在CnosDB中,每一条数据由measurement、tag、field 以及timestamp四大部分组成。
measurement,相当于装载tag、field以及timestamp的容器,类似于SQL数据库中的table。field包括field key和field value。field value是您的数据值,field key 是该数据的名称。tag由tag key和tag value组成。tag key和tag value都是字符串类型,并且存储元数据。并不是所有的数据中都要有tag,但是最好每条数据都加上tag。与field不同的是,tag是有索引的。这意味着对于tag的查询会更快。并且tag 是存储常用查询元数据的理想选择。timestamp,即为时间戳,用于表示给定数据系列中的单个点。
2.2 TSM文件
TSM,即Time-Structured Merge Tree,是专为CnosDB设计的数据存储格式。与现有的B+树或LSM树相比,TSM支持更大的压缩和更高的读写吞吐量。TSM 文件中存储经过排序和压缩后的数据。TSM文件是CnosDB最重要的组成部分之一。
CnosDB定期将内存中的时序数据以块为最小读取单位写入TSM文件。每一个TSM文件被分为四个部分:Header、Blocks、Index和Footer。Header记录了TSM 文件的magic,而Footer记录TSM中indexs开始的地方。遍历Index可以查询出所有的ries以及blocks所在的位置。TSM的结构如图2-1所示:
图2-1 TSM文件结构
2.3 Shard
Shard,即分片,其中包含实际编码和压缩的数据,由磁盘上的TSM文件组成。每个shard包含于特定的shard group中。每个shard存储特定的ries。在给定的shard group中,落在给定ries上的所有点都将存储在磁盘上的同一shard(TSM)文件中。
2.4 内存索引
旅游哪里好CnosDB的内存索引是跨分片的共享索引,提供对measurement、tag和ries的快速访问。CnosDB使用ries作为主要的索引,通过对ries的解析查询数据的位置。每一个数据库对应一个ries的索引文件,这些索引文件在实例启动时被加载到内存中,而在ries文件中,索引数据被划分为多个分区,每个分区又分为多个SeriesSegment,每个SeriesSegment相当于一个Series的Entry。在数据写入的时候这些SeriesSegment会被更新。当然这也引入了一些问题,当有巨量ries的时候,数据库会崩溃。
2.5 预写日志
预写日志(即Write Ahead Log,简称WAL),每个数据库的每个保留策略在同一个时间只有一个WAL文件在被写入数据,当新的数据写入的时候,数据将会被Snappy压缩,并写入WAL。它接受多种类型的写入,包括DELETE,DROP,WRITE等。每一个WAL的阈值到达10MB的时候会停止写入,并新建一个新的WAL文件。当然阈值可以在程序编译的时候被更改。在写入到WAL文件之前,还
会在内存当中存储WAL的副本,为了防止占用大量内存,可以通过配置文件中的限制条件对预留空间进行限制、以及WAL向文件系统压缩的时机。
2.6 文件系统
CnosDB的文件系统设计成每一个分片(Shard)独立成一个目录,每个分片的目录下分别存在wal文件、.tsm文件、.tombstone文件、fields.idx文件以及index 文件。其文件目录如图2-2所示。
>综评