编辑: 木头飞艇 2017-11-20

3 TDengine 系统结构 TDengine 是基于硬件、软件系统不可靠、一定会有故障的假设进行设计的,是基于 任何单台计算机都无足够能力处理海量数据的假设进行设计的,因此 TDengine 从研 发的第一天起,就是按照分布式高可靠架构进行设计的,是完全去中心化的. TDengine 整个系统结构如图所示,下面对一些基本概念进行介绍. TDengine 白皮书 第4页?北京涛思数据科技有限公司版权所有 物理节点:集群里的任何一台物理机器(dnode),根据其具体的 CPU、Memory、存 储和其他物理资源,TDengine 将自动配置多个虚拟节点. 虚拟数据节点:存储具体的时序数据,所有针对时序数据的插入和查询操作,都在虚 拟数据节点上进行(图例中用 V 标明).位于不同物理机器上的虚拟数据节点可以组 成一个虚拟数据节点组(如图例中 dnode0 中的 V0, dnode1 中的 V1, dnode6 中的 V2 组成了一个组),虚拟节点组里的虚拟节点的数据是以 P2P 的方式完全实时同步 的,以保证一份数据在多台物理机器上有拷贝,而且即使一台物理机器宕机,总有位 于其他物理机器上的虚拟节点能处理数据请求,从而保证系统运行的高可靠性. 虚拟管理节点:负责所有节点运行状态的采集、节点的负载均衡,以及所有 Meta Data 的管理,包括用户、数据库、表的管理(图例中用 M 标明).当应用需要插入 或查询一张表时,如果不知道这张表位于哪个数据节点,应用会连接管理节点来获取 该信息.Meta Data 的管理也需要有高可靠的保证,系统采用 Master-Slave 的机 制,容许多到

5 个虚拟管理节点组成一个虚拟管理节点集群(如图例中的 M0, M1, M2).这个虚拟管理节点集群的创建是完全自动的,无需任何人工干预,应用也无需 知道虚拟管理节点具体在哪台物理机器上运行. 集群对外服务 IP:整个系统可以由多台甚至数万台服务器组成,但对于应用而言,只 需要提供整个集群中任何一台或两台服务器的 IP 地址即可. TDengine 将根据应用 的请求,自动的将请求转发到相应的一个甚至多个节点进行处理,包括聚合、计算操 作等.这些复杂的分发和路由对应用是完全透明的.

4 TDengine 存储结构 为提高压缩和查询效率,TDengine 采用列式存储.但与众多的时序数据库不一样的 是,TDengine 将每一个采集点的数据作为数据库中的一张独立的表来存储,对于一 个采集点而言,无论在内存还是硬盘上,数据点在介质上是连续存放的,这样大幅减 少随机读取操作,数量级的提升读取和查询效率.整个写的过程如图所示: TDengine 白皮书 第5页?北京涛思数据科技有限公司版权所有 写入数据时,先将数据点写进 Commit 日志,然后转发给同一虚拟节点组里的其他节 点,再按列写入分配的内存块.当内存块的剩余空间达到一定临界值或设定的 commit 时间时, 内存块的数据将写入硬盘.内存块是固定大小(如16K)的, 但依据系 统内存的大小,每个采集点可以分配一个到多个内存块,采取 LRU 策略进行管理. 在一个内存块里,数据是连续存放的,但块与块是不连续的,因此 TDengine 为每一 个表在内存里建立有块的索引,以方便写入和查询. 数据写入硬盘是以添加日志的方式进行的,以大幅提高落盘的速度.为避免合并操 作,每个采集点(表)的数据也是按块存储,在一个块内,数据点是按列连续存放 的,但块与块之间可以不是连续的. TDengine 对每张表会维护一索引,保存每个数 据块在文件中的偏移量,起始时间、数据点数、压缩算法等信息.每个数据文件仅仅 保存固定一段时间的数据(比如一周,可以配置),因此一个表的数据会分布在多个数 据文件中.查询时,根据给定的时间段,TDengine 将计算出查找的数据会在哪个数 据文件,然后读取.这样大幅减少了硬盘操作次数.多个数据文件的设计还有利于数 据同步、数据恢复、数据自动删除操作,更有利于数据按照新旧程度在不同物理介质 上存储,比如最新的数据存放在 SSD 盘上,最老的数据存放在大容量但慢速的硬盘 上.通过这样的设计,TDengine 将硬盘的随机读取几乎降为零,从而大幅提升写入 和查询效率,让TDengine 在很廉价的存储设备上也有超强的性能. 为减少文件个数,一个虚拟节点内的所有表在同一时间段的数据都是存储在同一个数 据文件里,而不是一张表一个数据文件.但是对于一个数据节点,每个虚拟节点都会 有自己独立的数据文件. TDengine 白皮书 第6页?北京涛思数据科技有限公司版权所有

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题