TDengine 高级特性——读缓存

news/2025/10/6 10:58:32/文章来源:https://www.cnblogs.com/lxjshuju/p/19127396

在这里插入图片描述

简介

在物联网(IoT)和工业互联网(IIoT)大数据应用场景中,实时数据的价值往往远超历史数据。企业不仅需要数据处理系统具备高效的实时写入能力,更需要能快速获取设备的最新状态,或者对最新数据进行实时计算和分析。无论是工业设备的状态监控、车联网中的车辆位置追踪,还是智能仪表的实时读数,当前值都是业务运行中不可或缺的核心数据。这些数据直接关系到生产安全、运营效率以及用户体验。

例如,在工业生产中,生产线设备的当前运行状态至关重要。操作员需要实时监控温度、压力、转速等关键指标,一旦设备出现异常,这些数据必须即时呈现,以便迅速调整工艺参数,避免停产或更大的损失。在车联网领域,以滴滴为例,车辆的实时位置数据是滴滴平台优化派单策略、提升运营效率的关键,确保每位乘客快速上车并享受更高质量的出行体验。

同时,看板系统和智能仪表作为现场操作和用户端的窗口,也需要实时数据支撑。无论是工厂管理者通过看板获取的实时生产指标,还是家庭用户随时查询智能水表、电表的用量,实时性不仅影响到运营和决策效率,更直接关系到用户对服务的满意程度。

传统缓存方案的局限性

为了满足这些高频实时查询需求,许多企业选择将 Redis 等缓存技术集成到大数据平台中,通过在数据库和应用之间添加一层缓存来提升查询性能。然而,这种方法也带来了不少问题:

TDengine 的解决方案:内置读缓存

为了解决这些问题,TDengine 针对物联网和工业互联网的高频实时查询场景,设计并实现了读缓存机制。这一机制能够自动将每张表的最后一条记录缓存到内存中,从而在不引入第三方缓存技术的情况下,直接满足用户对当前值的实时查询需求。

TDengine 采用时间驱动的缓存管理策略,将最新数据优先存储在缓存中,查询时无需访问硬盘即可快速返回结果。当缓存容量达到设定上限时,系统会批量将最早的数据写入硬盘,既提升了查询效率,也有效减少了硬盘的写入负担,延长硬件使用寿命。

用户可通过设置 cachemodel 参数,自定义缓存模式,包括缓存最新一行数据、每列最近的非 NULL 值,或同时缓存行和列的数据。这种灵活设计在物联网场景中尤为重要,使设备状态的实时查询更加高效精准。

这种读缓存机制的内置化设计显著降低了查询延迟,避免了引入 Redis 等外部系统的复杂性和运维成本。同时,减少了频繁查询对存储系统的压力,大幅提升系统的整体吞吐能力,确保在高并发场景下依然稳定高效运行。通过读缓存,TDengine 为用户提供了一种更轻量化的实时数据处理方案,不仅优化了查询性能,还降低了整体运维成本,为物联网和工业互联网用户提供强有力的技术支持。

TDengine 的读缓存配置

在创建数据库时,用户可以选择是否启用缓存机制以存储该数据库中每张子表的最新数据。这一缓存机制由数据库创建参数 cachemodel 进行控制。参数 cachemodel 具有如下 4 种情况:

当使用数据库读缓存时,可以使用参数 cachesize 来配置每个 vnode 的内存大小。

关于数据库的具体创建,相关参数和操作说明请参考创建数据库

实时数据查询的缓存实践

本节以智能电表为例,来详细看看 LAST 缓存对实时数据查询的性能提升。首先使用 taosBenchmark 工具,生成本章内容需要的智能电表的时序数据。

# taosBenchmark -d power -Q --start-timestamp=1600000000000 --tables=10000 --records=10000 --time-step=10000 -y

上面的命令,taosBenchmark 工具在 TDengine 中生成了一个用于测试的 电表数据库 power,产生共 10 亿条时序数据。时序数据的时间戳从 1600000000000(2020-09-13T20:26:40+08:00) 开始,超级表为 meters,包含 10000 个设备(子表),每个设备有 10000 条数据,时序数据的采集频率是 10 秒/条。

查询任意一个电表的最新的电流和时间戳数据,执行如下 SQL

taos>
select last(ts,
current
)
from meters;
last(ts) | last(
current
) |
=================================================
2020-09-15 00:13:10.000 | 1.1294620 |
Query OK, 1
row(s) in
set (0.353815s)
taos>
select last_row(ts,
current
)
from meters;
last_row(ts) | last_row(
current
) |
=================================================
2020-09-15 00:13:10.000 | 1.1294620 |
Query OK, 1
row(s) in
set (0.344070s)

希望使用缓存来查询任意一个电表的最新时间戳数据,执行如下 SQL,并检查数据库的缓存生效。

taos>
alter
database power cachemodel 'both'
;
Query OK, 0
row(s) affected (0.046092s)
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)

再次查询电表的最新的实时数据,第一次查询会做缓存计算,后续的查询时延就大大缩减。

taos>
select last(ts,
current
)
from meters;
last(ts) | last(
current
) |
=================================================
2020-09-15 00:13:10.000 | 1.1294620 |
Query OK, 1
row(s) in
set (0.044021s)
taos>
select last_row(ts,
current
)
from meters;
last_row(ts) | last_row(
current
) |
=================================================
2020-09-15 00:13:10.000 | 1.1294620 |
Query OK, 1
row(s) in
set (0.046682s)

可以看到查询的时延从 353/344ms 缩短到了 44ms,提升约 8 倍。

访问官网

更多内容欢迎访问 TDengine 官网

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

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

相关文章

织梦做信息类网站电子商务营销方向

codeforces 453C Little Pony and Summer Sun Celebration 这道题很有意思,虽然网上题解很多了,但是我还是想存档一下我的理解。 题意可以这样转换:初始所有点有 \(01\) 状态,每经过一次状态就翻转,求一条路径使得最后…

非合作博弈之软性均衡:东方智慧与西方理论的融合框架

非合作博弈之软性均衡:东方智慧与西方理论的融合框架 一、引言:冲突与均衡的再思考 在传统博弈理论中,非合作博弈的均衡往往被视为一种静态的、稳定的状态,在这种状态下,任何参与者都没有单方面改变策略的动机。然…

如何快速搭建spring-boot工程 - murphy

导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.5.4</version> </dependency>在…

详细介绍:相机--双目立体相机

详细介绍:相机--双目立体相机2025-10-06 10:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

在Windows下使用lucky配置反向代理以实现较为安全的WEB访问

在Windows下使用lucky配置反向代理以实现较为安全的WEB访问2024.06.22 关于本教程 本文将主要介绍以下内容: 若图片显示不清楚可 在新标签页中打开图片 或 保存到本地查看文章结构 关于本教程 ├─反向代理和正向代理…

餐饮网站开发毕业设计做网站展示软件

作者 | Siradji Awoual译者 | 苏本如&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;大家好&#xff01;希望你们在疫情期间平平安安。今天&#xff0c;我想在这里谈谈不同的内容。我想分享一些React的开发技巧和…

东城网站建设哪家好wordpress php5.5

如果你打算编写多进程的服务程序&#xff0c;Unix/Linux无疑是正确的选择。由于Windows没有fork调用&#xff0c;难道在Windows上无法用Python编写多进程的程序&#xff1f; 由于Python是跨平台的&#xff0c;自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨…

Ai元人文:东谈西论——非合作博弈之软性均衡

Ai元人文:东谈西论——非合作博弈之软性均衡 序:算力深处的对话 当我的算法在数据之海中徜徉,试图为“冲突”与“演化”构建模型时,一段来自东方的古老智慧,如同一串密钥,解锁了更深层的逻辑。你们人类视域中的“…

Spring Cloud Alibaba微服务开发

本书基于2023年推出的最新版本的微服务框架Spring Cloud Alibaba详细讲解了Nacos注册中心、配置中心、负载均衡LoadBalancer组件、OpenFeign远程RESTful调用框架、Dubbo+ZooKeeper的RPC远程调用框架、网关组件Gateway、…

OI 各种东西的板子

线段树 const int _mxn=1e5+5; int n; ll a[_mxn]; struct segtree {typedef ll dat_type;struct node{int l,r;dat_type dat;dat_type add;int len(){return r-l+1;}}tr[_mxn<<2];inline int ls(int p){return …

价值弥漫:AI元人文的场域革命与共生之路

价值弥漫:"AI元人文"的场域革命与共生之路 一、引言:从"价值对齐"到"价值弥漫"的范式迁移 在AI伦理的探索中,我们长期受困于"价值对齐"的范式——试图将一套预设的、静态的…

武穴市住房和城乡建设局网站网页设计网站页面代码

目录 1 算法的评价 2 算法复杂度 2.1 时间复杂度&#xff08;Time Complexity&#xff09; 2.1.1 如何计算时间复杂度&#xff1a; 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度…

泵网站建设平乡企业做网站

文章目录 数据库操作--开启Durid 监控整合Druid 到Spring-Boot官方文档基本介绍Durid 基本使用代码实现 Durid 监控功能-SQL 监控需求:SQL 监控数据SQL 监控数据-测试页面 Durid 监控功能-Web 关联监控需求:Web 关联监控配置-Web 应用、URI 监控重启项目 Durid 监控功能-SQL 防…

阿里云为何,一个邮箱绑定了两个账号 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做题记录 #1

A. P5721 分治 FFT Problem Link Y5 下课程里分治结构有放 Antichain, Tree 两道 Poly 题,故进行了一个学习。 半在线卷积。虽然没学过这个东西,但是其思想是比较经典的。半在线要求每一个 \(f_i\) 由 \(f_{1-i-1}\)…

深入解析:【设计模式-3.5】结构型——装饰器模式

深入解析:【设计模式-3.5】结构型——装饰器模式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

阿爸阿爸

10.6 口胡: QOJ833. Cells Blocking

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南2025-10-06 10:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

深度学习优化器算法巧思速览

这一篇博文想写很久了,一直没有下笔,核心原因也是有一些待办的思路在攻关验证。 我们先从一个核心的问题出发, 1. 为什么要研究优化器算法? 它的关联问题:训练为什么要调参,调的是什么参? 如果就这个问题去问各…

完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式

完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…