当前位置: 首页 > news >正文

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前,我们需要回答两个关键问题:建模的目标用户是谁?他们的具体需求是什么?在一个典型的时序数据管理方案中,数据采集和数据应用是两个主要环节。如下图所示:

对于数据采集工程师而言,他们的主要需求是简单、高效地收集数据。为此,可以考虑创建一个贴源层,该层的数据模型建议与数据源完全一致。这种方式能够大大简化数据采集的过程,使得数据采集工作更加轻松和直观。参见上图贴源层。

另一方面,对于数据应用开发工程师来说,他们需要处理不同业务部门的需求。这些工程师希望数据能够按照业务主题分类,并能够按照预期的访问方式来建模。为了满足这一需求,需要在数据模型中考虑访问层的设计,使得数据应用更加便捷。参见上图访问层。

显然,在数据采集和数据应用之间存在着巨大的鸿沟,那我们如何才能完成时序数据从采集到应用的转换?这就需要引入数据分层的思想。具体来说,可以在贴源层和访问层之间增加一个整合层,用于完成时序数据的时间戳对齐、关联整合、数据汇聚和数据转换等功能。这一整合层的引入,能够实现从数据采集到数据应用的无缝转换,满足不同阶段的需求。

本篇文章将从时序数据采集和应用面临的挑战及需求出发,为大家分析 TDengine 数据建模的原理与方法,并通过实际案例帮助读者更好地理解和应用这些概念。

时序数据的采集和应用开发

采集面临的挑战

对于时序数据采集工程师来说,面临的挑战主要是数据源的格式、数据传输方式、采集入库后的数据模型,在贴源层与采集源的模型按照 1:1 创建方式下,数据源的格式和入库后的数据模型的格式对齐了,也就不需要担心格式不同导致的问题了。

最常见的数据传输方式有三种情况:

  • 单表多列模型:对于数据源来说,如果一个数据采集设备的所有测点,在数据上传时都是一起上传,那么,可以建立单表多列模型的超级表。也就是说,创建一个超级表,该表中包含该采集设备的所有测点指标。
  • 多表多列模型:对于数据源来说,如果一数据采集设备包含多个测点,但这些测点的采集频次并不相同,举例来说:该设备总共采集 120 个测量指标,其中前 40 个测点的采集周期是秒级、中间 40 个测点采集周期是 1 分钟级、最后 40 个测点的采集周期是 5 分钟级,那么,我们需要分别创建三个超级表,第一个超级表包含前 40 个测量值,第二个超级表包含中间 40 个测量值,第三个超级表包含最后的 40 个测量值。这就是多表多列模型,也就是说,创建多个超级表,每个超级表也包含多个列。
  • 多表单列模型:如果数据源是每个测点单独上报,并且每个测点的采集时间戳并不相同,对于这种情况,需要按照数据类型分类,采用多表单列模型。也就是说,每个超级表中只包含一个数据类型,比如 double、int、varchar 等等,每种数据类型一个超级表。子表按照数据类型+设备类型来创建,让子表的数量保持在合理的规模,这样能够利用多个 Vnode来保障性能。

应用开发面临的挑战

对于时序数据应用开发的工程师来说,时序数据能否按照业务主题划分、能否支持实时查询和批量查询等业务场景,这些因素都十分关键。如下图所示:

  • 按照主题划分:以卷烟厂为例,卷烟厂包括多个车间如制丝和卷包,对应的业务应用往往有制丝集控、卷包数采等等。如果我们将这些业务应用按照业务主题划分,分别进行数据建模就能够极大地方便应用开发。各个业务主题共享数据整合层的数据,整合层的数据来源于贴源层,是经过时间戳对齐、数据关联整合、数据汇聚的。
  • 支持实时查询:对于时序数据来说,实时监控是非常典型的业务场景,TDengine 提供了缓存、流计算和数据订阅三种方式,供应用层实时访问。
    • 缓存:对于实时监控场景,TDengine 提供了缓存功能,在创建数据库时,可以通过设置 CACHEMODEL 参数,让 TDengine 在内存中缓存各个子表的最新数据。对于业务应用来说,可以通过 last_row/last,从缓存中实时读取设备的最新状态。
    • 流计算:TDengine 的流式计算引擎提供了实时处理写入数据流的能力,使用 SQL 定义实时数据流的转换规则,当数据被写入流的源表后,数据会被以指定的方式自动处理,并根据指定的触发模式向目标表推送计算结果。它提供了替代复杂流处理系统的轻量级解决方案,并且,能够在高吞吐的数据写入的情况下,将流计算的延迟控制在毫秒级。
    • 数据订阅:除了上述的流计算,TDengine 还提供了类似 Kafka 的数据订阅功能,帮助应用实时获取写入 TDengine 的数据,或者以事件到达顺序处理数据。TDengine 的 topic 有三种,可以是数据库、超级表、或者一个 SELECT 语句。这种方式提供了更大的灵活性,数据的颗粒度可以随时调整,而且数据的过滤与预处理交给 TDengine,有效地减少传输的数据量,并且,降低了应用开发的复杂度。
  • 支持批量查询:对于批量时序数据查询场景,TDengine 提供了 SQL 接口给上层应用查询批量数据使用。也提供了诸多时序数据窗口函数,包括计数窗口(count window)、时间窗口(time window)、状态窗口(status window)、会话窗口(session window)、事件窗口(event window)等多种窗口。
    • taosx:除了通过 SQL 查询之外,对于数据量比较大,需要通过文件或数据库接口同步数据的场景,还可以考虑使用 taosx 来同步数据。

数据建模原理和方法

数据建模原理

TDengine 数据建模的核心原理只有一个:

让查询直接定位到数据块。

首先,我们来观察一下 TDengine 是如何将规模很大的数据切分成很多个数据块的。TDengine 分别从采集点维度和时间戳维度对大规模数据进行分片(Sharding)分区(Partition),如下图所示

对于数据建模来说,我们要充分利用分片(Sharding)分区(Partition)

这两大维度对数据进行切分,确保在查询时,我们的过滤条件(Where 子句)能够直接定位某个、或者某几个数据块,数据块的个数越少越好。定位到的数据块越少,说明过滤的越高效,所需要的磁盘IO带宽越小,查询速度也越快。

数据建模基本概念

请参见:
https://docs.taosdata.com/concept/。

智能电表是典型的时序数据场景。假设每个智能电表采集电流、电压、相位三个量,有多个智能电表,每个电表有位置 Location 和 type 的静态属性。其采集的数据类似如下的表格:

每一条记录都有设备 ID、时间戳、采集的物理量(如上表中的 current、voltage 和 phase)以及每个设备相关的静态标签(location 和 type)。

  • 数据采集点(Data Collection Point):数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。智能电表示例中的 d1001、d1002、d1003、d1004 等就是数据采集点。为充分利用其数据的时序性和其他数据特点,TDengine 采取一个数据采集点一张表的策略,按照此策略,上述 d1001、d1002、d1003、d1004 分别建表。
  • 标签(Label/Tag):标签是指传感器、设备或其他类型采集点的静态属性,不随时间变化。比如设备型号、颜色、设备的所在地等。
  • 采集量(Metric):采集量是指传感器、设备或其他类型采集点采集的物理量。比如电流、电压、温度、压力、GPS 位置等,是随时间变化的。数据类型可以是整型、浮点型、布尔型,也可是字符串。

创建超级表

为智能电表这个设备类型建立一个超级表,采集量有电流、电压和相位,标签有位置和类型。

创建子表

用 smeter 做模板,为 6 个智能电表创建 6 张表,地理位置标签为北京朝阳、海淀、上海浦东等。

聚合查询

查询北京朝阳区所有智能电表的电压平均值和电流最大值。

多维分析

查询北京地区所有类型为 1 的智能电表的电压平均值。

TDengine 数据建模优势

TDengine 数据建模的优势包括:

  • 超级表可以向普通表一样查询,但可以指定标签的过滤条件
  • 标签可以多至 128 个,每个标签代表一个维度
  • 标签可以事后增加、删除、修改。这样数据建模时,可以先不确定标签或分析维度
  • 每个标签,可以是一树状结构,比如“北京·朝阳·望京”,这样便于缩小搜索范围

数据建模案例

以新能源充电站建模场景为例。

背景信息

该客户管理一些充电站:

  • 充电站管理的充电桩大约有几百个,每个充电桩每天可能多次进行充电
  • 每次充电产生一个充电订单,充电订单每年大约有 1000 万个,数据需要保留 2 年
  • 需要监控充电过程中电压、电流等信息,对于历史订单能够回放充电过程
  • 数据查询方式:按照订单查询,期望能够实时监控正在充电的订单、以及能够查询历史订单充电过程

数据建模思考

常规思维,按照一个采集点一张表的原则,这里显然会按照充电桩来创建子表。但是,这样一来存在一个问题,我们按照订单查询时就无法直接定位到某个或者某几个数据块。按照充电桩来创建子表,数据的确会按照充电桩进行分片(Sharding),并且,分片后的数据也按照时间戳进行了分区(Partition),但是,业务查询的时候未指定时间戳范围,而是查询指定的 order_id,所以,无法定位到具体的数据块,需要在分片中进行全量数据扫描,必然导致性能十分低下。如下图所示:

正确的建模思路

让我们回顾 TDengine 数据建模原理:

让查询直接定位到数据块。

业务希望按照订单来查询,那么,我们直接按照订单来对数据进行分片(Sharding),

也就是说每个订单创建一张子表。这样,按照订单查询时,我们能够直接定位到该分片,这样的好处是查询的性能非常好,也非常方便,但也存在两个问题:

  • 每年新建 1000 万张子表,订单数据保留 2 年,预计就有 2000 万张子表,规模会不会太大?
  • 数据保留周期是 2 年,对于超过 2 年的子表,是否能够自动删除呢?

幸运的是,对于时序数据领域常见的“高基数”问题,TDengine 已经很好地解决了,2000 万张子表对于关系型数据库来说,可能是天文数字,但是,对于 TDengine 来说就是小菜一碟。

对于超过 2 年的子表,TDengine 提供了 TTL(Time to Live),是用来指定表的生命周期(单位:天)。如果创建表时指定了这个参数,当该表的存在时间超过 TTL 指定的时间后,TDengine 将自动删除该表。

实际数据建模

  • 创建超级表

  • 为单个订单创建子表(假设订单号:801234567),保留 2 年到期自动删除

  • 按照充电订单查询

通过对时序数据采集和应用的挑战及需求的分析,本文深入探讨了 TDengine 数据建模的原理与方法。我们不仅揭示了数据建模的核心概念和技术细节,还通过实际案例展示了其在新能源场景下的应用效果。希望读者能从中获得启发,在实际工作中灵活运用 TDengine 数据建模的方法,提高时序数据管理的效率与质量。

相关文章:

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前,我们需要回答两个关键问题:建模的目标用户是谁?他们的具体需求是什么?在一个典型的时序数据管理方案中,数据采集和数据应用是两个主要环节。如下图所示: 对于数据采集工程师…...

可以免费合并pdf的软件 合并pdf文件的软件免费 合并pdf的软件免费

在数字化办公的今天,pdf格式因其稳定性和跨平台兼容性被广泛使用。然而,当我们需要将多个 pdf 文件合并为一个时,却往往感到力不从心。本文将为你介绍几款强大的pdf文件合并软件,让你轻松管理文档。 方法一、使用pdf转换器 步骤1…...

【排序 滑动窗口 】1498. 满足条件的子序列数目

本文涉及至知识点 排序 C算法:滑动窗口总结 LeetCode1498. 满足条件的子序列数目 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,…...

RabbitMQ普通集群搭建指南

RabbitMQ普通集群搭建指南 本文已经完全迁移至,www.geekery.cn 后续不在此更新 目标架构 本次搭建的目标是构建一个由三个节点组成的RabbitMQ集群,节点信息如下: rabbit02: IP地址 192.168.10.132rabbit03: IP地址 192.168.10.133rabbit04:…...

AGV平面坐标系变换公式及实例

1、AGV坐标系简介 如上图,小车前后对角是有激光雷达的,其坐标系称为激光坐标系,采用极坐标系体现。中间为车体坐标系,激光坐标系相对于车体坐标系关系不变;左下角是地图坐标系,小车扫图后,建立的…...

es切片和集群

解决单点故障 支持高并发 解决海量数据 1.cluster 集群:包含多个节点,每个节点属于哪个集群是通过一个集群名称(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就…...

IEEE官方列表会议 | 第三届能源与环境工程国际会议(CFEEE 2024)

会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间:2024年12月2日-4日 召开地点:澳大利亚凯恩斯 大会官网:CFEEE 2024-2024 International Conference on Frontiers of Energy and Environment Engineer…...

深度学习中的正则化技术 - Dropout篇

序言 在深度学习的浩瀚领域中,模型过拟合一直是研究者们面临的挑战之一。当模型在训练集上表现得近乎完美,却难以在未见过的数据(测试集)上保持同样优异的性能时,过拟合现象便悄然发生。为了有效缓解这一问题&#xf…...

《昇思 25 天学习打卡营第 18 天 | 扩散模型(Diffusion Models) 》

《昇思 25 天学习打卡营第 18 天 | 扩散模型(Diffusion Models) 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 扩散模型(Diffusion Models) 扩散模型概述 扩散模…...

【Django+Vue3 线上教育平台项目实战】Elasticsearch实战指南:从基础到构建课程搜索与数据同步接口

文章目录 前言一、Elasticsearch倒排索引 二、Docker 搭建 ESDocker 安装Docker 搭建 ES 三、ES基础语法创建索引查看索引删除索引添加数据查询数据修改数据删除数据条件查询分页查询排序 多条件查询andor 范围查询 四、ES在项目中的应用示例 前言 在数据驱动的时代&#xff0c…...

libtins初探-抓包嗅探

libtin 一、概述1. 可移植性2. 特性 二、基础知识1. PDU2. 地址类3. 地址范围类4. 网络接口5. 写pcap文件 三、嗅探1.嗅探基础2. 嗅探器配置3. 循环嗅探4. 使用迭代器嗅探6. 包对象7. 读取pcap文件8. 包的解析 四、发送包1. 发送网络层pdu2. 发送链路层pdu3. 发送和接收响应校验…...

大语言模型-Bert-Bidirectional Encoder Representation from Transformers

一、背景信息: Bert是2018年10月由Google AI研究院提出的一种预训练模型。 主要用于自然语言处理(NLP)任务,特别是机器阅读理、文本分类、序列标注等任务。 BERT的网络架构使用的是多层Transformer结构,有效的解决了长…...

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是:修改…...

Matlab演示三维坐标系旋转

function showTwo3DCoordinateSystemsWithAngleDifference() clear all close all % 第一个三维坐标系 origin1 [0 0 0]; x_axis1 [1 0 0]; y_axis1 [0 1 0]; z_axis1 [0 0 1];% 绕 x 轴旋转 30 度的旋转矩阵 theta_x 30 * pi / 180; rotation_matrix_x [1 0 0; 0 cos(th…...

redis的持久化机制以及集群模式

1.redis的持久化机制 内存数据库具有高速读写的优势,但由于数据存储在内存中,一旦服务器停止或崩溃,所有数据将会丢失。持久化机制的引入旨在将内存中的数据持久化到磁盘上,从而在服务器重启后能够恢复数据,提供更好的…...

【论文解读】大模型算法发展

一、简要介绍 论文研究了自深度学习出现以来,预训练语言模型的算法的改进速度。使用Wikitext和Penn Treebank上超过200个语言模型评估的数据集(2012-2023年),论文发现达到设定性能阈值所需的计算大约每8个月减半一次,95%置信区间约为5到14个月…...

WebApi配置Swagger、Serilog、NewtonsoftJson、Sqlsugar、依赖注入框架Autofac、MD5加密

文章目录 项目准备1、创建WebApi项目配置Swagger、Serilog、NewtonsoftJsonNewtonsoftJsonSwaggerSerilog 使用ORM框架SqlSugar创建Service类库构成MVC框架使用AutoFac进行依赖注入 创建用户登录接口添加用户时进行安全防护 项目准备 1、创建WebApi项目 配置Swagger、Serilog…...

【ffmpeg命令基础】视频选项讲解

文章目录 前言设置输出文件的帧数设置每秒播放的帧数设置输出视频的帧率示例1:更改输出视频的帧率示例2:将图像序列转换为视频 设置输入视频的帧率示例3:处理高帧率视频示例4:处理低帧率视频 同时设置输入和输出帧率示例5&#xf…...

使用uniapp开发小程序(基础篇)

本文章只介绍微信小程序的开发流程,如果需要了解其他平台的开发的流程的话,后续根据情况更新相应的文章,也可以根据uniapp官网的链接了解不同平台的开发流程 HBuilderX使用:https://uniapp.dcloud.net.cn/quickstart-hx.html 开发工具 开始…...

vue3【详解】组合式函数

什么是组合式函数? 利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数,用于实现逻辑复用,类似 react18 中的 hook 函数名称 – 以 use 开头,采用驼峰命名,如 useTitle参数 – 建议使用 toValue() 处理(…...

微服务实战系列之玩转Docker(六)

前言 刚进入大暑,“清凉不肯来,烈日不肯暮”,空调开到晚,还是满身汗。——碎碎念 我们知道,仓库可见于不同领域,比如粮食仓库、数据仓库。在容器领域,自然也有镜像仓库(registry&…...

Python题解Leetcode Hot100之动态规划

动态规划解题步骤-5部曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到…...

你了解GD32 MCU上下电要求吗

你了解GD32 MCU的上下电要求吗?MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例,上电/掉电复位波形如如下图所示。 上电过程中,VDD/VDDA电压上电爬坡,当电压高于VPOR(上电复位电压)MCU开始启动&a…...

二、【Python】入门 - 【PyCharm】安装教程

往期博主文章分享文章: 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步:PyCharm下载 第二步:安装(点击安装包打开下图页面) 第三步:科学使用,请前往下载最新工具及教程&#xff1a…...

2、程序设计语言基础知识

这一章节的内容在我们的软件设计师考试当中,考的题型比较固定,基本都是选择题,分值大概在2~4分左右。 而且考的还多是程序设计语言的一些基本语法,特别是这两年比较火的Python。 所以对于有一定要编程基础的即使本章的内容不学习&…...

ARM/Linux嵌入式面经(十八):TP-Link联洲

文章目录 虚拟内存,页表,copy on write面试题1:面试题2:面试题3:进程和线程的区别红黑树和b+树的应用红黑树的应用B+树的应用视频会议用了哪些协议1. H.323协议2. SIP协议(会话发起协议)3. WebRTC(网页实时通信)4. 其他协议io多路复用(select,poll,epoll)面试题li…...

解读vue3源码-响应式篇2

提示:看到我 请让我滚去学习 文章目录 vue3源码剖析reactivereactive使用proxy代理一个对象1.首先我们会走isObject(target)判断,我们reactive全家桶仅对对象类型有效(对象、数组和 Map、Set 这样的集合类型),而对 str…...

【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS

1. 中间件 1.1 介绍(ChatGPT抄的,大致可以理解) 一种机制,用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑,以实现一些通用的功能,如身份验证、…...

centos7安装es及简单使用

为了方便日后查看,简单记录下! 【启动es前,需要调整这个配置文件(/opt/elasticsearch-6.3.0/config/elasticsearch.yml)的两处ip地址,同时访问页面地址的ip:9200时,ip地址也对应修改】 【启动kibana前,需要调整这个配置文件(/opt/kibana-6.3.0/config/k…...

2024年自动驾驶SLAM面试题及答案(更新中)

自动驾驶中的SLAM(Simultaneous Localization and Mapping,即同步定位与地图构建)是关键技术,它能够让车辆在未知环境中进行自主定位和地图建构。秋招来临之际,相信大家都已经在忙碌的准备当中了,尤其是应届…...

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记(上) 参考:pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页,网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…...

数学建模--图论与最短路径

目录 图论与最短路径问题 最短路径问题定义 常用的最短路径算法 Dijkstra算法 Floyd算法 Bellman-Ford算法 SPFA算法 应用实例 结论 延伸 如何在实际应用中优化Dijkstra算法以提高效率? 数据结构优化: 边的优化: 并行计算&…...

FLINK-checkpoint失败原因及处理方式

在 Flink 或其他分布式数据处理系统中,Checkpoint 失败可能由多种原因引起。以下是一些常见的原因: 资源不足: 如果 TaskManager 的内存或磁盘空间不足,可能无法完成状态的快照,导致 Checkpoint 失败。 网络问题&am…...

Hbase映射为Hive外表

作者:振鹭 Hbase对应Hive外表 (背景:在做数据ETL中,可能原始数据在列式存储Hbase中,这个时候,如果我们想清洗数据,可以考虑把Hbase表映射为Hive的外表,然后使用Hive的HQL来清除处理数据) 1. …...

洛谷P1002(过河卒)题解

题目传送门 思路 直接爆搜会TLE,所以考虑进行DP。 由于卒只可以从左边和上面走,所以走到(i,j)的路程总数为从上面走的路程总数加上从左边走的路程总数。我们用dp[i][j]表示从起点走到(i,j)的路程总数,那么状态转移方程为: dp[…...

微信小程序 async-validator 表单验证 第三方包

async-validator 是一个基于 JavaScript 的表单验证库,支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element 中的表单验证都是基于 async-validator 使用 async-validator 可以方便地 构建表单中逻辑,使得错误提示信息更加友好和灵…...

马克·扎克伯格解释为何开源AI对开发者有利

Meta 今天发布了 Llama 3.1 系列人工智能模型,在人工智能领域取得了重大进展,其性能可与领先的闭源模型相媲美。值得一提的是,在多项人工智能基准测试中,Llama 3.1 405B 模型的性能超过了 OpenAI 的 GPT-4o 和 Claude 3.5 Sonnet。…...

游戏外挂的技术实现与五年脚本开发经验分享

引言: 在数字娱乐的浪潮中,电子游戏成为许多人生活中不可或缺的一部分。然而,随着游戏的普及,一些玩家为了追求更高效的游戏体验或不正当竞争优势,开始使用游戏外挂程序。这些外挂往往通过修改游戏正常运行机制来提供非…...

认识神经网络【多层感知器数学原理】

文章目录 1、什么是神经网络2、人工神经网络3、多层感知器3.1、输入层3.2、隐藏层3.2.1、隐藏层 13.2.2、隐藏层 2 3.3、输出层3.4、前向传播3.4.1、加权和⭐3.4.2、激活函数 3.5、反向传播3.5.1、计算梯度3.5.2、更新权重和偏置 4、小结 🍃作者介绍:双非…...

MySQL入门学习-SQL高级技巧.CTE和递归查询

在 MySQL 中,SQL 高级技巧包括了 Common Table Expressions(CTE)和递归查询等。 一、CTE(Common Table Expressions,公共表表达式)的概念: CTE 是一个临时的结果集,它可以在一个查询…...

键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???

当在键盘上按下一个键时会进行一下操作: 1.当按下任意一个键时,键盘编码器监控会来判断按下的键是哪个 2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面 3.此时发送一个中断请求给中断控制器,中断控制器获取到中断号发送…...

Spring Boot 接口访问频率限制的实现详解

目录 概述为什么需要接口访问频率限制常见的实现方式 基于过滤器的实现基于拦截器的实现基于第三方库Bucket4j的实现 实际代码示例 基于过滤器实现Rate Limiting基于拦截器实现Rate Limiting使用Bucket4j实现Rate Limiting 最佳实践 选择合适的限流算法优化性能记录日志和监控…...

前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker

引言 在用户至上的时代,精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库,它提供了一种高效的解决方案,用于跟踪用户交互的持续时间,并提升项目埋点的效率。通过本文,你将了解到如…...

中文分词库 jieba 详细使用方法与案例演示

1 前言 jieba 是一个非常流行的中文分词库,具有高效、准确分词的效果。 它支持3种分词模式: 精确模式全模式搜索引擎模式 jieba0.42.1测试环境:python3.10.9 2 三种模式 2.1 精确模式 适应场景:文本分析。 功能&#xff1…...

EXO-helper解释

目录 helper解释 helper解释 在Python中,字符串 "\033[93m" 是一个ANSI转义序列,用于在支持ANSI转义码的终端或控制台中改变文本的颜色。具体来说,\033[93m 用于将文本颜色设置为亮黄色(或浅黄色,具体取决于终端的显示设置)。 这里的 \033 实际上是八进制的 …...

Qt开发网络嗅探器01

引言 随着互联网的快速发展和普及,人们对网络性能、安全和管理的需求日益增长。在复杂的网络环境中,了解和监控网络中的数据流量、安全事件和性能问题变得至关重要。为了满足这些需求,网络嗅探器作为一种重要的工具被 广泛应用。网络嗅探器是…...

mysql面试(三)

MVCC机制 MVCC(Multi-Version Concurrency Control) 即多版本并发控制,了解mvcc机制,需要了解如下这些概念 事务id 事务每次开启时,都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后…...

阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版

本周阿里云发布公告对公共 DNS 免费版使用政策进行调整,免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制,单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…...

捷配生产笔记-一文搞懂阻焊层基本知识

什么是阻焊层? 阻焊层(也称为阻焊剂)是应用于PCB表面的一层薄薄的聚合物材料。其目的是保护铜电路,防止焊料在焊接过程中流入不需要焊接的区域。除焊盘外,整个电路板都涂有阻焊层。 阻焊层应用于 PCB 的顶部和底部。树…...

html 常用css样式及排布问题

1.常用样式 <style>.cy{width: 20%;height: 50px;font-size: 30px;border: #20c997 solid 3px;float: left;color: #00cc00;font-family: 黑体;font-weight: bold;padding: 10px;margin: 10px;}</style> ①宽度&#xff08;长&#xff09; ②高度&#xff08;宽&a…...