TDengine 快速上手:安装部署与基础 SQL 实践(二)

news2025/4/2 23:21:08

三、生产环境优化方案

3.1 性能调优策略

在生产环境中,TDengine 的性能优化是确保系统高效稳定运行的关键。以下是一些有效的性能调优策略。

连接池是提升数据库连接管理效率的重要工具,它允许应用程序重复使用现有的数据库连接,而不是每次都重新建立连接,从而减少了连接创建和销毁的开销,提高了系统的并发处理能力。在 TDengine 中,我们可以使用 Druid 或 HikariCP 等连接池来优化连接管理。以 Druid 连接池为例,首先需要在项目的依赖管理文件(如 Maven 的 pom.xml)中添加 Druid 的依赖:

 

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid-spring-boot-starter</artifactId>

<version>1.1.17</version>

</dependency>

然后,在项目的配置文件(如 application.properties)中配置 Druid 连接池的参数:

 

# 数据源配置

spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver

spring.datasource.url=jdbc:TAOS://127.0.0.1:6030/test

spring.datasource.username=root

spring.datasource.password=taosdata

# Druid连接池配置

spring.datasource.druid.initial-size=5

spring.datasource.druid.min-idle=5

spring.datasource.druid.max-active=5

# 获取连接的最大等待时间,单位毫秒

spring.datasource.druid.max-wait=60000

# 验证连接的SQL语句

spring.datasource.druid.validation-query=select server_status();

# 验证连接的超时时间,单位毫秒

spring.datasource.druid.validation-query-timeout=5000

# 从连接池获取连接时是否验证连接

spring.datasource.druid.test-on-borrow=false

# 归还连接到连接池时是否验证连接

spring.datasource.druid.test-on-return=false

# 空闲时是否验证连接

spring.datasource.druid.test-while-idle=true

# 空闲连接的检测周期,单位毫秒

spring.datasource.druid.time-between-eviction-runs-millis=60000

# 连接的最小空闲时间,单位毫秒

spring.datasource.druid.min-evictable-idle-time-millis=600000

# 连接的最大空闲时间,单位毫秒

spring.datasource.druid.max-evictable-idle-time-millis=900000

通过合理配置这些参数,可以使 Druid 连接池更好地适应应用程序的需求,提高数据库连接的使用效率和系统的并发性能。

TDengine 提供了强大的缓存机制,通过设置CACHEMODEL参数,我们可以灵活选择适合的缓存模式,包括缓存最新一行数据、每列最近的非 NULL 值,或同时缓存行和列的数据。这种灵活性使 TDengine 能根据具体业务需求提供精准优化,在物联网场景下尤为突出,助力用户快速访问设备的最新状态。在高频查询场景中,开启缓存可以显著提升查询性能。例如,我们可以使用以下命令将数据库的缓存模式设置为同时缓存行和列的数据:

 

ALTER DATABASE power CACHEMODEL 'both';

设置完成后,TDengine 会将高频访问的数据缓存到内存中,当再次查询这些数据时,可以直接从缓存中获取,大大缩短了查询时间。通过show create database power\G命令可以确认数据库的缓存设置:

 

taos> show create database power\G

***************************1.row ***************************

Database: power

Create Database: CREATE DATABASE `power` BUFFER 256 CACHESIZE 1 CACHEMODEL 'both' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 10 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0

Query OK,1 row(s) in set (0.000282s)

在写入数据时,批量写入可以显著提高写入效率,减少与数据库的交互次数。TDengine 支持在一条INSERT INTO语句中插入多条数据,例如:

 

INSERT INTO d1001 VALUES(now, 221.3)(now, 222.1);

为了更直观地验证批量写入的性能优势,我们可以使用taosBenchmark工具进行测试。taosBenchmark是 TDengine 官方提供的一款性能测试工具,它可以模拟由大量设备产生的大量数据,还可以灵活地控制数据库、超级表、标签列的数量和类型,数据列的数量和类型,子表的数量,每张子表的数据量,插入数据的时间间隔,taosBenchmark的工作线程数量,是否以及如何插入乱序数据等。

假设我们要测试批量写入 1 万条数据的性能,可以使用以下命令:

 

taosBenchmark -d power -t 1 -n 10000 -I multi

其中,-d参数指定数据库名称,-t参数指定超级表下的子表数量,-n参数指定每个子表要插入的数据记录数,-I参数指定写入方式为批量写入(multi)。通过这样的测试,我们可以观察到批量写入在处理大量数据时的高效性,能够轻松实现万级 TPS 的写入性能。

3.2 常见问题排查

在 TDengine 的使用过程中,可能会遇到一些常见问题,及时排查和解决这些问题对于系统的稳定运行至关重要。

当客户端无法连接到 TDengine 服务器时,首先要检查taos.cfg配置文件中的firstEp配置。firstEp参数用于指定第一个数据节点的 Endpoint,格式为 FQDN:port。如果firstEp配置错误,客户端将无法正确连接到服务器。例如,如果firstEp配置为localhost:6030,而实际的服务器地址是192.168.1.101:6030,则需要将firstEp修改为正确的地址:

 

firstEp = 192.168.1.101:6030

修改完成后,需要重启 TDengine 服务使配置生效。此外,还需要检查客户端的网络配置、防火墙设置以及服务器的 FQDN 解析是否正确。如果是云服务器,还要确保安全组规则允许客户端访问服务器的 6030 端口。

在某些情况下,可能会出现数据丢失的问题。这通常与数据库的KEEP参数设置有关。KEEP参数用于指定数据的保留期限,如果KEEP设置的时间过短,数据可能会被提前删除。例如,如果我们设置KEEP 30,表示数据只保留 30 天,超过 30 天的数据将被自动删除。因此,在创建数据库时,需要根据实际的数据生命周期来合理设置KEEP参数。例如,如果我们需要长期保存数据,可以设置KEEP 365,表示数据将保留 365 天。

 

CREATE DATABASE power KEEP 365 DURATION 10;

另外,数据丢失也可能与数据写入过程中的错误有关,比如写入失败但未正确处理错误信息。在写入数据时,要确保应用程序能够正确捕获和处理写入错误,以保证数据的完整性。

如果发现 TDengine 的性能下降,可以使用show vnodes命令来监控节点负载情况。show vnodes命令可以显示集群中各个虚拟节点(vnode)的状态信息,包括节点的负载、数据量等。通过分析这些信息,可以判断是否存在节点负载过高的情况。例如,如果某个 vnode 的负载过高,可能是由于该节点上的数据量过大或者写入 / 查询请求过于集中导致的。此时,可以考虑对数据进行重新分布,或者优化查询语句,避免对单个节点造成过大压力。

 

taos> show vnodes;

vgId | vnode | fqdn | port | status | role | load | ntables | rows |

==================================================================================

0 | 0 | dnode1 | 6030 | ready | DN | 10.23 | 100 | 10000 |

0 | 1 | dnode2 | 6030 | ready | DN | 10.18 | 100 | 10000 |

0 | 2 | dnode3 | 6030 | ready | DN | 10.31 | 100 | 10000 |

Query OK, 3 row(s) in set (0.001234s)

从上述输出中,可以看到每个 vnode 的负载情况(load字段),如果某个 vnode 的load值明显高于其他节点,就需要进一步分析原因并采取相应的优化措施。

四、典型应用场景

4.1 物联网场景

在物联网领域,设备数量呈爆发式增长,数据量庞大且增长迅速,对数据存储和处理的性能要求极高。TDengine 凭借其独特的设计和优化,能够轻松存储百万级设备数据,并实现毫秒级响应,为物联网应用提供了强大的数据支持。

以某车企为例,其业务中涉及大量车辆的 GPS 轨迹数据采集和分析。随着车辆数量的增加和业务的拓展,数据量急剧增长,每天产生的 GPS 轨迹数据高达 40 亿条。传统的数据存储方案在面对如此庞大的数据量时,不仅存储成本高昂,而且查询效率低下,无法满足实时分析和决策的需求。

在采用 TDengine 之后,该车企的数据存储成本大幅降低。TDengine 的高压缩比使得数据存储空间大大减少,相比传统方案,存储成本降低了 60%。同时,TDengine 的高效查询性能能够实现毫秒级响应,无论是查询单个车辆的实时位置,还是对大量车辆的轨迹数据进行分析,都能快速返回结果,为车辆调度、智能驾驶等应用提供了有力支持。通过使用 TDengine,该车企能够更好地管理和利用车辆轨迹数据,提升业务效率和用户体验。

4.2 监控系统

在监控系统中,需要管理海量的监控指标数据,并且对这些数据进行实时查询和分析。TDengine 能够支持亿级指标管理,并且提供了丰富的聚合函数,覆盖了 90% 以上的查询需求,为监控系统的高效运行提供了保障。

同程旅行的基础监控系统 “夜鹰监控” 便是一个典型的案例。该系统需要处理百万级别 endpoint、亿级 metric 的数据,每秒有 200 万并发写入以及 2 万并发查询。原有的存储组件基于 RRD 存储,存在数据丢失、无法展示长时间原始数据等问题。为了解决这些问题,同程旅行引入了 TDengine。

接入 TDengine 后,同程旅行的监控系统机器成本下降了 50%。TDengine 的数据写入性能强大,原本需要 10 多台高配机器才能完成的数据写入任务,现在只需要 7 台机器即可完成,并且 CPU 消耗在 10% 左右、磁盘 IO 消耗在 1% 左右。同时,TDengine 的数据读取接入过程也很顺利,结合其自带的强大聚合函数功能,能够轻松实现各种复杂的查询和分析需求。通过使用 TDengine,同程旅行的监控系统在性能和成本上都得到了显著优化,为业务的稳定运行提供了可靠的保障。

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

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

相关文章

Redis 02

今天是2025/04/01 20:13 day 16 总路线请移步主页Java大纲相关文章 今天进行Redis 3,4,5 个模块的归纳 首先是Redis的相关内容概括的思维导图 3. 持久化机制&#xff08;深度解析&#xff09; 3.1 RDB&#xff08;快照&#xff09; 核心机制&#xff1a; 触发条件&#xff…

unity UI管理器

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events;// UI界面基类 public abstract class UIBase : MonoBehaviour {[Header("UI Settings")]public bool keepInStack true; // 是否保留在界面栈中public …

STRUCTBERT:将语言结构融入预训练以提升深度语言理解

【摘要】最近&#xff0c;预训练语言模型BERT&#xff08;及其经过稳健优化的版本RoBERTa&#xff09;在自然语言理解&#xff08;NLU&#xff09;领域引起了广泛关注&#xff0c;并在情感分类、自然语言推理、语义文本相似度和问答等各种NLU任务中达到了最先进的准确率。受到E…

16-CSS3新增选择器

知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义&#xff0c;使文档变得更加简洁&#xff1f; 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…

SQL Server:用户权限

目录 创建 & 删除1. 创建用户命令整理创建 admin2 用户创建 admin_super 用户 2. 删除用户命令删除 admin2 用户删除 admin_super 用户 3. 创建时权限的区别admin2 用户权限admin_super 用户权限 查看方法一&#xff1a;使用对象资源管理器&#xff08;图形化界面&#xff…

服务器数据恢复—误格式化NTFS文件系统分区别慌,NTFS数据复活秘籍

NTFS文件系统下格式化在理论上不会对数据造成太大影响&#xff0c;但有可能造成部分文件目录结构丢失的情况。下面介绍一个人为误操作导致服务器磁盘阵列中的NTFS文件系统分区被格式化后的服务器数据恢复案例。 服务器数据恢复过程&#xff1a; 1、将故障服务器连接到一台备份…

【3】数据结构的双向链表章

目录标题 双向链表的定义双向链表的初始化双向链表的创建插入操作删除操作 双向链表总代码与调试 双向链表的定义 结点结构组成&#xff1a;数据域&#xff08;data&#xff09;、指针域&#xff08;pre&#xff09;、指针域&#xff08;next&#xff09;。其中&#xff0c; da…

蓝桥杯杯赛-日期模拟

知识点 处理日期 1. 按天枚举日期&#xff1a;逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年&#xff1a;正确判断闰年条件。闰年定义为&#xff1a;年份 满足以下任意一个条件&#xff1a;(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…

搭建开源笔记平台:outline

折腾的意义 为什么要自己搭建一个笔记平台&#xff1f;没理由&#xff0c;就是突然想试试。有时候突然有个想法&#xff0c;搜了一下正好有合适的方案&#xff0c;就顺手试一下。 其实已经有很多成熟的笔记软件&#xff0c;例如Notion/OneNote&#xff0c;但谁不想要一个数据完…

Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能

Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具&#xff0c;帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API&#xff0c;或者叫做一个工具类&#xff0c;包含一系列静态…

电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法

调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中&#xff0c;合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一&#xff1a;使用快捷键 大多数笔…

presto行转列

presto的行列转换和spark、hive一样也是通过外链语句实现的&#xff0c;只不过语法和关键子有点不同&#xff0c;如下 with tmp1 as (select 1,2,3 as a1,4,5,6 as a2 ) select * from tmp1 cross join unnest(split(tmp1.a1, ,),split(tmp1.a2, ,) ) as b(a1s,a2s) 结果如下

51c自动驾驶~合集15

我自己的原文哦~ https://blog.51cto.com/whaosoft/11720657 #DRAMA 首个基于Mamba的端到端运动规划器&#xff08;新加坡国立&#xff09; 运动规划是一项具有挑战性的任务&#xff0c;在高度动态和复杂的环境中生成安全可行的轨迹&#xff0c;形成自动驾驶汽车的核心能…

拼多多 anti-token unidbg 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 版本7.3-7.4 都试过加密没什…

【Git】5 个分区的切换方式及示例

目录 1. **工作区&#xff08;Working Directory&#xff09;**2. **缓存区&#xff08;Stage/Index&#xff09;**3. **本地仓库&#xff08;Local Repository&#xff09;**4. **远程仓库&#xff08;Remote Repository&#xff09;**5. **贮藏区&#xff08;Stash&#xff0…

Java高频面试之并发编程-02

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;进程和线程的区别是什么&#xff1f; 1. 资源分配与独立性 进程&#xff1a; 独立性&#xff1a;每个进程拥有独立的内存…

openwebui和keycloak集成,使用keycloak的用户名和密码登录

1&#xff0c;实现效果 使用keycloak定义的用户名和密码&#xff0c;直接登录openwebui 2&#xff0c;实现原理 keycloak中用户信息中包含用户名和密码&#xff0c;以及email。 使用keycloak中的用户名和密码登录之后&#xff0c;会用email创建一个openwebui的账号。之后每次…

【区块链安全 | 第八篇】多签机制及恶意多签

部分参考&#xff1a;慢雾科技 文章目录 为什么需要多签多签机制Tron钱包下的恶意多签Tron 钱包多签权限分类Tron 多签机制的运作方式 恶意多签的过程黑客通过多签机制控制账户黑客剥夺用户权限&#xff0c;完全控制账户 恶意多签成因 在区块链中&#xff0c;多签&#xff08;M…

二月公开赛Web-ssrfme

目录 环境搭建 题目分析 分析代码 解题过程 Redis未授权访问 寻找Flag 环境搭建 进入含有docker-compose.yml的文件内&#xff0c;拉取容器镜像 docker-compose up -d 题目分析 访问容器地址172.25.254.200:8091查看题目 分析代码 url通过GET请求访问界面&#xff0c…

告别枯燥工作,走向自动化

嘿&#xff0c;小伙伴们&#xff01;今天给你们介绍两款超实用的RPA办公自动化软件&#xff0c;用它们&#xff0c;再也不用像机器一样做重复劳动啦&#xff0c;超省时间&#xff01; 工具名称&#xff1a;影刀RPA&#xff08;类似产品&#xff0c;八爪鱼 RPA&#xff0c;操作上…