tdengine3.0的升级逻辑解读

beyondma beyondma     2023-01-04     315

关键词:

数据库作为数字基础设施的根技术,已有 60 年发展历程,历经上世纪 50 年代的层次数据库、网状数据库,到上世纪 70 年代的关系型数据库,再到上世纪 90 年代的分析型数据库,2000 年的非关系型数据库,几个发展阶段,其中时序数据库,主要是针对近来火爆全球的AIOT场景而专门打造的,兴起时间倒并不长,而在一众时序数据库产品中TDEngine目前所取得的成绩明显力压力压群雄,其产品升级迭代的路线非常符合时代的要求,本文我们就来为大家解读TDEngine升级背后的逻辑。

在这个数字化的时代中人们对数字体验提出全量、全要素、全流程等数字化新需求,这给数据库提出新的挑战。为适应这个挑战我们看到2022年国产数据库都开始向云原生化的方向转型,而TDEngineV3各版本中优化的虚拟节点(Vnode),新增的弹性计算节点(Qnode)和流计算节点(Snode),全部是围绕云原生这个特性展开,并且特别贴合于时序数据库的实际使用场景。

基础背景-传统数据库与时序数据库的云原生转型有何不同

云原生是Do more with less理念的产物,也就是让用户以更少的操作,来实现更多更智能化的效果。目前绝大部分的传统数据库的云版本,大多以ECS中的自建数据库和云厂商托管的数据库RDS的形态存在的,这些云数据库架构使用的是传统数据库的架构,只是运行在云的基础设施上,数据库本身并没有为云做太多的改造和适配。

从技术层面上讲传统的云数据库除了实现存储和计算分离和一写多读以外,还有很强的冲动云将CPU和内存的绑定关系进行解耦,因为传统数据库的使用场景很多,CPU资源和内存资源如果作为一个整体,只能作为一个最小的单位升降级的话(一般都是1C2G的计算内存配比),对用户来说是不合理的,比如对AP类分析弄数据库,用户使用少数CPU来定期同步和更新数据。但为了避免从磁盘来读取数据的时间延迟。维表数据,或者中间结果需要缓存在内存里,需要较大内存,但对TP交易型数据库来说,数据访问一般存在热点,因此少量的内存就足够保证缓存命中率超过99%,但高峰时CPU需要弹到64c甚至更多核,CPU的需求会高于内存的需求。

因此我们看到所有数据库厂商都提出口号要实现云原生方面的转型,但是具体到不同类型的产品上讲,这个诉求是不同的,传统数据库厂商到要做将计算资源和内存分别进行池化,使得弹性能力更进一步提升,这是使用场景决定的。

我们看到时序数据库(Time Series Database)这种相对使用场景比较固定的门类,它展开云原生转型的路线实际上是围绕分布式改造和流式计算这两个核心来展开,只有把这两个点做好才符合云原生Do more with less的理念。

TDEngine云原生路线解读

正如我们前文所说,传统数据库的云原生技术升级,主要是把计算资源和内存资源全部池化,从而解决计算内存资源比例绑定而产生的浪费问题。但是时序数据库使用场景比较固定,因此基本不存在计算资源和内存资源需要解耦,并分别池化的需求。

元数据存储的分布式改造:因此我们看到TDengine3最重要的升级就是全面的分布式改造,TDengine之前版本中对于数据一直使用分布式架构处理,在时间轴上以天或周为单位对数据进行切分,同时将定量设备的数据分配给每个区(Vnode)进行处理。3.0 版本让TDengine对元数据的管理也变成了完全分布式的。

在传统数据库中RDB也就是元数据的量往往很小,因此集中式存储一般问题不大,但是在时序数据库中元数据是所以采集点的标签数据,如果是电表标签的话,那个元数据可能有上亿条,数据量级会非常大,因此TDengine 3.0的版本中管理节点不再存储每个设备或每张表的元数据了,而是把这些元数据还有时序数据完全存储在 vnode 里,之后会用 B+ 树、一致性哈希来处理。这样一来,TDengine在插入一个数据到任何一个片或者一个区时都不再需要经过任何中间节点,彻底解决了采集数据分布过多且与标签数据点乘带来的高基数问题。同时 Vnode 也可以进行拆分或合并,保证存储也可以弹性伸缩。

引入弹性计算节点Qnode,适配弹性伸缩需求:在完成元数据的分布式改造的同时,Qnode流式计算节点的引入让TDengine完全实现了计算和存储分离,Qnode 不是系统必需的节点,支持动态地启动、停止,也就是说它的计算资源可以动态地进行操控,这样就实现了存算分离。而且TDengine3.0 版本还针对容器化部署的需求,给出了详细的 Kubernetes 部署文档,只需修改两个配置文件,马上就能部署整个TDengine集群,极其简单。

增加对于流式计算的支持:流式计算是我们日常使用数据过程中所经常遇到的一种计算模式,流式计算中流的概念,一方面是指把数据当成数据流处理由数据驱动计算的完成,提升计算指标的实效性;另一方面是指将计算和传统的工作流结合,更高效的完成数据的分析、统计等工作。

比如在笔者日常的工作中就会订阅一些高净值客户的动帐情况,一旦遇到有高额的理财或者基金赎回,就会匹配一些对应的产品推荐给客户,这些推荐对于挽留客户一般都有着比较好的效果,但是对于实效性的要求也很高,因此流式计算在这方面应用比较多。

我相信TDengine3.0的版本规划时肯定是充分调研了市场的需求,因为流式计算也就是实时数据流计算,一般都要与kafka等消息队列产品搭配使用,比如我们上文所说的高净值客户的理财赎回,其实就是我们关注的一类消息,这类消息我们往往需要用消息中间件处理,而TDengine则自带了消息订阅的服务,而且TDengine3.0新引入的流计算节点Snode,还全面支持用SQL语句定义的流计算过程。这就更方面用户在此基础上更好的挖掘数据的价值,利用TDengine来简单高效得创建一体化的数据存储及处理平台。

tdengine3.0的升级逻辑解读

数据库作为数字基础设施的根技术,已有60年发展历程,历经上世纪50年代的层次数据库、网状数据库,到上世纪70年代的关系型数据库,再到上世纪90年代的分析型数据库,2000年的非关系型数据库,几个发... 查看详情

重磅升级!tdengine3.0正式发布(代码片段)

...终于可以骄傲地宣布这一消息。这是一次重磅升级,TDengine3.0是真正的云原生时序数据库(Time-SeriesDatabase,TSDB)。我们先来整体看一下3.0的几大亮点:可以支持10亿个设备采 查看详情

r语言广义线性模型函数glmglm函数构建逻辑回归模型(logisticregression)模型参数解读查看系数的加法效应(interpretingthemodelparameters

R语言广义线性模型函数GLM、glm函数构建逻辑回归模型(Logisticregression)、模型参数解读、查看系数的加法效应(Interpretingthemodelparameters)目录 查看详情

解读将 Visual C++ 6 项目升级到 Visual Studio 2008 时出现的错误

】解读将VisualC++6项目升级到VisualStudio2008时出现的错误【英文标题】:DecipheringerrorsinupgradingaVisualC++6projecttoVisualStudio2008【发布时间】:2009-05-1519:57:06【问题描述】:我想看看能否将这个名为MouseTool的已失效开源项目与WindowsVista一... 查看详情

腾讯开源的paxos库phxpaxos代码解读---prepare阶段

简单的画了一下PhxPaxos在Prepare阶段的逻辑,主要是正常的逻辑,异常逻辑和超时后面再写了; 熟悉PhxPaxos代码最好的方法是编译运行sample目录下的三个例子,编译方法在另一篇博客已经写了,这里忽略;      一:Proposor在P... 查看详情

vue2升级到vue3到底是不是一个正确的选择?(尤雨溪亲自回复解读)(代码片段)

...//juejin.cn/post/7117525259212816414就在前两天,一篇反对Vue2升级到Vue3的文章在vue官方社区引起了热议。(原文链接:Vue3wasamistakethatweshouldnotrepeat[1])这篇文章从实际应用角度出发,分析了Vue2到Vu 查看详情

XCode 3.2.4 升级后进行逻辑测试的问题

】XCode3.2.4升级后进行逻辑测试的问题【英文标题】:ProblemdoinglogictestsafterXCode3.2.4upgrade【发布时间】:2010-09-1021:03:40【问题描述】:最近升级到XCode3.2.4和iOSSDK4.1导致我的单元测试不再适用于我的iOS项目。该项目目前只在模拟器... 查看详情

正确的解读正则表达式的方式

...但按照字符来解读更易于明白新遇到的正则表达式的内部逻辑。 查看详情

node.jsrequire()源码解读

...equire()的基本用法分析源码之前,先介绍require语句的内部逻辑。如 查看详情

深度解读!阿里统一应用管理架构升级的教训与实践(代码片段)

...准应用定义与交付模型进行应用管理产品与项目统一架构升级的技术工作。事实上,早在2018年末,当Kubernetes项目正式成为阿里巴巴的应用基础设施底盘之后,阿里内部以及阿里云产品线在应用管理领域的碎片化问题就开始日渐... 查看详情

polardb-x源码解读:ddl的一生(下)(代码片段)

...0c;从DDL开发者的视角介绍了如何在DDL引擎框架下实现一个逻辑DDL。在本篇,作者将从DDL引擎的视角出发,向读者介绍DDL引擎的架构、实现,以及DDL引擎与DDLJob的交互逻辑。在阅读本文之前,建议读者先阅读《DDL的... 查看详情

新政解读:《深圳市龙岗区增加经营性设施综合整治类旧工业区升级改造操作规定(试行)》(征求意见稿)

???2020年2月17日,为加快龙岗区综合整治类旧工业区升级改造工作,破除政策障碍,加大扶持力度,根据上层相关政策,龙岗区城市更新和土地整备局制定了《深圳市龙岗区增加经营性设施综合整治类旧工业区升级改造操作规定... 查看详情

分布式系统中的时钟与一致性解读

...用,转载请联系小编并注明来源。1物理时钟与问题2逻辑时钟LogiclClock,LC3向量时钟VectorClock,VC4TrueTime,TT5混合逻辑时钟HybridLogicalClocks,HLC5.1概念预介绍5.2算法介绍6一致性6.1理论中的一致性6.2分布式系统中实现的... 查看详情

elastic认证特训营难点解读07——到底disjunctionmaxquery是什么鬼?(代码片段)

1、Disjunction定义逻辑或(logicalor)又称逻辑析取(logicaldisjunction)。理解成或就很好解释了。Disjunctionmax通俗解释为:多个之间取或的最大值。2、官方文档直翻译将任何与任一查询匹配的文档作为结果返回,但只将最佳匹配的评... 查看详情

智能家居瓶颈解读

近年来,国家对物联网的政策支持和基础硬件升级,特别是无线传感器网络技术,使“智能家居”再次进入人们的视野。 今天,许多公司已经开始聚在一起跳跃这个行业。个人认为,在这个阶段的智能家居没有成功的... 查看详情

fasterrcnn代码解读(代码片段)

...见./data/dataset.py中的类Dataset与TestDataset。数据载入部分的逻辑 查看详情

vue2升级到vue3到底是不是一个正确的选择?(尤雨溪亲自回复解读)(代码片段)

...//juejin.cn/post/7117525259212816414就在前两天,一篇反对Vue2升级到Vue3的文章在vue官方社区引起了热议。(原文链接:Vue3wasamistakethatweshouldnotrepeat[1])这篇文章从实际应用角度出发,分析了Vue2到Vue3在真实项目中实操... 查看详情

猜数小游戏升级版(io流实现,对io流进行加强理解运用)(代码片段)

猜数小游戏(IO流实现,对IO流进行加强理解运用)文章目录猜数小游戏(IO流实现,对IO流进行加强理解运用)前言一、设计简单的猜数游戏1.游戏内容二、猜数游戏逻辑及实现1.需要实现的逻辑2.代码实现3... 查看详情