达梦数据库关于参数PK_WITH_CLUSTER的改动分析

目录

1、PK_WITH_CLUSTER取值为0

2、PK_WITH_CLUSTER取值为1


达梦数据库的参数PK_WITH_CLUSTER在最近使用过程中发现与前期使用的版本存在差异,特此测试分析一下。具体哪个版本改动的暂未得知。

PK_WITH_CLUSTER,默认值为0,动态会话级参数。

参数含义:在建表语句或增加约束语句中指定主关键字时,是否缺省指定为CLUSTER,0:不指定;1:指定

注:该参数对水平分区表、列存储表和堆表无效

测试版本:

1-3-26-2024.08.21-240039-20046-ENT
--03134284058-20240821-240039-20046 Pack37

接下来创建表,做一些验证测试。本文使用创建聚集主键的方式来做测试,创建聚集索引的效果与之相同。

1、PK_WITH_CLUSTER取值为0

(1)使用SQL语句创建普通表,表中存在主键,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T1;
CREATE TABLE T1( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
PRIMARY KEY(ID)
);
--插入测试数据
INSERT INTO T1 VALUES (7,'A',15,1);
INSERT INTO T1 VALUES (1,'A',20,2);
INSERT INTO T1 VALUES (3,'A',53,3);
INSERT INTO T1 VALUES (5,'A',35,4);
INSERT INTO T1 VALUES (10,'A',62,5);
INSERT INTO T1 VALUES (6,'A',18,6);
INSERT INTO T1 VALUES (2,'A',35,7);
INSERT INTO T1 VALUES (4,'A',66,8);
INSERT INTO T1 VALUES (9,'A',24,9);
INSERT INTO T1 VALUES (8,'A',41,10);
COMMIT;

创建表后查看其表定义,由于PK_WITH_CLUSTER为0,所以建表后主键自动加了not cluster,建表结果与期望效果一致。

表数据默认以ROWID有序聚集。

(2)创建一张带有大字段的普通表,表中存在主键,主键字段非大字段类型,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T2;
CREATE TABLE T2( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
PRIMARY KEY(ID)
);
--插入测试数据
INSERT INTO T2 VALUES (7,'A',15,1,'test');
INSERT INTO T2 VALUES (1,'A',20,2,'test');
INSERT INTO T2 VALUES (3,'A',53,3,'test');
INSERT INTO T2 VALUES (5,'A',35,4,'test');
INSERT INTO T2 VALUES (10,'A',62,5,'test');
INSERT INTO T2 VALUES (6,'A',18,6,'test');
INSERT INTO T2 VALUES (2,'A',35,7,'test');
INSERT INTO T2 VALUES (4,'A',66,8,'test');
INSERT INTO T2 VALUES (9,'A',24,9,'test');
INSERT INTO T2 VALUES (8,'A',41,10,'test');
COMMIT;

创建表后查看其表定义,由于PK_WITH_CLUSTER为0,所以建表后主键自动加了not cluster,建表结果与期望效果一致。

表数据默认以ROWID有序聚集。

(3)创建一张带有大字段的普通表,表中存在主键,主键字段为大字段类型,建表报错

--创建一张普通测试表
DROP TABLE IF EXISTS T3;
CREATE TABLE T3( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
PRIMARY KEY(DINFO)
);

报错信息:“字段[DINFO]不可比较”。

这里可能会联想到一个参数ENABLE_BLOB_CMP_FLAG(是否支持大字段类型的比较)。但实际将参数ENABLE_BLOB_CMP_FLAG改为1后也是会继续报错的,因为此参数的作用主要是解决SQL语句中大字段与字符类型的比较这种情况的。

报错原因:大字段本身是不支持比较的,在大字段上创建主键,其实就相当于对大字段创建唯一素索引,为了确保数据的唯一,会涉及到比较的过程,所以报错。

(4) 创建一张带有大字段的普通表,建表时使用cluster显式创建聚集主键,主键字段为大字段类型,建表报错

--创建一张普通测试表
DROP TABLE IF EXISTS T4;
CREATE TABLE T4( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(DINFO)
);

报错信息:“字段[DINFO]不可比较”。

报错原因:与上述(3)的原因相同。

(5)创建一张普通表,建表时使用cluster显式创建聚集主键,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T5;
CREATE TABLE T5( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
CLUSTER PRIMARY KEY(ID)
);
--插入测试数据
INSERT INTO T5 VALUES (7,'A',15,1);
INSERT INTO T5 VALUES (1,'A',20,2);
INSERT INTO T5 VALUES (3,'A',53,3);
INSERT INTO T5 VALUES (5,'A',35,4);
INSERT INTO T5 VALUES (10,'A',62,5);
INSERT INTO T5 VALUES (6,'A',18,6);
INSERT INTO T5 VALUES (2,'A',35,7);
INSERT INTO T5 VALUES (4,'A',66,8);
INSERT INTO T5 VALUES (9,'A',24,9);
INSERT INTO T5 VALUES (8,'A',41,10);
COMMIT;

创建表后查看其表定义,由于显式指定了cluster,所以实际创建的聚集主键,建表结果与期望效果一致。

表数据以主键字段“ID”有序聚集。

(6)创建一张带有大字段的普通表,建表时使用cluster显式创建聚集主键,主键字段非大字段类型,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T6;
CREATE TABLE T6( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(ID)
);
--插入测试数据
INSERT INTO T6 VALUES (7,'A',15,1,'test');
INSERT INTO T6 VALUES (1,'A',20,2,'test');
INSERT INTO T6 VALUES (3,'A',53,3,'test');
INSERT INTO T6 VALUES (5,'A',35,4,'test');
INSERT INTO T6 VALUES (10,'A',62,5,'test');
INSERT INTO T6 VALUES (6,'A',18,6,'test');
INSERT INTO T6 VALUES (2,'A',35,7,'test');
INSERT INTO T6 VALUES (4,'A',66,8,'test');
INSERT INTO T6 VALUES (9,'A',24,9,'test');
INSERT INTO T6 VALUES (8,'A',41,10,'test');
COMMIT;

创建表后查看其表定义,因为显式指定了cluster,理论上这里应该是聚集主键,但实际创建的非聚集主键,建表结果与期望效果并不一致,在比较老的版本上这里应该是cluster primary。

原因分析:​在达梦数据库中,有大字段的表是不建议创建聚集索引的,因为可能存在数据文件快速膨胀的风险。所以这里应该是基于这一点,内部自动进行了转换,创建为了非聚集主键。

因此,表数据仍然以默认的ROWID有序聚集。

(7)创建一张分区表,表中存在主键,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T7;
CREATE TABLE T7( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
PRIMARY KEY(ID)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));
--插入测试数据
INSERT INTO T7 VALUES (7,'A',15,1);
INSERT INTO T7 VALUES (1,'A',20,2);
INSERT INTO T7 VALUES (3,'A',53,3);
INSERT INTO T7 VALUES (5,'A',35,4);
INSERT INTO T7 VALUES (10,'A',62,5);
INSERT INTO T7 VALUES (6,'A',18,6);
INSERT INTO T7 VALUES (2,'A',35,7);
INSERT INTO T7 VALUES (4,'A',66,8);
INSERT INTO T7 VALUES (9,'A',24,9);
INSERT INTO T7 VALUES (8,'A',41,10);
COMMIT;

创建表后查看其表定义,由于PK_WITH_CLUSTER为0,所以建表后主键自动加了not cluster,建表结果与期望效果一致。

各子分区表中,表数据默认以ROWID有序聚集。

(8)创建一张分区表,建表时使用cluster显式创建聚集主键,建表报错

--创建一张普通测试表
DROP TABLE IF EXISTS T8;
CREATE TABLE T8( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
CLUSTER PRIMARY KEY(ID)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));

报错信息:“聚集主键必须包含全部分区列”

报错原因:创建聚集主键时,主键中需要把分区字段也加上

(9)创建一张分区表,建表时使用cluster显式创建聚集主键,聚集主键包含分区字段,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T8;
CREATE TABLE T8( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
CLUSTER PRIMARY KEY(ID,AGE)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));
--插入测试数据
INSERT INTO T8 VALUES (7,'A',15,1);
INSERT INTO T8 VALUES (1,'A',20,2);
INSERT INTO T8 VALUES (3,'A',53,3);
INSERT INTO T8 VALUES (5,'A',35,4);
INSERT INTO T8 VALUES (10,'A',62,5);
INSERT INTO T8 VALUES (6,'A',18,6);
INSERT INTO T8 VALUES (2,'A',35,7);
INSERT INTO T8 VALUES (4,'A',66,8);
INSERT INTO T8 VALUES (9,'A',24,9);
INSERT INTO T8 VALUES (8,'A',41,10);
COMMIT;

创建表后查看其表定义,由于显式指定了cluster,所以实际创建的聚集主键,建表结果与期望效果一致。

各子分区表中,表数据以主键字段“ID”,“AGE”有序聚集。数据会先以ID排序,当ID相同时按照AGE排序。

(10)创建一张带有大字段的分区表,表中存在主键,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T10;
CREATE TABLE T10( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(ID)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));
--插入测试数据
INSERT INTO T10 VALUES (7,'A',15,1,'test');
INSERT INTO T10 VALUES (1,'A',20,2,'test');
INSERT INTO T10 VALUES (3,'A',53,3,'test');
INSERT INTO T10 VALUES (5,'A',35,4,'test');
INSERT INTO T10 VALUES (10,'A',62,5,'test');
INSERT INTO T10 VALUES (6,'A',18,6,'test');
INSERT INTO T10 VALUES (2,'A',35,7,'test');
INSERT INTO T10 VALUES (4,'A',66,8,'test');
INSERT INTO T10 VALUES (9,'A',24,9,'test');
INSERT INTO T10 VALUES (8,'A',41,10,'test');
COMMIT;

这里问题就出现了,建表的语句中聚集主键没有加分区字段,但是为什么创建没有报错呢?以往的老版本上,这里应该也会报错“聚集主键必须包含全部分区列”才对。

查看表定义,发现这里并没有创建成聚集主键,数据库自动加了not cluster,建表结果与期望效果不一致。

原因分析:这里应该是与(6)的测试情况是一样的原因,表中因为含有了大字段,所以系统内部自动创建成了非聚集主键。

由于最终创建的还是非聚集主键,数据还是默认以rowid排序聚集的。

(11)创建一张带有大字段的分区表,建表时使用cluster显式创建聚集主键,聚集主键包含分区字段,建表正常无报错

--创建一张普通测试表
DROP TABLE IF EXISTS T11;
CREATE TABLE T11( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(ID,AGE)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));
--插入测试数据
INSERT INTO T11 VALUES (7,'A',15,1,'test');
INSERT INTO T11 VALUES (1,'A',20,2,'test');
INSERT INTO T11 VALUES (3,'A',53,3,'test');
INSERT INTO T11 VALUES (5,'A',35,4,'test');
INSERT INTO T11 VALUES (10,'A',62,5,'test');
INSERT INTO T11 VALUES (6,'A',18,6,'test');
INSERT INTO T11 VALUES (2,'A',35,7,'test');
INSERT INTO T11 VALUES (4,'A',66,8,'test');
INSERT INTO T11 VALUES (9,'A',24,9,'test');
INSERT INTO T11 VALUES (8,'A',41,10,'test');
COMMIT;

查看表定义,这里一样没有创建成聚集主键,尽管满足了“聚集主键必须包含全部分区列”的限制,但大字段数据类型带来的风险更严重,因此还是优先保证规避风险,所以数据库还是自动加了not cluster,建表结果与期望效果不一致。

同样是由于创建的非聚集主键,数据还是默认以rowid排序聚集的。

(12)创建一张带有大字段的分区表, 表中存在主键或聚集主键,且主键或聚集主键是大字段,或者主键或聚集主键包含大字段的情况,均会报错。

--报错,分区表,主键为大字段
--创建一张普通测试表
DROP TABLE IF EXISTS T12;
CREATE TABLE T12( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
PRIMARY KEY(DINFO)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));--报错,分区表,聚集主键为大字段
--创建一张普通测试表
DROP TABLE IF EXISTS T12;
CREATE TABLE T12( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(DINFO)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));--报错,分区表,主键含大字段
--创建一张普通测试表
DROP TABLE IF EXISTS T12;
CREATE TABLE T12( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
PRIMARY KEY(ID,DINFO)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));--报错,分区表,聚集主键含大字段
--创建一张普通测试表
DROP TABLE IF EXISTS T12;
CREATE TABLE T12( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(ID,DINFO)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));--报错,分区表,聚集主键包含全部分区列,且含大字段
--创建一张普通测试表
DROP TABLE IF EXISTS T12;
CREATE TABLE T12( 
ID INTEGER,
NAME VARCHAR(30), 
AGE INT,
ORD INT,
DINFO CLOB,
CLUSTER PRIMARY KEY(ID,AGE,DINFO)
)
PARTITION BY RANGE(AGE) INTERVAL(10)(
PARTITION P1 VALUES EQU OR LESS THAN (18),
PARTITION P2 VALUES EQU OR LESS THAN (35),
PARTITION P3 VALUES EQU OR LESS THAN (60),
PARTITION P4 VALUES EQU OR LESS THAN (100));

报错原因与(3)测试的原因相同。

2、PK_WITH_CLUSTER取值为1

当PK_WITH_CLUSTER=1时,其实就是免去了显式指定CLUSTER的方法,自动创建为了聚集主键或聚集索引,根据前文PK_WITH_CLUSTER取值为0时的测试结果及原因,其实可以猜到PK_WITH_CLUSTER取值为1时不同情况下的测试结果,因此这里直接写实际测试结果,不再过多赘述各测试结果出现的原因。

(1)使用SQL语句创建普通表,表中存在主键,建表正常无报错,创建的是聚集主键
(2)创建一张带有大字段的普通表,表中存在主键,主键字段非大字段类型,建表正常无报错,创建的是非聚集主键
(3)创建一张带有大字段的普通表,表中存在主键,主键字段为大字段类型,建表报错。报错信息:“字段[DINFO]不可比较”
(4)创建一张带有大字段的普通表,建表时使用cluster显式创建聚集主键,主键字段为大字段类型,建表报错。报错信息:“字段[DINFO]不可比较”
(5)创建一张普通表,建表时使用cluster显式创建聚集主键,建表正常无报错,创建的是聚集主键
(6)创建一张带有大字段的普通表,建表时使用cluster显式创建聚集主键,主键字段非大字段类型,建表正常无报错,创建的是非聚集主键
(7)创建一张分区表,表中存在主键,建表正常无报错,创建的是非聚集主键
(8)创建一张分区表,建表时使用cluster显式创建聚集主键,建表报错。报错信息:“聚集主键必须包含全部分区列”
(9)创建一张分区表,建表时使用cluster显式创建聚集主键,聚集主键包含分区字段,建表正常无报错,创建的是聚集主键
(10)创建一张带有大字段的分区表,表中存在主键,建表正常无报错,创建的是非聚集主键
(11)创建一张带有大字段的分区表,建表时使用cluster显式创建聚集主键,聚集主键包含分区字段,建表正常无报错,创建的是非聚集主键
(12)创建一张带有大字段的分区表, 表中存在主键或聚集主键,且主键或聚集主键是大字段,或者主键或聚集主键包含大字段的情况,均会报错。报错信息:“字段[DINFO]不可比较”
 

总结:达梦数据库底层修改策略,使得无论参数PK_WITH_CLUSTER是否为1,无论是否指定CLUSTER关键字显式创建聚集索引或聚集主键,目前均会自动避免出现聚簇表中有大字段的现象。此外,当参数PK_WITH_CLUSTER为1时,如果没有显式指定CLUSTER关键字,创建的分区表主键不满足“包含全部分区列”的条件,会自动创建成非聚集主键。

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

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

相关文章

android11使用gpio口控制led状态灯

目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求:这里是用2个gpio口来控制LED灯,开机时默认亮蓝灯,按开机键,休眠亮红灯,唤醒亮蓝灯。 原理图: 这里由于主板上电阻R63…

windows 利用nvm 管理node.js 2025最新版

1.首先在下载nvm 下载链接 2. 下载最新版本的nvm 3. 同意协议 注意:选择安装路径 之后一直下一步即可 可以取消勾选 open with Powershell 勾选后它会自动打开Powershell 这里选用cmd 输入以下命令查看是否安装成功 nvm version 查看已经安装的版本 我之前自…

深入浅出:UniApp 从入门到精通全指南

https://juejin.cn/post/7440119937644101684 uni-app官网 本文是关于 UniApp 从入门到精通的全指南,涵盖基础入门(环境搭建、创建项目、项目结构、编写运行)、核心概念与进阶知识(组件与开发、页面路由与导航、数据绑定与响应式…

MySQL ——数据的增删改查

一、DML语言 1.1 insert插入数据 语法:insert [into] 表名 [字段名] values(值列表); 插入一行数据 第一种:insert into file1(id,name,age) values (1,‘aa’,11); 第二种:insert into file1 values(1,‘aa’,11); 插入多行数…

【CF记录】贪心——A. Scrambled Scrabble

https://codeforces.com/contest/2045/problem/A 思路: 由于Y有两种选择,NG也是,那我们可以枚举以下情况:选i个Y做辅音,j个NG做辅音 然后贪心选择最长的即可,观察到S最长为5000,即使是也不会…

C语言【指针篇】(四)

前言:正文1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么?2.2 数组指针变量怎么初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 两段有趣的代码4.3.1 typedef关键字 5. 函数指针数组6. 转移表 总结 前言&am…

React + TypeScript 实战指南:用类型守护你的组件

TypeScript 为 React 开发带来了强大的类型安全保障,这里解析常见的一些TS写法: 一、组件基础类型 1. 函数组件定义 // 显式声明 Props 类型并标注返回值 interface WelcomeProps {name: string;age?: number; // 可选属性 }const Welcome: React.FC…

【玩转正则表达式】将正则表达式中的分组(group)与替换进行结合使用

在文本处理和数据分析领域,正则表达式(Regular Expressions,简称regex)是一种功能强大的工具。它不仅能够帮助我们匹配和搜索字符串中的特定模式,还能通过分组(Grouping)和替换(Subs…

Flutter 学习之旅 之 flutter 不使用插件,简单实现一个 Toast 功能

Flutter 学习之旅 之 flutter 不使用插件,简单实现一个 Toast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件,简单实现一个 Toast 功能 一、简单介绍 二、简单介绍 Toast 1. 确保正确配置 navigatorKey 2. 避免重复显示 Toast 3. 确保 Toast …

《OpenCV》——dlib(人脸应用实例)

文章目录 dlib库dlib库——人脸应用实例——表情识别dlib库——人脸应用实例——疲劳检测 dlib库 dlib库的基础用法介绍可以参考这篇文章:https://blog.csdn.net/lou0720/article/details/145968062?spm1011.2415.3001.5331,故此这篇文章只介绍dlib的人…

学习日记-250305

阅读论文:Leveraging Pedagogical Theories to Understand Student Learning Process with Graph-based Reasonable Knowledge Tracing ps:代码逻辑最后一点还没理顺,明天继续 4.2 Knowledge Memory & Knowledge Tracing 代码研究: 一般…

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…

【ESP-ADF】在 VSCode 安装 ESP-ADF 注意事项

1.检查网络 如果您在中国大陆安装,请使用魔法上网,避免无法 clone ESP-ADF 仓库。 2.VSCode 安装 ESP-ADF 在 VSCode 左侧活动栏选择 ESP-IDF:explorer,展开 advanced 并点击 Install ESP-ADF 然后会出现选择 ESP-ADF 安装目录。 如果出现…

关于2023新版PyCharm的使用

考虑到大家AI编程的需要,建议大家安装新版Python解释器和新版PyCharm,下载地址都可以官网进行: Python:Download Python | Python.org(可以根据需要自行选择,建议选择3.11,保持交流版本一致&am…

轻松部署 Stable Diffusion WebUI 并实现局域网共享访问:解决 Conda Python 版本不为 3.10.6 的难题

这篇博文主要为大家讲解关于sd webui的部署问题,大家有什么不懂的可以随时问我,如果没有及时回复,可联系:1198965922 如果后续大家需要了解怎么用代码调用部署好的webui的接口,可以在评论区留言哦,博主可以…

Leetcode 103: 二叉树的锯齿形层序遍历

Leetcode 103: 二叉树的锯齿形层序遍历 问题描述: 给定一个二叉树,返回其节点值的锯齿形层序遍历(即第一层从左到右,第二层从右到左,第三层从左到右,依此类推)。 适合面试的解法:广…

Linux中的进程间通信的方式及其使用场景

在 Linux 系统中,进程间通信(Inter-Process Communication, IPC)是指不同进程之间传递数据、共享信息的机制。Linux 提供了多种进程间通信的方式,每种方式都有不同的特点和使用场景。以下是常见的几种进程间通信方式及其应用场景&…

springBoot集成emqx 实现mqtt消息的发送订阅

介绍 我们可以想象这么一个场景,我们java应用想要采集到电表a的每小时的用电信息,我们怎么拿到电表的数据?一般我们会想 直接 java 后台发送请求给电表,然后让电表返回数据就可以了,事实上,我们java应用发…

vue Table 表格自适应窗口高度,表头固定

当表格内纵向内容过多时&#xff0c;可选择固定表头。 代码很简单&#xff0c;其实就是在table 里面定一个 height 属性即可。 <template><el-table:data"tableData"height"250"borderstyle"width: 100%"><el-table-columnprop…

多线程-JUC

简介 juc&#xff0c;java.util.concurrent包的简称&#xff0c;java1.5时引入。juc中提供了一系列的工具&#xff0c;可以更好地支持高并发任务 juc中提供的工具 可重入锁 ReentrantLock 可重入锁&#xff1a;ReentrantLock&#xff0c;可重入是指当一个线程获取到锁之后&…