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

TDengine 新功能 复合主键

1. 简介

从 TDengine 3.3.0.0 版本之后,新增了复合主键的功能。

TDengine 原来的时间列是不允许有重复时间戳的,有了复合主键功能后,时间列即允许有重复,重复后的时间戳按紧跟其后第二列主键列的值来确定唯一性。

此功能的常用场景如高速收费口,同一时间内可能会多辆车通过,股票交易记录,同一时间内笔成交等多种实际应用场景。

2. 功能说明

2.1 建表

用户可以在建表时用 PRIMARY KEY 关键字,额外指定除主键时间戳列以外的另一列作为主键列,该列与时间戳列共同组成一行数据的键值,其类型必须为整型(int32, int64, uint32, uint64) 或 字符串类型(varchar)。超级表与普通表均支持复合主键。复合主键列不支持修改、增加和删除操作。PRIMARY KEY 列只能设置为第二列

具体 SQL 语句如下:

CREATE TABLE t ( ts TIMESTAMP, obj_id VARCHAR(64) PRIMARY KEY, data1 FLOAT, data2 int );

2.2 写入

只有当时间戳相同且 PRIAMRY KEY 列值都相同时,两行数据才会被认为是重复数据,否则被认为是两行不同数据。如果时间戳相同但 Primary key 较小数据后写入,则视为乱序数据处理

schemaless 写入不支持复合主键的情况,因为 schemaless 本身就是没有 schema,没法确定复合主键,目前的三种 schemaless 协议 (influxdb line/opentsdb telnet/opentsdb json) 也没有复合主键这个概念。

2.3 删除

删除操作与现有删除操作一样,只支持按时间段删除,不支持按主键范围删除

2.4 查询

2.4.1 数据读取

查询复合主键数据时,时间戳相同且 PRIMARY KEY 列值相同时,被认为是一行数据。对于复合主键(时间戳+PRIMARY KEY 列)相同但被多次写入的重复数据则在合并更新后返回。只有复合主键不同的行被认为不同的行数据,被查询分别返回。每个表的读取结果是按(时间戳主键,Primary Key)有序。其他查询行为也将相应地变动。具体变化内容见后续章节。

查询行为的适配源自于TSDB reader 返回给上层的基础数据结构 SSDataBlock中包含了时间戳相同,但primary key 不同的记录。

2.4.2 标量查询

此原来行为相同,无改变

2.4.3 聚合查询

  1. 非时间窗口类:用户可见层面无变化。
  2. 时间窗口聚合类:TDengine 系统中针对时间窗口采用闭区间进行描述,并且相同时间戳不同primary key的记录归属于同一个时间窗口。故用户可见的时间窗口无变化。
  3. 在超级表的查询中,已经有归属于不同时间线的相同时间戳的查询,增加了 primary key 以后,用户可见表现层面无任何变化。

2.4.4 查询函数

类别函数名是否变化
数据函数ABS无影响
ACOS无影响
ASIN无影响
ATAN无影响
CEIL无影响
COS无影响
FLOOR无影响
LOG无影响
POW无影响
ROUND无影响
SIN无影响
SQRT无影响
TAN无影响
字符串函数CHAR_LENGTH无影响
CONCAT无影响
CONCAT_WS无影响
LENGTH无影响
LOWER无影响
LTRIM无影响
RTRIM无影响
SUBSTR无影响
UPPER无影响
时间和日期函数TIMEDIFF无影响
TIMETRUNCATE无影响
转换函数CAST无影响
TO_ISO8601无影响
TO_JSON无影响
TO_UNIXTIMESTAMP无影响
TO_CHAR无影响
TO_TIMESTAMP无影响
聚合函数APERCENTILE无影响
AVG无影响
COUNT无影响
ELAPSED无影响
LEASTSQUARES无影响
SPREAD无影响
STDDEV无影响
SUM无影响
HYPERLOGLOG无影响
HISTOGRAM无影响
PERCENTILE无影响
选择函数BOTTOM无影响
FIRST有变化
INTERP有变化
LAST有变化
LAST_ROW有变化
MAX无影响
MIN无影响
MODE无影响
SAMPLE无影响
TAIL无影响
TOP无影响
UNIQUE有变化
时序数据特有函数CSUM无影响
DERIVATIVE有变化
DIFF有变化
IRATE有变化
MAVG无影响
STATECOUNT无影响
STATEDURATION无影响
TWA有变化

变化的函数行为变化如下:

1. Interp

Interp 函数返回设定时间点 T 0 的插值(断面)数据,其前置时间戳 Tprev(小于 T0的最大时间戳)或后置时间戳Tnxt(大于T0的最小时间戳)可能有重复时间,并且其对应的数值不同。

进行插值计算时,前置时间戳 Tprev 或后置时间戳 Tnxt 均只使用首次出现的记录进行计算,丢弃其后出现的相同时间戳不同主键的记录。

首次出现的定义:对于任一时间戳Tx,在按照升序返回的数据记录中,(同一个表中数据)第一条 Tx 的记录即为首次出现记录。降序返回的数据记录中(同一个表中数据)Tx 最后一次出现的记录为首次出现。

需要注意,首次出现的判定只针对同一个表,对于超级表下的不同的表,无首次出现的判定

2. FIRST

First 返回时间戳最小的记录。对于同一个表中具有相同(最小)时间戳不同主键的情况,返回该表中具有该时间戳的所有记录中首次出现的记录。

首次出现定义同上。

超级表查询中,在完成上述逻辑以后,还需要对来自不同表的时间戳进行比较和取舍,针对来自不同vnode的记录,如果 ts 相同需要进行 primary key 的比较。因此 first 函数返回的全局最小的(ts + primary key) 最早的结果。

3. LAST

Last 返回时间戳最大的记录。对于同一个表中具有相同(最大)时间戳不同主键的情况,返回该表中具有该时间戳的所有记录中末次出现的记录。

末次出现定义对应于首次出现的定义。

针对超级表跨 vnode 查询返回的结果,其判定逻辑于 FIRST 函数处理逻辑相同,需要同时比较 ts + primary key

4. LAST_ROW

与 last 函数相同。

5. UNIQUE

Unique 返回任一时间戳第一次出现的记录。对于同一个表中的记录,只返回首次出现的记录。不同子表中的相同时间戳记录,判定逻辑不变。

首次出现定义同上。

6. DERIVATIVE

同一个子表中的记录,使用首次出现记录进行计算,忽略后续出现的相同时间戳不同主键的记录。

首次出现定义同上。

7. DIFF

同一个子表中的记录,使用首次出现记录进行计算,忽略后续出现的相同时间戳不同主键的记录。

首次出现定义同上。

8. IRATE

同 derivative 函数处理逻辑相同。

9. TWA

同一个子表中数据进行窗口边界插值的时候,均使用首次出现记录进行插值计算返回结果。非首次出现记录不参与计算。

首次出现定义同上。

10. show create

Show create 返回创建(超级)表的SQL 语句,对于有 primary key 的(超级)表,相应的 SQL 语句有变化

11. DESC <table_name>

DESC 获取 (超级)表的 schema 信息,返回的结果中,需要标记第二列(primary key 只能为第二列)是否是 primary key 列。

12. INSERT INTO <table_name> SELECT

会进行符合性检查,具有 primary key 的(超级)表的不能向无 primary key 的表中写入数据。无 primary key 的表可以向具有 primary key 的表写入数据。

向 primary key 的表写入数据的时候,要求 primary key 列必须非 NULL。

2.4.5 查询子句

序号

子句

行为变化

1

比较表达式/条件子句

无影响

2

fill 子句

无影响

3

窗口子句

无影响

4

group by 子句

无影响

5

partition by 子句

无影响

6

join 查询

无影响

7

Distinct 子句

无影响

8

union子句

无影响

9

slimit子句

无影响

10

limit子句

无影响

11

order by子句

无影响

12

having子句

无影响

13

range子句

无影响

14

every子句

无影响

15

子查询

无影响

2.5 流计算

2.5.1 流计算窗口

对我们所支持的窗口类型,即 Interval、Session窗口,如果数据源表是复合主键,数据先按时间戳排序,时间戳相同的,再按复合主键排序,然后才是其他列排序。所以复合主键场景,流计算当前的设计和实现能够透明处理,符合流计算窗口当前的预期。存储流计算结果的表是复合主键,则Interval、Session 窗口输出结果时,需要按照时间戳和复合主键排序。

流计算对于乱序数据的界定方式:当前这批写入的数据,与之前写入的数据做对比。窗口计算要求数据按时间戳有序,只是要求当前这批数据,这个是局部的,并不是要求数据源的全部数据有序。

2.5.2 创建流计算

需要考虑存储流计算结果的表。对于自动创建超级表场景,需要提供复合主键的信息。新增语法,在创建流计算的SQL中,显式指定复合主键信息,即流计算结果中,哪些列是复合主键。对于写入已存在超级表,通过元数据能够获取复合主键的信息,不需要SQL中指定。

语法如下:

CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name[(field1_name, field2_name [PRIMARY KEY], field3_name, ...)] [TAGS (create_definition [, create_definition] ...)] SUBTABLE(expression) AS subquery

PRIMARY KEY 使用规则和限制与建表SQL相同。

2.5.3 流计算中不支持的场景

由于需要按照 PK 删除 已经生成的记录。因此,不支持状态窗口、事件窗口、计数窗口在有 pk 的表上进行计算。对于全是标量函数的流计算,不支持数据源是复合主键,且目标表不是复合主键。

2.6 订阅

2.6.1 接口变更

  1. tmq_get_json_meta(获取meta信息的 json 描述)

        该接口内部创建表数据结构里增加列是否是复合主键参数("isPrimarykey":true)。已在文档里更新: https://jira.taosdata.com:18090/pages/viewpage.action?pageId=158206215

  2. tmq_get_raw 接口返回的 raw data 做了升级,请查看文档 数据订阅结果序列化方案

2.6.2 其它接口无变更

2.7 Last 缓存

  1. cache_model: none,返回最大的时间戳和该时间戳下最大的主键所对应的行或值

  2. cache_mode: last_value, last_row, both,查询行为受缓存更新规则影响,更新规则如下:

     缓存的更新粒度仍然是表级别。在主时间戳列相同情况下,主键列按大小顺序取最大值。即在更新缓存时,新到达的数据与当前 last 缓存中的数据相比,如果时间戳更大或时间戳相同但主键值更大则更新缓存,否则不更新缓存。

3. 性能影响

3.1 写入性能

  1. 非重复时间戳:在没有任何两条记录时间戳相同的情况下,其写入性能与未引入 primary key 相比完全相同

  2. 有重复时间戳的场景:在极端情况下,时间戳全部相同,而 primary key 单调递增,预估这种场景下写入性能下降 50%,原因是要进行两次键值比较。

  3. 纯乱序数据写入:即任意一行记录的时间戳和 primary key 都有可能小于之前已经写入的部分记录,这种情况下仍旧无法预估性能下降的比例。原则乱序程度越高,性能下降越明显

3.2 查询性能

3.2.1 数据读取

读取过程中,在merge阶段需要同时比较 ts 和 primary key column,因此 merge 过程会消耗更多的 CPU,记录合并过程会出现明显地性能下降。

合并过程是在 tsdb 完成,因此所有的查询均受影响(只使用 head 文件 和 SMA 索引的查询除外)。性能受到的影响程度受 key长度、数据写入模式、数据在文件中物理分布、数据重复比例、数据读取开销在整个查询过程中资源开销占比等诸多因素共同影响,无法简单评估性能下降的程度。

3.2.2 不同类型查询性能表现

在排除数据读取性能降低的场景下,对于非分组类型的查询(没有 partition by 和 group by 子句),没有明显的变化。

4. 兼容性

1. 不会对已存在的数据产生影响,数据不支持版本回退,因为低版本识别不出复合主键。

2. 流计算会有影响。需要删除删除流计算才能进行升级。

5. 约束和限制

  1. 只允许额外指定除时间戳以外的一列作为主键

  2. 支持定长和变长类数据类型,暂定支持非浮点数及 varchar。

  3. 主键与时间戳列一样,不允许缺省或为 NULL

  4. 主键列不允许 alter 或 drop 等操作

  5. 已建无主键列的表不可以通过 alter 语句添加主键列

  6. 不支持对主键列的范围删除

6. 总结

本章主要介绍了新功能复合主键的对外接口使用、影响的功能及函数内部技术实现,受约条件等,帮助技术开发人员更好了解及使用此功能。

相关文章:

TDengine 新功能 复合主键

1. 简介 从 TDengine 3.3.0.0 版本之后&#xff0c;新增了复合主键的功能。 TDengine 原来的时间列是不允许有重复时间戳的&#xff0c;有了复合主键功能后&#xff0c;时间列即允许有重复&#xff0c;重复后的时间戳按紧跟其后第二列主键列的值来确定唯一性。 此功能的常用…...

【OpenHarmony】初识设备间互联互通的统一基础:分布式软总线

分布式软总线 前言软总线软总线代码目录软总线传输模块概述传输模块主要对外接口和使用方式 前言 很久没有写出一篇能够分享出来的学习心得了&#xff0c;零零散散地写了好多&#xff0c;总是不太满意。今年8月份开始正式投入精力去学习open harmony&#xff0c;记得第一次接触…...

yocto加软件包install 动态链接库报错

加入bb文件,编译通过 在install时报错 报错 ERROR: demo-1.0-r0 do_package_qa: QA Issue: -dev package agent-dev contains non-symlink .so ‘/usr/lib64/libdemo.so’ 解决 在bb文件install前加2行 SOLIBS ".so" FILES_SOLIBSDEV ""do_install …...

《数据结构》(408代码题)

2009 单链表&#xff08;双指针&#xff09; 分析&#xff1a;首先呢&#xff0c;给我们的数据结构是一个带有表头结点的单链表&#xff0c;也不允许我们改变链表的结构。链表的长度不是直接给出的啊&#xff0c;所以这个倒数也很棘手。那我们该如何解决这个“k”呢&#xff0c…...

哈希表的完善及unordered_map/unordered_set封装

1.哈希表的完善 1.1 优化&#xff1a;哈希函数 在实际使用中&#xff0c;往往需要以字符串作为存储依据(键值)&#xff0c;比如姓名与快递信息、商品名称与价格、中文单词与英文释义等。 而在上一篇文章中&#xff0c;我们实现的哈希表只考虑了整型的存储情况&#xff0c;即直…...

“物联·数据·产融·场景”聚力垂直数智场景下的新质生产力破局

人工智能、物联网&#xff08;简称AIOT&#xff09;正在深刻改变世界的经济格局&#xff0c;对各行各业产生深厚的影响。12月6日&#xff0c;由深圳市物联网协会、华夏银行深圳分行、深圳市区块链技术应用协会、深圳市康复辅助器具智能技术应用协会联合主办的第五届AIOT生态大会…...

API接口的性能测试与优化策略

在现代软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色&#xff0c;它们作为不同服务之间的桥梁&#xff0c;确保数据的顺畅流通与交互。然而&#xff0c;随着用户需求的不断增长和系统复杂性的提升&#xff0c;API接口的性能问题日益…...

【Vue】Part4 接口调用

接口调用方式 原生ajax基于jQuery的ajaxfetchaxios 异步 JavaScript的执行环境是「单线程」所谓单线程&#xff0c;是指JS引擎中负责解释和执行JavaScript代码的线程只有一个&#xff0c;也就是一次只能完成一项任务&#xff0c;这个任务执行完后才能执行下一个&#xff0c;…...

管理系统前端框架开发案例学习

一、 需求分析 本案例的主要目标是开发一个智能学习辅助系统的前端界面&#xff0c;涵盖以下功能模块&#xff1a; 首页&#xff1a;显示系统的总体概览和关键功能介绍。 班级学员管理&#xff1a;实现班级管理和学员管理。 系统信息管理&#xff1a;管理部门和员工信息。 …...

协程设计原理与实现

协程设计原理与汇编实现 同步与异步 对于任何一个事情&#xff0c;都可以划分为不同的步骤。所谓同步&#xff0c;就先做第一个事情&#xff0c;按照这件事的步骤完成这件事之后&#xff0c;再去做第二件事。再去做第三件事&#xff0c;以此类推。 异步就是&#xff0c;可以…...

c++广播通讯的实现

概念大家都很清楚&#xff0c;不赘述。 广播必然用UDP这套东西。 setsockopt() 函数及其在广播中的应用&#xff1a; 在 C 网络编程中&#xff0c;setsockopt() 函数用于设置套接字选项&#xff0c;这些选项可以控制套接字的各种行为。对于广播通信&#xff0c;我们特别关心…...

Leetcode 3377. Digit Operations to Make Two Integers Equal

Leetcode 3377. Digit Operations to Make Two Integers Equal 1. 解题思路2. 代码实现 题目链接&#xff1a;3377. Digit Operations to Make Two Integers Equal 1. 解题思路 这一题的核心思路属于路径遍历问题&#xff0c;我们使用一个堆排来控制最优路径的选择。 我们首…...

高项 - 项目管理原则与项目绩效域

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 项目管理原则与项目绩效域项目管理12条原则原则1&#xff1a;成为勤勉、尊重和关心他人的管家 (p202)原则…...

【开源】A065—基于SpringBoot的库存管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

LeetCode—189. 轮转数组(中等)

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例1&#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1 步:[7,1,2,3,4,5,6] 向右轮转 2 步:[6,7,1,2,3,4,5] 向…...

fastadmin框架同时使用 阿里云oss和阿里云点播

背景 项目的实际需求中既要用到阿里云oss产品又用到阿里云点播系统&#xff0c;实现完美的统一。设置两个地址downUrl&#xff0c;thirdCode。分别代表阿里云oss上传路径和阿里云点播系统vId。 实现 默认框架你已经集成好阿里云oss集成工作&#xff0c;前端html页面实现 <…...

MySQL-DML之数据表操作

文章目录 一. 插入表记录1. 向表中插入部分字段2. 向表中插入所有字段,字段的顺序为创建表时的顺序3. 一次添加多条数据信息 二. 更新表记录1. 更新所有记录的指定字段 更新符号条件记录的指定字段2. 更新符号条件记录的指定字段 三. 删除表记录1. 按条件删除记录2. 清空记录 四…...

Android 逆向/反编译/Hook修改应用行为 基础实现

前言&#xff1a;本文通过一个简单的情景案例实现安卓逆向的基本操作 一、情景描述 本文通过一个简单的情景案例来实现安卓逆向的基本操作。在这个案例中所使用的项目程序是我自己的Demo程序&#xff0c;不会造成任何的财产侵害&#xff0c;本文仅作为日常记录及案例分享。实…...

【前端】理解 JavaScript 对象属性访问的复杂性

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;JavaScript 对象属性的访问模式1. 点符号访问&#xff08;Dot Notation&#xff09;2. 方括号访问&#xff08;Bracket Notation&#xff09;点符号…...

进入 Dystopia:第九周游戏指南

本指南将为大家详细说明在第八周的每个体验中可以获得的奖励。 在杂草丛生的反乌托邦废墟中生存&#xff0c;随着大自然重新开垦这片土地&#xff0c;文明已陷入绝望。穿越高耸入云、摇摇欲坠的摩天大楼&#xff0c;抵御末世社会的各种危险。适应这个文明与荒野之间的界限已经消…...

Helm安装Mysql8主从复制集群

目录 一、Helm安装 二、安装mysql 1、拉取镜像 2、修改配置文件 3、创建mysql-secret 4、安装 一、Helm安装 这里不再赘叙&#xff0c;具体安装请参考官网 Helm | 快速入门指南 二、安装mysql 1、拉取镜像 #添加仓库 helm repo add bitnami https://charts.bitnami.c…...

[小白系列]GPU-nvidia-smi指令

‌nvidia-smi&#xff08;NVIDIA System Management Interface&#xff09;是一种命令行实用程序&#xff0c;用于监控和管理NVIDIA GPU&#xff08;图形处理器&#xff09;的状态和性能‌。它提供了一种简单而强大的方式来获取有关GPU的实时信息&#xff0c;并且可以用于诊断、…...

Flutter 图片编辑板(一) 事件路由

一个图片编辑板&#xff0c;有两部分组成。编辑板和内容项。每一个内容项是被InteractiveViewer修饰的widget&#xff0c;具有缩放偏移的功能。 在图片编辑板上&#xff0c; 会有多个内容相&#xff0c;图片或文字&#xff08;添加文字目前还没做过&#xff09;。 当要编辑其中…...

Cherno C++学习笔记 P33 字符串的字面量

在这篇文章当中我们介绍一下有关于字符串更加深入的知识&#xff0c;也就是字符串的字面量。 首先什么是字面量&#xff1f;其实也很简单&#xff0c;就是双引号里面的那一坨&#xff0c;其实就是字面量&#xff0c;我们举一个最简单的例子&#xff1a; #include<iostream…...

数据结构 (36)各种排序方法的综合比较

一、常见排序方法分类 插入排序类 直接插入排序&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。希尔排序&#xff1a;是插入排序的一种改进版本&#xff0c;先将整个待排序的记录序列分割成为…...

Master EDI 项目需求分析

Master Electronics 通过其全球分销网络&#xff0c;支持多种采购需求&#xff0c;确保能够为客户提供可靠的元件供应链解决方案&#xff0c;同时为快速高效的与全球伙伴建立合作&#xff0c;Master 选择通过EDI来实现与交易伙伴间的数据传输。 EDI为交易伙伴之间建立了一个安…...

java+ssm+mysql计算机等级考试网

项目介绍&#xff1a; 使用javassmmysql开发的计算机等级考试信息网&#xff0c;系统包含前后台&#xff0c;包含超级管理员&#xff0c;系统管理员角色&#xff0c;功能如下&#xff1a; 前台&#xff1a;首页&#xff1b;考试动态&#xff1b;相关资源下载&#xff1b;考试…...

MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)

0x01 产品描述: Mitel MiCollab 是一个企业协作平台,它将各种通信工具整合到一个应用程序中,提供语音和视频通话、消息传递、状态信息、音频会议、移动支持和团队协作功能。0x02 漏洞描述: Mitel MiCollab 的 NuPoint 统一消息 (NPM) 组件中存在身份验证绕过漏洞,由于输入…...

【Python]深入Python日志管理:从logging到分布式日志追踪的完整指南

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 日志是软件开发中的核心部分,尤其在分布式系统中,日志对于调试和问题定位至关重要。本篇文章将从Python标准库的logging模块出发,逐步探讨日志管理的最佳实践,涵盖日志配置、日志分层、日志格式化等基…...

python rstrip 的迷惑行为

在项目中&#xff0c;我需要把字符串末尾的一部分去掉&#xff0c;类似截断&#xff0c;我用ide的随笔提示&#xff0c;发现了rstrip这个方法&#xff0c;然后我试了下&#xff0c;满足我的需求&#xff0c;但在测试过程中&#xff0c;我发现了rstrip的一些行为很让我迷惑。 开…...

SPI通信协议

SPI通信协议 简介通信原理通信原理SPI数据通信的流程可以分为以下几步&#xff1a;通信特性设备时钟时钟速率时钟极性跟相位SPI协议层通讯流程详解优点&#xff1a;缺点&#xff1a; DS1302 时钟实验控制寄存器日历、时钟寄存器寄存器说明 DS1302 读写时序软件功能实现 简介 SP…...

vue中如何实现商品多规格添加(后台商城管理系统)

在制作商城类的后台管理系统中会遇到多规格商品的添加&#xff0c;需要向固定的数组内添加&#xff0c;通过查看数据结构正确的向数组中添加数据。 如图&#xff1a; 功能需求&#xff1a;1.每次点击添加新规格时&#xff0c;批量设置会多出来一行表格和一个标题输入框。 最…...

智创 AI 新视界 -- AIGC 重塑广告行业的创新力量(16 - 7)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Runloop

假设你的项目中有关tableView&#xff0c;然后还有一个定时器timer在执行&#xff0c;定时器代码如下&#xff1a; var num 0override func viewDidLoad() {super.viewDidLoad()let timer Timer(timeInterval: 1,target: self,selector: #selector(self.run),userInfo: nil,r…...

代码随想录第40天

121. 买卖股票的最佳时机 class Solution:def maxProfit(self, prices: List[int]) -> int:cost, profit float(inf), 0for price in prices:cost min(cost, price)profit max(profit, price - cost)return profit122.买卖股票的最佳时机II class Solution:def maxPr…...

element plus table组件多选获取数据id

首先给table加上 selection-change"handleSelectionChange"事件 示例 <el-table selection-change"handleSelectionChange" stripe:data"data?.slice((currentPage3 - 1) * pageSize3, currentPage3 * pageSize3)" style"width: 100%…...

自动驾驶:百年演进

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

STM32 了解OLED

内容扩展 调试方式串口调试&#xff1a;通过串口调试&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印到显示屏上 keil调试模式&#xff1a;借助Keil软件的调试模式&a…...

NanoLog起步笔记-7-log解压过程初探

nonolog起步笔记-6-log解压过程初探 再看解压过程建立调试工程修改makefile添加新的launch项 注&#xff1a;重新学习nanolog的README.mdPost-Execution Log Decompressor 下面我们尝试了解&#xff0c;解压的过程&#xff0c;是如何得到文件头部的meta信息的。 再看解压过程 …...

python连接redis详细步骤

1.下载并安装windows python Window 平台安装 Python: 以下为在 Window 平台上安装 Python 的简单步骤。 打开 WEB 浏览器访问 Python Releases for Windows | Python.org &#xff1a; 记得勾选 Add Python 3.6 to PATH。 在cmd 执行pip install redis 2.编辑python代码…...

使用redis 的stream 做消息中间件 多线程消费消息

1.redis stream 特点 1.支持消息持久化 2.消费者组模式 3.消息确认机制 4. 消息重试机制 5. 死信队列2. 消息生产者服务 2.1 如下代码Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…...

《操作系统 - 清华大学》6 -5:局部页面置换算法:最不常用置换算法 (LFU, Least Frequently Used)

文章目录 1. 最不常用算法的工作原理2.最不常用算法特征3. 示例 1. 最不常用算法的工作原理 最不常用算法&#xff1a;注意并不是表示算法本身不常用&#xff0c;而是采取最不常使用页面的策略&#xff0c;Least Frequently Used&#xff0c; LFU。LRU 是最久未被访问的页&…...

GWAS分析先做后学

大家好&#xff0c;我是邓飞。 GWAS分析是生物信息和统计学的交叉学科&#xff0c;上可以学习编程&#xff0c;下可以学习统计。对于Linux系统&#xff0c;R语言&#xff0c;作图&#xff0c;统计学&#xff0c;机器学习等方向&#xff0c;都是一个极好的入门项目。生物信息如…...

【threejs】创建FPS相机

原理说明 控制器是一个很麻烦的东西&#xff0c;需要创建更多的类来管理相机行为&#xff0c;并且可自定义性差&#xff0c;所以将部分控制器的功能绑定到相机上&#xff0c;可以解决这些问题&#xff0c;所以我以 FlyControls为例&#xff0c;将控制器功能绑定到相机上&#…...

路径规划之启发式算法之十一:布谷鸟搜索算法(Cuckoo Search,CS)

布谷鸟搜索算法&#xff08;Cuckoo Search&#xff0c;CS&#xff09;是一种新兴的自然启发式算法&#xff0c;由剑桥大学的杨新社教授和S.戴布&#xff08;Xin-She Yang和Suash Deb&#xff09;于2009年提出。该算法基于布谷鸟的寄生性育雏&#xff08;巢寄生&#xff09;行为…...

Mitel MiCollab企业协作平台存在任意文件读取漏洞(CVE-2024-41713)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

java+springboot+mysql党务(党员)管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的党务管理系统&#xff0c;系统包含管理员、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;用户管理&#xff1b;党支部管理&#xff1b;党员管理&#xff08;入党申请、积极分子、发展对象、预备党员、正式…...

gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名

迁移 **GoZero** 项目到新服务器并配置相关环境涉及多个步骤。以下是一个系统化的指南&#xff0c;涵盖服务器环境安装、数据库和缓存配置、项目部署以及域名绑定。 ### 步骤概述 1. **服务器环境配置** - 安装 Go 语言环境 - 安装 Nginx - 安装 MySQL 和 Redis -…...

使用WebDAV来上传和下载文件

WebDAV是什么 基于Web的分布式编写和版本控制&#xff08;WebDAV&#xff09;是超文本传输协议&#xff08;HTTP&#xff09;的扩展&#xff0c;有利于用户间协同编辑和管理存储在万维网服务器文档。WebDAV 由互联网工程任务组的工作组在 RFC 4918 中定义。许多现代操作系统为 …...

集成运算放大电路反馈判断

集成运算放大电路 一种具有很高放大倍数的多级直接耦合放大电路&#xff0c;因最初用于信号运算而得名&#xff0c;简称集成运放或运放 模拟集成电路中的典型组件&#xff0c;是发展最快、品种最多、应用最广的一种 反馈 将放大电路输出信号的一部分或全部通过某种电路引回到输…...