TDengine 如何进行高效数据建模
1.背景
数据建模对于数据库建立后整体高效运行非常关键,不同建模方式,可能会产生相差几倍的性能差别
2. 建库
建模在建库阶段应考虑几下几点:
建多少库
根据业务情况确定建库个数,TDengine 不支持跨库查询,如果业务数据之间会发生相互查询,那就需要把这些数据设计在一个库中,根据业务的独立性创建相应数据库,数据库个数多少不会对性能产生大的影响。
建库语法
CREATE DATABASE [IF NOT EXISTS] db_name [database_options]database_option: {VGROUPS value| DURATION value| KEEP value| WAL_RETENTION_PERIOD value| WAL_RETENTION_SIZE value...
}
参数说明
这里说下几个重点参数
VGROUPS
VGROUPS 是数据分区参数,一个 VGROUP 相当于一个分区,多分区可进行并发写入及查询,此参数是数据库最重要并发性能参数。
- 一个 VGROUP 承载的子表数最好规划在 100 万内最佳
- VGROUPS 建立后不能再减小,只能增加,增加的方式只能通过分裂方式,把一个 VGROUP 一分为二,子表数平均到分裂后的两个 VGROUP 中(分裂功能仅企业版提供)
DURATION
Duration 决定了生成文件组的数量,经验表明,在磁盘资源固定,同时打开写入文件的数量越少写入性能越高,调整此参数,让引擎生成的 data 文件不要太碎,提升读写性能。原则上数据写入越密集,就应调小此参数值,写入数据越稀疏,越应调大此值。
KEEP
表示数据文件保存天数,这个参数根据业务情况给定,今后也可以通过 alter database 动态调整,这个参数只会影响占用磁盘空间大小,对性能无影响
WAL_RETENTION_PERIOD
WAL 保留周期,这个参数主要用于订阅消费,如果有订阅业务,可以根据业务期望保留周期设定。设定周期过长时 WAL 会占用大量磁盘空间,需要注意。
WAL_RETENTION_SIZE
WAL 保留大小,如果磁盘空间有限,使用 WAL_RETENTION_PERIOD 参数又无法估算 WAL 会占用多大,那可以考虑使用此参数保留 WAL 文件占用磁盘大小
3. 建表
CREATE STABLE [IF NOT EXISTS] stb_name (create_definition [, create_definition] ...) TAGS (create_definition [, create_definition] ...) [table_options]
TDengine 中有三种表,超级表,子表和普通表,常用的是超级表及子表,普通表很少使用。超级表规划时,注意以下几点:
- 一个数据库中包括的超级表个数是没有限制的,常见的是规划几十、几百个,规划过多对性能没有太大影响,但查询时会带来一些不方便
- 超级表之间查询只有少量 SQL 语句支持,一般查询都发生在超级表内进行的,规划时要注意
- 建表列数最大 4096 列,最佳性能普通列在 1000 列内,超过 1000 列性能会有较大影响,TAG 列个数对性能影响不大
4. 写入
规划数据写入时注意以下几点:
- 切忌不要乱序写入,乱序写入性能会很差而且会占用超大磁盘空间。
乱序是针对同一个子表时间主列而言, 不同子表之间不存在乱序。如无法避免乱序,最好集中写一段时间范围内数据,不要做交叉写,如可以先把前天数据集中写完,再写昨天数据,不要写一条昨天的,又写一条前天的,再来一条昨天的,这样写的性能会非常差。 - 规划好写入方式
写入方式性能最好的是 native 方式,但 native 方式依赖客户端版本,如果服务器升级了,客户端也需要跟着一起升级。官方推荐使用 WebSocket 方式写入, WebSocket 写入对客户端依赖小,服务器升级影响,同时性能也能达到 native 方式的 70% ~ 90% 左右
5. 查询
统计查询是最终目的,所以查询需求一定程序上决定了构架及建模
规划数据查询时注意以下几点:
- 查询占用资源多,耗用内存大,规划时尽量错峰查询,避免集中在一点导致内存不足
- 常用聚合类查询可规划预计算模式
计算一次后结果保留,再次查询无需再计算。TDengine 提供了两种预计算技术,一种是 流计算 , 另一种是 TSMA(仅企业版支持),可根据自己业务查询频率规划一定的预计算查询。
相关文章:
TDengine 如何进行高效数据建模
1.背景 数据建模对于数据库建立后整体高效运行非常关键,不同建模方式,可能会产生相差几倍的性能差别 2. 建库 建模在建库阶段应考虑几下几点: 建多少库 根据业务情况确定建库个数,TDengine 不支持跨库查询,如果业…...
HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐
在开发鸿蒙操作系统应用时,网络接口的实现往往是一个繁琐且重复的过程。为了提高开发效率,坚果派(nutpi.net)特别推出了一个非常实用的插件——JsonFormat。这款插件的主要功能是将JSON格式的数据直接转换为arkts的结构定义,让我们在编写接口…...
基于动力学的MPC控制器设计盲点解析
文章目录 Apollo MPC控制器的设计架构误差模型和离散化预测模型推导目标函数和约束设计优化求解优化OSQP求解器参考文献 Apollo MPC控制器的设计架构 误差模型和离散化 状态变量和控制变量 1、Apollo MPC控制器中状态变量主要有如下6个 matrix_state_ Matrix::Zero(basic_stat…...
Java重要面试名词整理(十六):SpringBoot
由于SpringBoot和Spring、SpringMVC重合度较高,更多详细内容请参考https://blog.csdn.net/weixin_73195042/article/details/144632385 本文着重于SpringBoot的启动流程 文章目录 概念启动流程底层分析构造SpringApplication对象run(String... args)方法SpringBoo…...
在K8S中,如何部署kubesphere?
在Kubernetes集群中,对于一些基础能力较弱的群体来说K8S控制面板操作存在一定的难度,此时kubesphere可以有效的解决这类难题。以下是部署kubesphere的操作步骤: 操作部署: 1. 部署nfs共享存储目录 yum -y install nfs-server e…...
算法-查找缺失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以所有的数字都在范围 [0,3…...
antd-vue - - - - - a-date-picker限制选择范围
antd-vue - - - - - a-date-picker限制选择范围 1. 效果展示2. 代码展示 1. 效果展示 如图:限制选择范围为 今年 & 去年 的 月份. 2. 代码展示 <template><a-date-picker:disabledDate"disabledDate"picker"month"/> &l…...
计算机网络练习题
学习这么多啦,那就简单写几个选择题巩固一下吧! 1. 在IPv4分组各字段中,以下最适合携带隐藏信息的是(D) A、源IP地址 B、版本 C、TTL D、标识 2. OSI 参考模型中,数据链路层的主要功能是(…...
redis的集群模式与ELK基础
一、redis的集群模式 1.主从复制 (1)概述 主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器ÿ…...
STM32-笔记18-呼吸灯
1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。 频率:2kHz,PSC71,ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ;Ft 72MHZ PSC71(喜欢设置成Ft的倍数&…...
Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法,可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中,后台数据返回格式和指定合并是动态且没有规律的,Element 的示例过于简单&…...
【JavaWeb后端学习笔记】MySQL的数据控制语言(Data Control Language,DCL)
MySQL DCL 1、管理用户2、控制权限 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库访问权限。 1、管理用户 管理用户的操作都需要在MySQL自带的 mysql 数据库中进行。 -- 查询用户 -- 需要先切换到MyS…...
libvirt学习
文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…...
STM32-笔记19-串口打印功能
复制项目文件夹03-流水灯,重命名为19-串口打印功能 打开项目 在主函数中,添加头文件、和串口初始化函数(设置波特率)和输出函数,如图所示: 软件部分就设置好了 下面是硬件部分 接线:使用USB…...
概率论与数理统计
概率论占比更多,三分之二左右 数理统计会少一些 事件之间的概率 ab互斥,不是ab独立 古典概型吃高中基础,考的不会很多 条件概率公式,要记 公式不要全记,很多有名称的公式是通过基础公式转换而来的 目的在于解决一…...
统信系统设置代理的问题
统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时,git不能经过代理拉取代码。但是设置应用代理时,可以用git通过代理拉代码。 这是系统代理,在这里设置 ip 端口,…...
TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别
1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因: 确认双方的收发能力。第一次握手,客户端发送 SYN 报文,告诉服务器自身具备发送数据的能力,第二次握手,服务器回应 SYN ACK 报文,表名自己既能…...
springboot配置并使用RestTemplate
目录 一、RestTemplate配置 1、将RestTemplate初始化为Bean 2、使用HttpClient作为RestTemplate客户端 (1)引入HttpClient依赖 (2)修改RestTemplate配置类 3、设置拦截器 (1)新增拦截器类 …...
人工智能-Python网络编程-TCP
1 TCP-概念版 服务端 import socket # 1 创建服务端套接字对象 # socket.AF_INET IPV4 # socket.SOCK_STREAM TCP # socket.SOCK_DGRAM UDP tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2 绑定端口号 tcp_server_socket.bind((192.…...
【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举
学习资料 菜鸟教程 https://www.runoob.com/java/java-interfaces.html 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举 继承 创建分等级层次的类,子类继承父类的特征、行为、方法 class 父类{ } class 子类 extends 父类{ super(); }一些性质 Java 不支持…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
