首页 > 其他分享 >体验 TDengine 3.0 高性能的第一步,请学会控制建表策略

体验 TDengine 3.0 高性能的第一步,请学会控制建表策略

时间:2023-06-14 11:46:26浏览次数:52  
标签:vgroups 建表 TDengine vgroup vnode 3.0 2.0

正如我们之前所言,在 3.0 当中,我们在产品底层做了很大的变化调整,除了架构更加科学高效以外,用户体验也是我们重点优化的方向。以之前一篇文章为例:对于 Update 功能,用户不再需要任何配置 ,默认即是比 2.0 更完善的机制。(https://mp.weixin.qq.com/s/7E8kl9W8IXROx_K0EGQPkg

切换到 3.0 版本之后,我们面对的第一个问题就是建库建表,在 3.0 版本中,这部分逻辑发生了重大变化,这对于 3.0 初体验的用户来说是十分重要的,是数据库后续查询/写入性能保障的根基。有些表数量比较多的用户刚换到 3.0 的时候,会感觉性能和 2.x 差一些,其实就是因为建库时使用了默认配置,导致 vgroup 数量只有 2 个,因此无法利用到 TDengine 多线程并行的特性来处理数据。

相比起 2.0 ,3.0 的建表策略控制是很简单的,它可以让用户无难度无成本地找到自己适合的配置。
简而言之:只需要在建库的时候指定合适的参数即可。
在 2.0 版本中,很多用户都阅读过这篇文章:https://mp.weixin.qq.com/s/H2GCESF40wnWYf4IKP_-9g,以期用自定义的建表逻辑来获得更好的性能,更合理的开销。

这篇文章中的几个参数的逻辑着实是需要读者好好理解一番的,而它复杂的根本在于,在 2.0 版本下,每个 vnode 的表数量在固定后是不可再调整的,所以只可以通过前期设定相对复杂的规则来实施控制。

而在 3.0 中,为了支持云原生场景下资源的灵活调配,不论是时序数据与元数据都需要分布式技术才可以做到。为此,我们把存在于 mnode 的普通表元数据移除(具体细节可参考:https://www.taosdata.com/engineering/14534.html),让其完全分布到了 vnode 上,采取了一致性哈希这种具有较好的容错性和可扩展性的算法,以支持 vnode 的可拆分的特性(该特性会在未来的 3.x 企业版本中发布)

 

因此, 3.0 和 2.0 的建表流程是完全不一样的,细节如下:

1.首先在建库时,每个 vgroup 会负责存储 0 至 2 的 32 次方-1 的等分长度;

2.建表阶段,TDengine 3.0 首先会在客户端通过对表名进行 hash 计算,得到一个 hash 值;

3.向管理节点发出 rpc 请求,取回数据库配置和 vgroups 的相关内容等信息;

4.把建表请求中的 hash 值和取回的每个 vgroup 的 hash 范围做一个比对;

5.把请求直接发送到对应的 vgroup 中的 vnode 上完成建表。(如果对 vgroup 和 vnode 的关系并不清晰,可以先移步 https://docs.taosdata.com/tdinternal/arch/

基于以上全新的建表方式,我们可以发现,所建的每一个表的走向完全是受哈希函数来控制的,我们只需要控制好容器的数量就行了。 

因此,在 database 级别,我们引入了这样一个参数—— vgroups ,用来指定该数据库使用的 vgroup 的数量。
比如:
create database test vgroups 8 ;
就会创建一个拥有 8 个 vgroup 的数据库 test ,你在这个库下新建的所有表,都会均匀地分配在 8 个 vgroup 里面。

 

而在他的上一级,还有更高级别的参数 supportVnodes(默认 /etc/taos/taos.cfg 中配置),它决定了该数据节点可以支持的 vnode 数量,默认值为 0 ,代表 CPU 核数的2倍。

 

我们建库时需要确保该 dnode(数据节点)的 supportVnodes 参数大于等于所有库的 vgroups 参数之和即可(集群同理,但需要留意多副本导致的 vnode 数量翻倍),否则会就报如下错误:Out of dnodes,提示你需要补充新的 dnode。

显然,在 3.0 的架构下,用户在建表的时候就省心多了,大家只需根据硬件资源规划好 vgroups 的数量就行了。

在 vgroups 参数值的估算上,对于大部分场景依然保持和 2.0 一样的逻辑。即——由于每个 vnode 都是一个相对独立的工作单元,具有独立的运行线程和内存空间,所以不超过该机器 CPU 核数的 2 倍即可

但对于一些特定场景,vgroups 的值则需要结合多方因素做更精细化的计算,需要自己理解和多多调试,也欢迎联系企业版团队得到更深层次的性能优化

标签:vgroups,建表,TDengine,vgroup,vnode,3.0,2.0
From: https://www.cnblogs.com/taosdata/p/17479748.html

相关文章

  • Servlet3.0
     一、Servlet3.0介绍Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。二、开发Servlet3.0程序的所需要的环境开发Servlet3.0的程序需要一定的环境支持。Tomcat7都提供了对JavaEE6规范的支持。Tomcat需要Tomcat7才支持JavaE......
  • mysql创建表时,字段的类型(转载)
    常用的字段类型大致可以分为数值类型、字符串类型、日期时间类型三大类,下面我们按照分类依次来介绍下。1、数值类型数值类型大类又可以分为整型、浮点型、定点型三小类。  2、字符串类型字符串类型也经常用到,常用的几个类型如下表: 其中char和varchar是最常用到......
  • 从开源到云原生,时序数据库 TDengine 六年回顾精彩纷呈
    2023年6月6日,涛思数据旗下时序数据库(TimeSeriesDatabase)TDengine迎来六周年庆典,并于北京·保利国际广场T2举办了主题为“TDengine6thAnniversary:BacktoTheFuture”的庆典活动,设置了「TDengine」时序照片亭、「TDengineDatabase」主题鸡尾酒、寻找TDengine等诸多有......
  • 从开源到云原生,时序数据库 TDengine 六年回顾精彩纷呈
    2023年6月6日,涛思数据旗下时序数据库(TimeSeriesDatabase)TDengine迎来六周年庆典,并于北京·保利国际广场T2举办了主题为“TDengine6thAnniversary:BacktoTheFuture”的庆典活动,设置了「TDengine」时序照片亭、「TDengineDatabase」主题鸡尾酒、寻找TDengine等诸多......
  • 互联网3.0:数字化经济
    在当今数字化时代,互联网3.0正在以惊人的速度崛起,并带来了前所未有的数字化经济机遇。这一新的互联网时代正深刻地改变着商业模式、就业机会以及全球经济格局。作为未来价值互联网基础设施的重要组成部分,智能生态网络(IEN)通过改进信息中心网络架构,综合分布式人工智能和区块链技术,构建......
  • 如何把Hibernate2.1升级到Hibernate3.0
    如何把Hibernate2.1升级到Hibernate3.0?选自<<精通Hibernate:Java对象持久化技术详解>>作者:孙卫琴1.1.1包名1.1.2org.hibernate.classic包1.1.3Hibernate所依赖的第三方软件包1.1.4异常模型1.1.5Session接口1.1.6createSQLQuery()1.1.7Lifecycle和Validatable接......
  • TDengine 合作伙伴 +1,这次是「DaoCloud道客」
    随着我国数字经济持续快速发展,各行各业都在积极拥抱云技术,上云成为企业加快数字化转型步伐的关键一步。在此过程中,越来越多的企业开始意识到云原生技术的重要性,利用云原生更快地开发和部署应用程序,提高应用程序的可靠性和可扩展性。 为进一步实现开发的提质增效,近日,北京涛思数......
  • 检测到包降级: System.Diagnostics.Debug 从 4.3.0 降级到 4.0.11。直接从项目引用包
    .net 项目在发版的时候报包的版本不一致严重性代码说明项目文件行禁止显示状态错误错误形式的警告:检测到包降级:System.Diagnostics.Debug从4.3.0降级到4.0.11。直接从项目引用包以选择不同版本。ProjectName->Microsoft.AspNetCore.Mvc.Core2.2.5->Micros......
  • 2022 中国开源创新大赛,时序数据库 TDengine 榜上有名
    近日,2022中国互联网发展创新与投资大赛暨2022年中国开源创新大赛在北京落下帷幕,本次大赛由中央网信办信息化发展局指导,中国互联网发展基金会、中国网络空间研究院、中国互联网投资基金联合主办。非常荣幸的是,凭借着强大的开源创新能力和产品竞争力,时序数据库(TimeSeriesDatab......
  • 2023.06.07训练日志
    TrustNobody简单题,桶排序+前缀和以后直接找\(n-sum_i=i\)的\(i\)LunaticNeverContent对于原序列的每一对不满足回文的位置,记录其差的绝对值取\(\gcd\)。对于已经满足回文的,\(x\)可以为\(\infty\),因此输出\(0\)DreamingofFreedom这道题主要考察线性筛。观察样......