Oracle 表分区简介
目录
- 一. 前置知识
- 1.1 什么是表分区
- 1.2 表分区的优势
- 1.3 表分区的使用条件
- 二. 表分区的方法
- 2.1 范围分区(Range Partitioning)
- 2.2 列表分区(List Partitioning)
- 2.3 哈希分区(Hash Partitioning)
- 2.4 复合分区(Composite Partitioning)
- 三. 表分区的查看
- 3.1 分区信息的查看
- 3.2 分区数据的查看
- 四. 分区表的维护
- 4.1 分区的添加与删除
- 4.2 分区的合并与拆分
- 4.3 重命名分区
- 4.4 分区交换
- 4.5 其他操作
一. 前置知识
1.1 什么是表分区
表分区是数据库中的一种技术,用于将一张大表的数据按一定的规则拆分成多个较小的物理存储单元,这些物理存储单元被称为分区(Partition)。
尽管数据被分布到不同的分区中,但从逻辑上,分区表仍然作为一个整体表进行访问。

1.2 表分区的优势
⏹易于管理:
- 管理更灵活:可以对某个分区单独执行备份、恢复、索引重建等操作。
- 删除数据更高效:可以直接删除整个分区,而无需删除每一行数据。
⏹数据分割:
- 数据被分配到多个分区中,每个分区可以独立存储在不同的表空间或磁盘上。
- 例如,按时间、区域、ID 等规则划分数据。
⏹性能优化:
- 查询和操作时可以通过 分区裁剪(Partition Pruning)减少扫描的数据量,从而提高查询效率。
- 分区表支持并行操作(Parallelism),多个分区可以同时被不同的进程访问或操作。
⏹提高存储利用率:
- 不同分区可以存储在不同的表空间或磁盘上,优化存储性能和分布。
1.3 表分区的使用条件
- 表大于2G;
- 对一个表并行进行DML操作;
- 为了平衡硬盘I/O,需将同一个表分区到不同的表空间,必须对表进行分区;
- 要将表的一部分设为只读状态,另一部分设为读写状态,需要对表进行分区;
- 要将表一部分设为可用状态,另一部分设为不可用状态,需要队标进行分区;
- 要将表中数据按照一定规则分散到不同的磁盘中去,需要对表进行分区;
二. 表分区的方法
2.1 范围分区(Range Partitioning)
⏹范围分区是根据分区列值的范围对表进行分区,每条记录根据分区列值的范围分配到不同的分区表中。
常用于按照时间和日期分区的表。
partition by range:指定使用范围分区partition sales_q1_2013:指定分区的名称values less than:指定分区内数据的存储范围tablespace TBS1:指定该分区所对应的表空间,若不显示指定的话,则使用默认表空间
create table sale_by_range
(prod_id number, cust_id number,time_id date,channel_id char(1),promo_id number(6),quantity_sold number(3),amount_sold number
)
partition by range(time_id)
(-- 若 time_id < 2013-01-01 , 则数据分布到 sales_q1_2013 分区partition sales_q1_2013 values less than(TO_DATE('2013-01-01', 'YYYY-MM-DD')) tablespace TBS1,-- 若 2013-01-01 < time_id < 2016-04-01 , 则数据分布到 sales_q2_2016 分区partition sales_q2_2016 values less than(TO_DATE('2016-04-01', 'YYYY-MM-DD')) tablespace TBS2,partition sales_q3_2019 values less than(TO_DATE('2019-04-01', 'YYYY-MM-DD')) tablespace TBS3,partition sales_q4_2021 values less than(TO_DATE('2021-04-01', 'YYYY-MM-DD')) tablespace TBS4,-- 2021-04-01 < time_id , 则数据分布到 sales_q5_202X 分区partition sales_q5_202X values less than (MAXVALUE) tablespace TBS5
)
2.2 列表分区(List Partitioning)
⏹按离散值(列表)划分数据,适合按地区、类别等分类的数据。
partition otherprovince values(default):如果列值不符合其它分区记录的要求,保存在该分区表
create table sales_by_list
(dept number,deptname varchar(20),quarterly_sales number(10,2),province varchar(20)
)
partition by list(province)
(-- 广东、福建的存放在southeast分区表partition southeast values('guangdong','fujian') tablespace TBS1,-- 黑龙江、辽宁、吉林放在northeast分区表 partition northeast values('heilongjiang','liaoning','jilin') tablespace TBS2,-- 四川、云南、贵州放在southwest分区表partition southwest values('sichuan','yunnan','guizhou') tablespace TBS3,-- 其他省的放在otherprivince分区表partition otherprovince values(default) tablespace TBS4
)
2.3 哈希分区(Hash Partitioning)
⏹按哈希函数将数据均匀分布到多个分区中。适合数据分布随机、访问均匀的场景。
- 在 Oracle 数据库中,哈希分区(Hash Partitioning) 的分区名称通常由系统自动生成(例如 SYS_P564、SYS_P565等)。
- 用户无法直接在建表语句中指定哈希分区的名称。
create table charge_fixed_work (charge_no number(20,0) not null primary key,atzt_no number(20,0) not null,charge_regst_busins_date varchar2(8) not null,charge_expct_date varchar2(8) not null,charge_regst_date varchar2(8) not null,charge_regst_time varchar2(8) not null,charge_proc_result_cd varchar2(8) not null
)
partition by hash (charge_no)
partitions 4
-- 指定4个分区存储在指定的表空间中
store in (tablespace1, tablespace2, tablespace3, tablespace4);
2.4 复合分区(Composite Partitioning)
⏹Oracle支持的6种复合分区方法:
- Range-Range
- Range-List
- Range-Hash
- List-Range
- List-List
- List-Hash
CREATE TABLE sales_by_range_list (dept NUMBER,deptname VARCHAR(20),time_id DATE,quarterly_sales NUMBER(10, 2),province VARCHAR(20)
)
-- 先使用范围分区
PARTITION BY RANGE (time_id)
-- 再使用列表分区进一步细化
SUBPARTITION BY LIST (province)
(-- 第一季度销售情况的分区,并指定表空间PARTITION sales_q1_2024 VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')) TABLESPACE TBS1(-- 广东、福建的存放在 sales_q1_2024_southeast 分区表SUBPARTITION sales_q1_2024_southeast VALUES ('guangdong', 'fujian'),SUBPARTITION sales_q1_2024_northeast VALUES ('heilongjiang', 'liaoning', 'jilin'),SUBPARTITION sales_q1_2024_southwest VALUES ('sichuan', 'yunnan', 'guizhou'),SUBPARTITION sales_q1_2024_otherprovince VALUES (DEFAULT)),-- 第二季度销售情况PARTITION sales_q2_2024 VALUES LESS THAN (TO_DATE('2024-06-01', 'YYYY-MM-DD')) TABLESPACE TBS2(SUBPARTITION sales_q2_2024_southeast VALUES ('guangdong', 'fujian'),SUBPARTITION sales_q2_2024_northeast VALUES ('heilongjiang', 'liaoning', 'jilin'),SUBPARTITION sales_q2_2024_southwest VALUES ('sichuan', 'yunnan', 'guizhou'),SUBPARTITION sales_q2_2024_otherprovince VALUES (DEFAULT)),-- 第三季度销售情况PARTITION sales_q3_2024 VALUES LESS THAN (TO_DATE('2024-09-01', 'YYYY-MM-DD')) TABLESPACE TBS3(SUBPARTITION sales_q3_2024_southeast VALUES ('guangdong', 'fujian'),SUBPARTITION sales_q3_2024_northeast VALUES ('heilongjiang', 'liaoning', 'jilin'),SUBPARTITION sales_q3_2024_southwest VALUES ('sichuan', 'yunnan', 'guizhou'),SUBPARTITION sales_q3_2024_otherprovince VALUES (DEFAULT)),-- 第四季度销售情况PARTITION sales_q4_2024 VALUES LESS THAN (MAXVALUE) TABLESPACE TBS4(SUBPARTITION sales_q4_2024_southeast VALUES ('guangdong', 'fujian'),SUBPARTITION sales_q4_2024_northeast VALUES ('heilongjiang', 'liaoning', 'jilin'),SUBPARTITION sales_q4_2024_southwest VALUES ('sichuan', 'yunnan', 'guizhou'),SUBPARTITION sales_q4_2024_otherprovince VALUES (DEFAULT))
);
三. 表分区的查看
3.1 分区信息的查看
DBA_PART_TABLES:查看数据库里面的全部分区表信息,需要具有DBA权限ALL_PART_TABLES:查看当前用户可见的全部分区表信息;USER_PART_TABLES:查看当前用户拥有的全部分区表信息;
⏹查看当前用户拥有的的全部分区表信息
SELECT * FROM USER_PART_TABLES;

⏹查询分区表信息
SELECT * FROM USER_TAB_PARTITIONS;

⏹查询子分区表信息
SELECT * FROM USER_TAB_SUBPARTITIONS;

3.2 分区数据的查看
⏹在向分区表插入数据时,我们最关心的就是数据是否按照我们的规划进入了各个分区表,例如向SALE_BY_RANGE表中投入数据
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (1, 1, TO_DATE('2012-12-12', 'YYYY-MM-DD'), 'A', 1, 10, 100);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (2, 2, TO_DATE('2013-02-15', 'YYYY-MM-DD'), 'B', 2, 20, 200);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (3, 3, TO_DATE('2014-06-05', 'YYYY-MM-DD'), 'A', 3, 30, 300);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (4, 4, TO_DATE('2016-05-01', 'YYYY-MM-DD'), 'B', 4, 40, 400);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (5, 5, TO_DATE('2019-06-20', 'YYYY-MM-DD'), 'A', 5, 50, 500);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (6, 6, TO_DATE('2021-05-15', 'YYYY-MM-DD'), 'B', 6, 60, 600);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (7, 7, TO_DATE('2016-02-19', 'YYYY-MM-DD'), 'A', 7, 70, 700);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (8, 8, TO_DATE('2021-07-10', 'YYYY-MM-DD'), 'B', 8, 80, 800);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (9, 9, TO_DATE('2019-09-09', 'YYYY-MM-DD'), 'A', 9, 90, 900);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (10, 10, TO_DATE('2021-01-01', 'YYYY-MM-DD'), 'B', 10, 100, 1000);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (11, 11, TO_DATE('2012-12-25', 'YYYY-MM-DD'), 'A', 11, 110, 1100);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (12, 12, TO_DATE('2013-03-10', 'YYYY-MM-DD'), 'B', 12, 120, 1200);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (13, 13, TO_DATE('2015-07-20', 'YYYY-MM-DD'), 'A', 13, 130, 1300);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (14, 14, TO_DATE('2016-11-22', 'YYYY-MM-DD'), 'B', 14, 140, 1400);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (15, 15, TO_DATE('2018-03-15', 'YYYY-MM-DD'), 'A', 15, 150, 1500);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (16, 16, TO_DATE('2020-06-17', 'YYYY-MM-DD'), 'B', 16, 160, 1600);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (17, 17, TO_DATE('2019-05-02', 'YYYY-MM-DD'), 'A', 17, 170, 1700);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (18, 18, TO_DATE('2020-12-20', 'YYYY-MM-DD'), 'B', 18, 180, 1800);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (19, 19, TO_DATE('2020-08-10', 'YYYY-MM-DD'), 'A', 19, 190, 1900);
INSERT INTO sale_by_range (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) VALUES (20, 20, TO_DATE('2021-02-14', 'YYYY-MM-DD'), 'B', 20, 200, 2000);
⏹若 2013-01-01 < time_id < 2016-04-01 , 则数据理论上会分布到 sales_q2_2016 分区
-- SELECT * FROM 表名 PARTITION(分区名);
SELECT * FROM SALE_BY_RANGE PARTITION(SALES_Q2_2016);

四. 分区表的维护
4.1 分区的添加与删除
⏹可以通过 ALTER TABLE 添加新的分区。通常是在范围分区表中,您会根据需要添加新的分区。
ALTER TABLE sales_by_range
ADD PARTITION sales_q6_2023 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD'))
TABLESPACE TBS6;
⏹当某些分区数据不再需要时,可以删除相应的分区。
ALTER TABLE sales_by_range
DROP PARTITION sales_q1_2013;
4.2 分区的合并与拆分
⏹合并分区可以将多个分区的数据合并成一个分区,这对减少分区的数量或管理分区非常有用。
ALTER TABLE sales_by_range
MERGE PARTITIONS sales_q1_2013, sales_q2_2013
INTO PARTITION sales_q1_q2_2013;
⏹对于复合分区表,如果需要管理子分区,可以合并多个子分区。
ALTER TABLE sales_by_range
MERGE SUBPARTITIONS sales_q1_2024_southeast, sales_q1_2024_northeast
INTO SUBPARTITION sales_q1_2024_southeast_northeast;
⏹拆分分区用于将现有分区分成两个或更多的分区。这对于将过大的分区拆分为更小的分区非常有用。
ALTER TABLE sales_by_range
SPLIT PARTITION sales_q3_2019 AT (TO_DATE('2019-06-01', 'YYYY-MM-DD'))
INTO (PARTITION sales_q3_2019_part1,PARTITION sales_q3_2019_part2
);
4.3 重命名分区
⏹您可以重命名分区,以便更清楚地反映其数据的含义。
ALTER TABLE sales_by_range
RENAME PARTITION sales_q1_2024 TO sales_q1_2024_new;
4.4 分区交换
⏹将分区中的数据交换到其他表或分区。可以用来快速移动数据。
ALTER TABLE sales_by_range
EXCHANGE PARTITION sales_q1_2013
WITH TABLE temp_sales_q1_2013;
4.5 其他操作
⏹分区可以禁用,以便不再插入新数据,或启用以恢复操作。
ALTER TABLE sales_by_range DISABLE PARTITION sales_q4_2021;
⏹定期监控分区表的性能和空间使用情况。可以使用查询查看分区表的分区状态。
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE, TABLESPACE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = 'SALES_BY_RANGE';
⏹使用分区表时,定期对数据进行压缩(如针对历史数据)可以节省空间。压缩可以在分区级别进行。
ALTER TABLE sales_by_range MOVE PARTITION sales_q1_2013 TABLESPACE TBS1 COMPRESS FOR ALL OPERATIONS;
⏹重新组织分区表以提高查询性能或释放空间。这包括重新排序和重新分配存储空间。
ALTER TABLE sales_by_range REORGANIZE PARTITION sales_q2_2024;
⏹定期检查分区表的健康状态,并对损坏的分区进行修复。
SELECT * FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME = 'SALES_BY_RANGE';-- 若有问题,可以使用以下语句修复:
ALTER TABLE sales_by_range RECOVER PARTITION sales_q3_2019;
相关文章:
Oracle 表分区简介
目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区(Range Partitioning)2.2 列表分区(List Partitioning)2.3 哈希分区(Hash Partitioning)2.4 复合分…...
多并发发短信处理(头条项目-07)
1 pipeline操作 Redis数据库 Redis 的 C/S 架构: 基于客户端-服务端模型以及请求/响应协议的 TCP服务。客户端向服务端发送⼀个查询请求,并监听Socket返回。通常是以 阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客…...
网络编程的进程查看连接描述符信息等
一.查看当前进程的socket对应的fd信息 1. lsof lsof(List Open Files)命令可以列出系统中所有打开的文件的信息,包括 socket。 用法 要查看特定进程的 socket 信息,可以使用以下命令: lsof -p <pid> | grep…...
ChatGPT API快速搭建自己的第一个应用—文章摘要(单轮对话应用)
使用ChatGPT API快速搭建自己的第一个应用 1 安装库2 设置与导入3 文章摘要(单轮对话应用)3.1 任务简介:3.2 初始化3.3 点击发送3.4 保存3.5 检查并打印你的结果1 安装库 !pip install gradiogradio 是一个用于快速搭建交互式用户界面的 Python 库,特别适合展示机器学习模…...
【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈
【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈 开发背景 优雅草央千澈所有的合集,系列文章可能是不太适合完全初学者的,因为课程不会非常细致的系统…...
软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
在软件测试的实际环境搭建与管理过程中,了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性,还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…...
CI/CD 流水线
CI/CD 流水线 CI 与 CD 的边界CI 持续集成CD(持续交付/持续部署)自动化流程示例: Jenkins 引入到 CI/CD 流程在本地或服务器上安装 Jenkins。配置 Jenkins 环境流程设计CI 阶段:Jenkins 流水线实现CD 阶段:Jenkins 流水…...
【python3】 sqlite格式的db文件获得所有表和数据
【python3】 sqlite格式的db文件获得所有表和数据 1.背景2.代码3.解析1.背景 SQLite 格式的 .db 文件就是一个包含 SQLite 数据库的文件。 SQLite 格式的 .db 文件通常存储的是一个关系型数据库。 SQLite广泛用于应用程序、移动设备、浏览器等场景。它将整个数据库存储在一个文…...
【灵码助力安全3】——利用通义灵码辅助智能合约漏洞检测的尝试
前言 随着区块链技术的快速发展,智能合约作为去中心化应用(DApps)的核心组件,其重要性日益凸显。然而,智能合约的安全问题一直是制约区块链技术广泛应用的关键因素之一。由于智能合约代码一旦部署就难以更改…...
openEuler 22.04使用yum源最快速度部署k8s 1.20集群
本文目的 openEuler的官方源里有kubernetes 1.20,使用yum源安装是最快部署一个k8s集群的办法 硬件环境 主机名系统架构ipmasteropenEuler release 22.03 (LTS-SP2)arm192.168.3.11edgeopenEuler release 22.03 (LTS-SP2)arm192.168.3.12deviceopenEuler release 22.…...
Docker Compose 教程
Docker Compose 是一个 Docker 容器的依赖管理工具。 例如我们一个服务需要依赖到多个 Docker 容器,那么使用 Docker Compose 这个工具就能很方便的帮助我们管理。 Docker Compose 通过配置文件 .yml。 定义了所有容器的依赖关系。 然后我们只需把我们想要的 Docke…...
opencv的NLM去噪算法
NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是: 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找…...
scala基础学习_方法函数
文章目录 方法与函数函数(又称函数值/匿名函数)定义方法注意 单参数函数多参数函数函数作为参数传递 方法将方法转换为函数方法的返回值总结 方法与函数 函数(又称函数值/匿名函数) 定义在任何地方:函数可以定义在类…...
Android车机DIY开发之软件篇(八)单独编译
Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成,.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …...
【Bug】报错信息:Required request body is missing(包含五种详细解决方案)
大家好,我是摇光~ 遇到“Required request body is missing”错误通常意味着服务器期望在HTTP请求中包含一个请求体(body),但是实际上并没有收到。 例如: 当你在使用网页或应用程序的后台(比如一个网站或手…...
Docker 专栏 —— Dockerfile 指令详解
文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…...
Spring Boot 项目自定义加解密实现配置文件的加密
在Spring Boot项目中, 可以结合Jasypt 快速实现对配置文件中的部分属性进行加密。 完整的介绍参照: Spring Boot Jasypt 实现application.yml 属性加密的快速示例 但是作为一个技术强迫症,总是想着从底层开始实现属性的加解密,…...
在ubuntu下对NFS做性能测试
安装NFS 首先,安装服务 sudo apt update sudo apt install nfs-kernel-server然后创建共享文件夹 # 请自定义你自己的共享目录 sudo mkdir -p /exports/nfs4/homes sudo chmod -R 777 /exports/nfs4/homes# 这个可以根据no_root_squash标致选择设置。 # 如果不设…...
Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡
背景:本想找个简单例子看下,无奈版本依赖太过复杂,花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务,Nacos作为注册中心,实现对子服务的负载均衡访问。简单例子。 一、gateway-main-nacos服务端ÿ…...
StarRocks Awards 2024 年度贡献人物
在过去一年,StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步,其卓越的产品功能极大地简化和提升了数据分析的效率,使得"One Data,All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
