达梦数据库表类型介绍

news2024/9/24 13:23:47

1、达梦支持的表类型

达梦数据库支持的表类型有:普通表、堆表、列存储表(HUGE)、分区表、临时表、外部表等。

2、普通表

即索引组织表,也是达梦默认创建的表,有且仅有一个聚簇索引键,表数据按照聚簇索引键排序,数据是有序的,插入有序,rowid 是逻辑 rowid,占用存储空间,所以索引组织表比堆表占用较多空间。
DM 创建表时如果指定了主键,则主键为聚簇索引键;如果创建表示未指定主键,则 rowid 为聚簇索引键。
如果要在所属模式中创建新表,需要有 CREATE TABLE 数据库权限;而要在其他用户的模式中创建新表,则需要有 CREATE ANY TABLE 数据库权限。创建表时,应当为表指定一个表空间,否则,表将默认在 MAIN 创建。

2.1创建普通表

CREATE  TABLE  t1 (
    EMPNO INT PRIMARY KEY,
    ENAME       VARCHAR(15)     NOT NULL,
    JOB                 VARCHAR(10),
    MGR                 INT,
    HIREDATE    DATE    DEFAULT (SYSDATE),
    SALARY              FLOAT,
    DEPTNO      TINYINT  NOT NULL )
    STORAGE (
    INITIAL    50,
    NEXT     50,
    MINEXTENTS    10,
    FILLFACTOR   80,
    ON  main);

2.2修改普通表

SQL> ALTER TABLE t1 MODIFY ENAME VARCHAR(29) DEFAULT '' NOT NULL;
操作已执行
已用时间: 8.638(毫秒). 执行号:2511.
SQL> ALTER TABLE t1 ADD GENDER CHAR(1) CHECK (GENDER IN ('M','F'));
操作已执行
已用时间: 8.084(毫秒). 执行号:2512.
SQL> ALTER TABLE t1 DROP GENDER CASCADE;
操作已执行
已用时间: 8.996(毫秒). 执行号:2513.
SQL> DESC t1;

行号     NAME     TYPE$       NULLABLE
---------- -------- ----------- --------
1          EMPNO    INTEGER     N
2          ENAME    VARCHAR(29) N
3          JOB      VARCHAR(10) Y
4          MGR      INTEGER     Y
5          HIREDATE DATE        Y
6          SALARY   DOUBLE      Y
7          DEPTNO   TINYINT     N

7 rows got

已用时间: 1.012(毫秒). 执行号:2514.
SQL> TRUNCATE TABLE t1;
操作已执行
已用时间: 4.759(毫秒). 执行号:2515.
SQL> DROP TABLE t1;
操作已执行
已用时间: 10.288(毫秒). 执行号:2516.

3、堆表

3.1创建堆表

create table t2
(
	"COLUMN_1" CHAR(10),
	"COLUMN_2" CHAR(10)
)
storage(initial 1, next 1, minextents 1, fillfactor 0, branch(6,2));

凡是 DDL 中带有 branch/no branch 关键字的表就是堆表:no branch: 不带分支的堆表Branch(6,2): 表示 6 个并发分支,2 个非并发分支。(1<=Branch<=64)。

3.2修改堆表

SQL> ALTER TABLE t2 ADD GENDER CHAR(1) CHECK (GENDER IN ('M','F'));
操作已执行
已用时间: 9.625(毫秒). 执行号:2522.
SQL>  ALTER TABLE t2 DROP GENDER CASCADE;
操作已执行
已用时间: 8.849(毫秒). 执行号:2523.
SQL> desc t2;

行号     NAME     TYPE$    NULLABLE
---------- -------- -------- --------
1          COLUMN_1 CHAR(10) Y
2          COLUMN_2 CHAR(10) Y

已用时间: 5.555(毫秒). 执行号:2524.

4、HUGE表

达梦数据库中,表的数据存储方式分为行存储和列存储。行存储是以记录为单位进行存
储的,数据页面中存储的是完整的若干条记录;列存储是以列为单位进行存储的,每一个列
的所有行数据都存储在一起,而且一个指定的页面中存储的都是某一个列的连续数据。
Huge File System(检查 HFS)是达梦数据库实现的,针对海量数据进行分析的一种高效、简单的列存储机制。列存储表(也称为 HUGE 表)就是建立在 HFS 存储机制上的一种表。
HUGE 表是建立在混合表空间上的。HUGE 数据文件存储在混合表空间定义中指定的
HUGE 数据文件路径下,一个混合表空间最多可以添加 255 个 HUGE 数据文件路径,混合表空间的 HUGE 数据文件路径相关信息存储在动态视图 V$HUGE_TABLESPACE 中。普通的表空间,数据是通过段、簇、页来管理的,并且以固定大小(4K、8K、16K、32K)的页面为管理单位;而混合表空间存储 HUGE 表是通过 HFS 存储机制来管理的,它相当于一个文件系统。为混合表空间指定一个 HUGE 数据文件路径,其实就是创建一个空的HUGE 数据文件目录(系统中有一个默认的混合表空间 MAIN,其 HUGE 数据文件目录名为HMAIN)。在创建一个HUGE 表并插入数据时,数据库会在指定的混合表空间的 HUGE 数据文件目录下创建一系列的目录及文件。
DM 支持两种类型的 HUGE 表:非事务型 HUGE 表和事务型 HUGE 表。

4.1非事务型HUGE表

对非事务型 HUGE 表的增、删、改是直接对 HUGE 表进行写操作的,不写 UNDO 日志,不通过 BUFFER 缓存,直接操纵文件,速度快,但也因此导致不支持事务。为了保证数据的一致性,在操作时可以适当地做一些日志来保证数据的完整性,完整性保证策略主要是通过数据的镜像来实现的,镜像的不同程度可以实现不同程度的完整性恢复。
DM 对于镜像提供三种方案:
1.LOG NONE
不做镜像。相当于不做数据一致性的保证,如果出错只能手动通过系统函数来修复表数据,当然速度是最快的,不需要额外的 IO,如果用户明确知道自己的环境不会出现问题可以采用该方案,效率最高。
2.LOG LAST
做部分镜像。但是在任何时候都只对当前操作的区做镜像,如果当前区的操作完成了,那么这个镜像也就失效了,可能会被下一个被操作区覆盖。这样做的好处是镜像文件不会太大,同时也可以保证数据是完整的。但有可能遇到的问题是:一次操作很多的情况下,有可能一部分数据做镜像已经完成,另一部分数据还没有来得及开始做的问题。如果用户能接受这个问题的话这个选择不失为最佳选择,这也是系统默认的选择。
3.LOG ALL
全部做镜像。在操作过程中,所有被修改的区都会被记录下来,当一次操作修改的数据过多时,镜像文件有可能会很大,但好处是,能够保证操作完整性。比如,在操作过程中失败了,那么这个操作会完整的撤消,不存在 LOG LAST方案中一部分修改部分还没修改的问题。需要注意的是,若创建数据库时使用参数 HUGE_WITH_DELTA 的缺省值 1 ,则不支持创建非事务型 HUGE 表。

4.2事务型HUGE表

非事务型 HUGE 表在进行增、删、改时直接对 HUGE 表进行写操作,每次写操作需要至少对一个区进行 IO,导致 IO 量较大,且并发性能不高。为此,DM 推出了事务型 HUGE 表,通过增加 RAUX、DAUX 和 UAUX 行辅助表,减少了事务型 HUGE 表增、删、改操作的 IO,提高效率,同时提高并行性能。事务型 HUGE 表支持 UNDO 日志,实现了事务特性。
HUGE 表与普通行表一样,可以进行增、删、改操作,操作方式也是一样的。但 HUGE表的删除与更新操作的效率会比行表低一些,并发操作性能也会比行表差一些,因此在HUGE中不宜做频繁的删除及更新操作。总之,HUGE 表比较适合做分析型表的存储。
另外,使用 HUGE 表时应注意存在以下一些限制:
1.建 HUGE 表时仅支持定义 NULL、NOT NULL、UNIQUE 约束以及 PRIMARY KEY。后两种约束也可以通过 ALTER TABLE 的方式添加,但这两种约束不检查唯一性,用户需要确保实际数据符合约束,否则相关操作的结果可能不符合预期;
2.HUGE 不允许建立聚集索引,允许建立二级索引,不支持建位图索引,其中 UNIQUE索引不检查唯一性;
3.不支持 SPACE LIMIT(空间限制);
4.不支持建立全文索引;
5.不支持使用自定义类型;
6.不支持引用约束;
7.不支持 IDENTITY 自增列;
8.不支持大字段列;
9.不支持建触发器;
10.不支持游标的修改操作;
11.PK 和 UNIQUE 约束不检查唯一性,对应的索引都为虚索引;UNIQUE 索引也不检查唯一性,为实索引,索引标记中不包含唯一性标记,即和普通二级索引相同;
12.不允许对分区子表设置 SECTION 和 WITH/WITHOUT DELTA;
13.当事务型 HUGE 表进行了较多增删改操作时,应对其进行数据重整操作,以提高性能。

5、分区表

分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。在 DM 分区表中,主表本身不存储数据,所有数据只存储在子表中,从而实现不同分区的完全独立性。 水平分区子表删除后,会将子表上的数据一起删除。
由于每一个分区都以一个子表作为实体,那么不同分区可以存储于相同表空间,也可以位于不同的表空间中。将这些分区放在不同的表空间中具有以下的好处:
1.减少所有数据都损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性;
2.恢复时间大大减少;
3.可以将同一个表中的数据分布在不同的磁盘上,从而均衡磁盘上的 I/O 操作;
4.提高了表的可管理性、可利用性和访问效率。
达梦数据库 DM 支持对表进行水平分区。对于水平分区,提供以下分区方式:
1.范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上;
2.哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;
3.列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的 status 列的值在(‘A’,‘H’,‘O’)放在一个分区,值在(‘B’,‘I’,‘P’)放在另一个分区,以此类推;
多级分区表:按上述三种分区方法进行任意组合,将表进行多次分区,称为多级分区表。

5.1范围分区表

创建范围分区表,以HIRE_DATE作为分区列

CREATE TABLE t3

(
   EMPLOYEE_ID      INT,
   EMPLOYEE_NAME    VARCHAR (20),
   IDENTITY_CARD    VARCHAR (18),
   EMAIL            VARCHAR (50) NOT NULL,
   PHONE_NUM        VARCHAR (20),
   HIRE_DATE        DATE NOT NULL,
   JOB_ID           VARCHAR (10) NOT NULL,
   SALARY           INT,
   COMMISSION_PCT   INT,
   MANAGER_ID       INT,
   DEPARTMENT_ID    INT,
   CHECK (SALARY > 0)
)
PARTITION BY RANGE (HIRE_DATE)
   (PARTITION P1 VALUES LESS THAN ('2015-01-01') TABLESPACE TBS_P1,
  PARTITION P2 VALUES LESS THAN ('2018-01-01') TABLESPACE TBS_P2,
  PARTITION P3 VALUES LESS THAN ('2021-01-01') TABLESPACE TBS_P3,
  PARTITION PMAX VALUES LESS THAN (MAXVALUE) TABLESPACE TBS_PMAX)
/

5.2哈希分区表

创建以city列作为分区键值的HASH分区表

CREATE TABLE t4(
sales_id INT,
saleman CHAR(20),
saledate DATETIME,
city CHAR(10)
)
PARTITION BY HASH(city)(
PARTITION p1,
PARTITION p2,
PARTITION p3,
PARTITION p4
)
/

5.3列表分区表

创建列表分区表,以city作为分区键值

CREATE TABLE t5(
sales_id INT,
saleman CHAR(20),
saledate DATETIME,
city CHAR(10)
)
PARTITION BY LIST(city)(
PARTITION p1 VALUES ('北京', '天津'),
PARTITION p2 VALUES ('上海', '南京', '杭州'),
PARTITION p3 VALUES ('武汉', '长沙'),
PARTITION p4 VALUES ('广州', '深圳'),
PARTITION p5 VALUES (DEFAULT)
)
/

5.4多级分区表

创建多级分区表,按照CITY和SALEDATE进行分区

CREATE TABLE SALES1(
SALES_ID INT,
SALEMAN CHAR(20),
SALEDATE DATETIME,
CITY CHAR(10)
)
PARTITION BY LIST(CITY)
SUBPARTITION BY RANGE(SALEDATE) SUBPARTITION TEMPLATE(
SUBPARTITION P11 VALUES LESS THAN ('2023-04-01'),
SUBPARTITION P12 VALUES LESS THAN ('2023-07-01'),
SUBPARTITION P13 VALUES LESS THAN ('2023-10-01'),
SUBPARTITION P14 VALUES EQU OR LESS THAN (MAXVALUE))
(
PARTITION P1 VALUES ('北京', '天津')
(
 SUBPARTITION P11_1 VALUES LESS THAN ('2023-10-01'),
 SUBPARTITION P11_2 VALUES EQU OR LESS THAN (MAXVALUE)
),
PARTITION P2 VALUES ('上海', '南京', '杭州'),
PARTITION P3 VALUES (DEFAULT)
)
/

6、临时表

当处理复杂的查询或事务时,由于在数据写入永久表之前需要暂时存储一些行信息或需要保存查询的中间结果,可能需要一些表来临时存储这些数据。DM 允许创建临时表来保存会话甚至事务中的数据。在会话或事务结束时,这些表上的数据将会被自动清除。临时表中的数据不能像在其它永久表中的数据那样进行备份,当事务结束或会话断开时,数据就会被清空。在临时表创建过程中,不会像永久表和索引那样自动分配数据段,而是仅当第一次执行 DML 语句时,才会为临时表在临时表空间中分配空间。并且,对于不同的会话,临时表上的数据是独享的,不会互相干扰,即会话 A 不能访问会话 B 临时表上的数据。
DM 临时表支持以下功能:
1.在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
2.临时表的 DML 操作产生较少的 REDO 日志;
3.临时表支持建索引,以提高查询性能;
4.在一个会话或事务结束后,数据将自动从临时表中删除;
5.不同用户可以访问相同的临时表,每个用户只能看到自己的数据;
6.临时表的数据量很少,意味着更高效的查询效率;
7.临时表的表结构在数据删除后仍然存在,便于以后的使用;
临时表的权限管理跟普通表一致。临时表 ON COMMIT 关键词指定表中的数据是事务级还是或会话级的,默认情况下是事务级的。

  • ON COMMIT DELETE ROWS:

指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除;

  • ON COMMIT PRESERVE ROWS:

指定临时表是会话级的,会话结束时才清空表,并释放临时 B事务。

6.1事务级临时表

CREATE GLOBAL TEMPORARY TABLE TMP_t1(
    EMPNO       INT             PRIMARY KEY,
    ENAME       VARCHAR(15)     NOT NULL,
    JOB         VARCHAR(10))
  ON COMMIT DELETE ROWS;
SQL> INSERT INTO TMP_t1 VALUES (1,'lei','IT');
影响行数 1

已用时间: 1.268(毫秒). 执行号:2529.
SQL> INSERT INTO TMP_t1 VALUES (2,'lei','IT');
影响行数 1

已用时间: 0.491(毫秒). 执行号:2530.
SQL> SELECT * FROM TMP_t1;

行号     EMPNO       ENAME JOB
---------- ----------- ----- ---
1          1           LEI   IT
2          2           LEI   IT

tmp_t临时表依旧存在,数据依旧存在

6.2会话级临时表

SQL> CREATE GLOBAL TEMPORARY TABLE TMP_t2(
2       EMPNO       INT             PRIMARY KEY,
3       ENAME       VARCHAR(15)     NOT NULL,
4       JOB         VARCHAR(10))
5   ON COMMIT PRESERVE ROWS ;
操作已执行
已用时间: 5.765(毫秒). 执行号:3302.

SQL> INSERT INTO TMP_t2 VALUES (1,'lei','IT');
影响行数 1

已用时间: 1.046(毫秒). 执行号:3303.
SQL> INSERT INTO TMP_t2 VALUES (2,'lei','IT');
影响行数 1

已用时间: 0.521(毫秒). 执行号:3304.
SQL> SELECT * FROM TMP_t2;

行号     EMPNO       ENAME JOB
---------- ----------- ----- ---
1          1           lei   IT
2          2           lei   IT

已用时间: 0.720(毫秒). 执行号:3305.
SQL> COMMIT;
操作已执行
已用时间: 0.803(毫秒). 执行号:3306.
SQL> SELECT * FROM TMP_t2;

行号     EMPNO       ENAME JOB
---------- ----------- ----- ---
1          1           lei   IT
2          2           lei   IT

已用时间: 0.322(毫秒). 执行号:3307.

SQL> EXIT
[dmdba@lei2 ~]$ disql lei/leileilei

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.827(ms)
disql V8
SQL> SELECT * FROM TMP_t2;
未选定行

已用时间: 1.565(毫秒). 执行号:3501.
SQL> DESC TMP_t2;

行号     NAME  TYPE$       NULLABLE
---------- ----- ----------- --------
1          EMPNO INTEGER     N
2          ENAME VARCHAR(15) N
3          JOB   VARCHAR(10) Y

已用时间: 18.954(毫秒). 执行号:3502.

退出会话后重新开启新的会话,临时表数据被清空,但是表还在。

7、外部表

外部表是表的数据不会放在数据库里面,会放在操作系统的文件里面。通过数据库外部表可以查看外部文件的数据。
1.建立外部表时,不会产生页、簇、段等存储结构;
2.只能与表相关的定义放在数据库字典中,不能对外部表的内容进行修改(update、instert、 delete);
3.不能对外部表创建索引;
4.外部表可以通过SQL语句解码器来完成。而不需要将外部表装载到数据库中。
创建外部表

[dmdba@lei2 ~]$ vi ext.txt
添加:
1|2|3|4
5|6|7|8
[dmdba@lei2 ~]$ vi ctl.txt
添加:
LOAD DATA
INFILE 'ext.txt'
INTO TABLE EXT
FIELDS '|'
[dmdba@lei2 ~]$ disql lei/leileilei

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.115(ms)
disql V8
SQL> CREATE OR REPLACE DIRECTORY "EXTDIR" AS '/home/dmdba/';
操作已执行
已用时间: 2.352(毫秒). 执行号:3701.
SQL> CREATE EXTERNAL TABLE EXT(
2   C1 INT,
3   C2 INT,
4   C3 INT,
5   C4 INT
6   ) FROM DEFAULT DIRECTORY EXTDIR LOCATION ('ctl.txt');
操作已执行
已用时间: 5.356(毫秒). 执行号:3702.
SQL> SELECT * FROM EXT;

行号     C1          C2          C3          C4         
---------- ----------- ----------- ----------- -----------
1          1           2           3           4
2          5           6           7           8

已用时间: 7.536(毫秒). 执行号:3703.

SQL> INSERT INTO EXT VALUES(9,10,11,12);
INSERT INTO EXT VALUES(9,10,11,12);
第1 行附近出现错误[-2609]:外部表不支持的操作.
已用时间: 0.335(毫秒). 执行号:0.

[dmdba@lei2 ~]$ vi ext.txt 
添加:
1|2|3|4
5|6|7|8
9|10|11|12
SQL> SELECT * FROM EXT;

行号     C1          C2          C3          C4         
---------- ----------- ----------- ----------- -----------
1          1           2           3           4
2          5           6           7           8
3          9           10          11           12

8、总结

达梦数据库支持多种表类型,开发人员应根据业务需求来选择表类型,要对业务有合适的预估,提前规划表分区;

  • HUGE表在海量数据分析有优势,但是在删除和更新方面性能不如行表

  • 一般情况下,堆表的插入效率优于索引组织表,查询速度索引组织表优于堆表,索引组织表比堆表更节省磁盘空间,使用主键来查询的表比较适合索引组织表。

更多内容请参考:https://eco.dameng.com

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

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

相关文章

C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

如何构建出更好的大模型RAG系统?

ChatGPT爆火之后&#xff0c;以ChatPDF为首的产品组合掀起了知识库问答的热潮。 在过去一整年中&#xff0c;大多数人都在完成RAG系统到高级RAG系统的迭代升级。但是技术发展是迅速的&#xff0c;如何深入了解RAG的发展&#xff0c;做出更好的RAG系统&#xff0c;其实还是非常…

32岁前端干了8年,是继续做前端开发,还是转其它工作_ui设计师转开发

前端发展有瓶颈&#xff0c;变来变去都是那一套&#xff0c;只是换了框架换了环境。换了框架后又得去学习&#xff0c;虽然很快上手&#xff0c;但是那些刚毕业的也很快上手了&#xff0c;入门门槛越来越低&#xff0c;想转行或继续卷&#xff0c;该如何破圈? 这是一位网友的自…

使用SBP打AssetBundle时脚本引用丢失

1&#xff09;使用SBP打AssetBundle时脚本引用丢失 2&#xff09;在UE 5.3中连接Power节点为何10的3次幂等于1009 3&#xff09;如何在Widget中倾斜一张纹理贴图 4&#xff09;如何在打开关卡蓝图时更改游戏模式 这是第401篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热…

uni-app快速入门

目录 一、什么是 uni-app二、快速创建 uni-app 项目1.创建 uni-app2.运行 uni-app 三、uni-app 相对传统 H5 的变化1.网络模型的变化2.文件类型变化3.文件内代码架构的变化4.外部文件引用方式变化5.组件/标签的变化6.js的变化&#xff08;1&#xff09;运行环境从浏览器变成v8引…

MCU自动测量单元采集振弦式应变计测值的过程

振弦式应变计是一种广泛应用于土木工程、地质勘探等领域的高精度传感器&#xff0c;用于测量结构的应变变化。近年来&#xff0c;随着微控制器单元(MCU)的发展&#xff0c;自动化测量技术得到了极大的提升&#xff0c;使得振弦式应变计的测值采集更加高效和精确。本文将详细介绍…

关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误

不是知道你是否 出现过这样的错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 经过各种度娘&#xff0c;无非就是让你检查三种情况 情况一&#xff1a;mapper.xml没有按照传统的maven架构进行放置 情况二&#xff1a;mybatis的配置信…

C语言实现简单凯撒密码算法

**实验2&#xff1a;传统密码技术 【实验目的】 通过本次实训内容&#xff0c;学习常见的传统密码技术&#xff0c;通过编程实现简单代替密码中的移位密码算法&#xff0c;加深对传统密码技术的了解&#xff0c;为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法&#xff0c;在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性&#xff0c;随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中&#xff0c;使用Bootstrap抽样生成不同的训练集&#xff…

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】 2207.字符串中最多数目的子序列方法&#xff1a;贪心 一次遍历 2207.字符串中最多数目的子序列 方法&#xff1a;贪心 一次遍历 从题意中可以看出来&#xff0c;对于 pattern.charAt(0) 一定是插入到最左侧是最优…

什么是SSL证书?它能保护你的网络安全!

相信大家在浏览网页时经常会看到一些网址前面有个“小锁”图标&#xff0c;它代表的网站是安全的&#xff0c;而这背后的秘密就是SSL证书。那SSL证书到底是什么&#xff1f;它有什么用呢&#xff1f; 什么是SSL证书&#xff1f; SSL证书的全称是Secure Sockets Layer证书&…

php发送邮箱教程:如何实现邮件发送功能?

php发送邮箱性能优化策略&#xff1f;怎么使用PHPMail发送邮箱&#xff1f; 无论是用户注册验证、密码重置&#xff0c;还是系统通知&#xff0c;邮件发送都是不可或缺的一部分。AokSend将详细介绍如何使用PHP实现邮件发送功能&#xff0c;帮助开发者快速掌握这一技能。 php发…

高效驱动,掌控动力:TB67H400AFNG 马达驱动器

在如今智能设备和自动化应用领域中&#xff0c;驱动器的性能直接决定了系统的可靠性与效率。东芝的TB67H400AFNG有刷直流马达驱动器凭借其卓越的性能&#xff0c;成为众多行业解决方案中的关键部件。无论是工业控制、自动化设备还是消费类电子产品&#xff0c;TB67H400AFNG都能…

一小时拿下鸿蒙应用开发者高级证书!(二)

鸿蒙应用开发者高级认证&#xff0c;是华为自家研发的硬核操作系统&#xff0c;现在它在市场上的名声也越来越响亮。你手上要是有了鸿蒙的认证小本本&#xff0c;那就等于是掌握了这行里的独门秘籍&#xff0c;找工作的时候&#xff0c;妥妥的加分项。 一个小时刷刷题&#xf…

玩机进阶教程----MTK芯片杂牌机 小品牌机型以及其他mtk设备导出分区的另外一种方法解析

在前面多期博文中都是通过工具来导出分区 制作线刷包的。今天我们以另外一种方法备份系统分区。mtk芯片较多。具体机型适合哪种方法需要自测。多种方法多条思路。遇到机型善用工具。目前一些wifi网卡 点读笔以及有些其他mtk芯片设备。通常分区都较小。可以参考教程 通过教程了…

amr文件怎么转换成mp3?这几种方法超多人在用!

amr文件怎么转换成mp3&#xff1f;AMR音频格式&#xff0c;作为音频领域的一个相对边缘角色&#xff0c;其应用范围相对狭窄&#xff0c;这背后深藏着多重内在限制&#xff0c;首要挑战在于AMR的音质瓶颈&#xff0c;它难以逃脱声音失真与杂音干扰的阴影&#xff0c;这对于追求…

通过企业微信群机器人 发送群消息

1、添加群机器人&#xff0c;复制的webhook地址 2、 public static void main(String[] args) { String reqUrl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key6xdexxxxxxxxxxxxxxxxxxxxxxxxxxx"; String title "填…

数据结构 - 查找算法

一.查找的概念 二.顺序表查找 特点&#xff1a; 1.记录的数据可以是无序的 2.当数据量较大时&#xff0c;查找效率低&#xff0c;需要依次遍历 /*** description: 顺序表查找算法&#xff0c;从后往前查找* param - a : 要操作的数组的指针* param - k…

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积&#xff0c;将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时&#xff0c;该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组&#xff0c;数组中的某个元素被作为锚点&#xff08;一般…

安霸cv22平台移植采坑记录

主要分为3部分&#xff1a; 1.数据输入部分&#xff1a; 1.因原始测试代码只是单张测试图片&#xff08;测试格式&#xff1a;安霸平台离线转的bin文件&#xff09;&#xff0c;现在的问题是&#xff1a;如何输入数据流&#xff1f;会不会涉及到字节对齐问题&#xff0c;如何…