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

news2024/11/15 21:47:30

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

(TDengine 3.0 的 Update 功能和 2.0 有何区别?)

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

相比起 2.0 ,3.0 的建表策略控制是很简单的,它可以让用户无难度无成本地找到自己适合的配置。

简而言之:只需要在建库的时候指定合适的参数即可。

在 2.0 版本中,很多用户都阅读过这篇文章:这几个神秘参数,教你TDengine集群的正确使用方式,以期用自定义的建表逻辑来获得更好的性能,更合理的开销。

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

而在 3.0 中,为了支持云原生场景下资源的灵活调配,不论是时序数据与元数据都需要分布式技术才可以做到。为此,我们把存在于 mnode 的普通表元数据移除(具体细节可参考:聊聊 TDengine 3.0 中的事务机制 - TDengine | 涛思数据),让其完全分布到了 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 的关系并不清晰,可以先移步 整体架构 | TDengine 文档 | 涛思数据)

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

因此,在 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 的值则需要结合多方因素做更精细化的计算,需要自己理解和多多调试,也欢迎联系企业版团队得到更深层次的性能优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

社交泛娱乐出海如何抓住AIGC?我在融云WICC上看到了答案

大模型掀起的AIGC时代,所有企业的所有业务与产品都值得利用大模型技术重做一遍,接下来也将有越来越多依托AIGC技术的创新应用涌现。关注【融云全球互联网通信云】了解更多 在社交泛娱乐赛道,AI大模型技术也呈现出了加速落地的态势。日前&…

功能测试如何转型自动化测试

在互联网行业,我们是那些被遗忘的技术人。 很多人都觉得,传统开发、运维才是技术含量的一个工作。 但是测试的入门门槛比较低,所做的事情相对有限, 这是我之前跟一些大型互联网软件测试负责人大牛们聊天的时候发现,…

学网络安全常用的10大工具

从事网络安全工作,手上自然离不开一些重要的网络安全工具。今天,分享10大网络安全工具。 一、Kali Linux Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单:在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这…

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中,各类业务系统非常丰富,相互之间或对外提供很多的服务或接口 这些服务或接口中,有很多是需要强契约约束的,服务的提供方、服务的使用方必须遵守相同契约 这类服务最典型的就是RPC,其中应用广泛的有Du…

一文读懂,WAF阻止恶意攻击的8种方法

WAF(Web 应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤 Internet 流量以阻止不良流量和恶意请求,WAF 是确保 Web 服务的可用性和完整性的重要安全解决方案。 它通过充当保护 Web 应用程序服务器免受恶意客…

属性和方法

类的属性 变量:1,按照数据类型来分基本数据类型,引用数据类型 2,按照变量在类中声明的位置不同:成员变量(属性)、局部属性(方法内,构造器内,代码块内等&…

android 如何分析应用的内存(六)

android 如何分析应用的内存(六) 接上文,本系列文章,最重要的部分——————对native堆内存的分析,即将上演 分成六大板块: 手动实现,new和delete,以及malloc和freee&#xff0…

LVS+Keepalived负载均衡高可用群集(往事清零,万事顺意)

一、Keepalived高可用详解 1.应用场景 在企业应用中,单台服务器承担应用存在单点故障的危险。单点故障一旦发生,企业服务将发生中断,造成极大的危害。所以需要群集实现高可用性,保证服务稳定。 2.介绍和原理简介 Keepalived是…

【JAVA开发环境配置】 卸载JDK很简单, 一分钟帮你搞定!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

中科三方:DNS云解析技术浅析

智能DNS云解析通过其智能解析,健康监测,负载均衡,宕机切换等高可用性的功能特性,给客户带来快捷,安全,流畅的上网体验。传统的DNS因为其解析时间冗长,易被劫持,无法精准调配用户的流…

【jupyter notebook】Anaconda prompt查询版本包(已安装的包列表、可以安装的包列表)

目录 0.环境介绍 1.查询当前已安装的某包信息 2.查询某包的所有版本 3.查看已安装的各个包的版本 0.环境介绍 windows Anaconda 1.查询当前已安装的某包信息 信息包含包名和版本,以包【matplotlib】为例 conda list matplotlib 2.查询某包的所有版本 conda s…

playwright-自动化测试

这里写目录标题 安装运行记录操作执行脚本 安装 (1)安装Playwright依赖库(Playwright支持Async\Await语法,故需要Python3.7) pip install playwright (2)安装Chromium、Firefox、WebKit等浏览…

【Unity Shader】平面投影实现阴影

介绍 球体和立方体挂载下面这个shader,就是多渲染一个阴影投影到y0的平面上 // shader,放在需要显示阴影的对象上 Shader "Custom/PlanarShadow1" {Properties{_Instensity("Shininess", Range(2, 4)) 2.0 //光照强度_Diffuse(&…

Mac下自定义快捷键

1、系统偏好设置-键盘-快捷键-App快捷键 2、确定要对什么进行自定义 比如 我要对DBeaver的运行自定义,我个人喜欢用cmd r 3、添加App快捷键 注意,菜单标题就是应用里的,必须要一模一样,哪怕是空格都不能少。也不能多。 4、对…

在Excel中如何筛选五笔码表?

你可以按照以下步骤筛选五笔码表中的简词: 1. 在 Excel 中打开五笔码表,选中需要筛选的数据列。 2. 点击“数据”选项卡中的“筛选”按钮,在下拉菜单中选择“高级筛选”。 3. 在弹出的“高级筛选”对话框中,选择“复制到其他位置…

什么是MBR/UEFI/GPT?MBR与UEFI具体区别是什么?

一、什么是MBR MBR是Master Boot Record(主引导记录)的缩写,是存储在计算机硬盘的第一个扇区(通常是第0个扇区)中的一个特殊的引导扇区。 MBR包含了启动计算机所需的信息,例如分区表、引导程序等。当计算机…

Python的接口自动化-unittest测试框架和ddt数据驱动

目录 引言 一、unittest测试框架 二、ddt数据驱动 引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错…

#include < > 和#include ” ”有什么区别?

C语言头文件 C语言中头文件的扩展名为 .h的头文件,头文件中包含了函数的声明和宏定义,头文件可以被多个源文件引用。在C语言中有两种类型的头文件,一种是编译器自带的头文件,另一种就是程序员自己编写的头文件。 在C程序中如果要使…

package和import关键字的使用

package(包) package,称为包,用于指明该文件中定义的类、接口等结构所在的包。 8.1.1 语法格式 package 顶层包名.子包名 ; 包的作用 • 包可以包含类和子包,划分项目层次,便于管理 • 控制访问权限 import(导入) 为了使用定…

python基础知识(十三):numpy库的基本用法

目录 1. numpy的介绍2. numpy库产生矩阵2.1 numpy将列表转换成矩阵2.2 numpy创建矩阵 3. numpy的基础运算4. numpy的基础运算25. 索引 1. numpy的介绍 numpy库是numpy是python中基于数组对象的科学计算库。 2. numpy库产生矩阵 2.1 numpy将列表转换成矩阵 import numpy as …