PostgreSQL/PostGIS中提升空间查询(分析)性能(效率)的一些方法
目录
1. 使用适当的索引
1.1 索引类型
1.2 分析查询计划
1.3 覆盖索引
1.4 复合索引
1.5 维护索引
1.6 删除不必要的索引
1.7 使用适当的数据类型
2. 建立分区表
2.1 分区表的基本概念
2.2 创建分区表的步骤
2.3 空间数据的分区
2.4 分区表优点
3. 简化几何形状
4. 使用适当的几何类型
5. 避免不必要的计算
6. 使用空间索引的统计信息
7. 使用并行查询
8. 使用适当的查询策略
9. 缓存热点数据
10. 优化数据库配置参数
10.1 内存相关参数
10.2 并行查询参数
10.3 索引和缓存参数
10.4 日志和检查点参数
10.5 其他与空间查询相关的参数
10.6 总结
优化PostGIS中的空间查询性能是一个重要的任务,特别是在处理大型空间数据集时,可能会使查询效率变得低下。以下从各个方面总结了一些常见的方法来提升超大型数据集查询效率:
1. 使用适当的索引
PostGIS支持多种类型的索引,包括GiST(Generalized Search Tree)、SP-GiST(Space-Partitioned Generalized Search Tree)和BRIN(Block Range INdexes)。对于大多数空间查询,GiST索引通常是最有效的选择。
通过对空间字段或属性字段建立空间索引,以增强查询效率:
CREATE INDEX idx_geom ON spatial_data USING GIST (geom);
1.1 索引类型
根据查询模式选择合适的索引类型。常见的索引类型包括:
- B-tree 索引:适用于等值查询、范围查询和排序操作。
- Hash 索引:适用于等值查询。
- GiST(Generalized Search Tree)索引:适用于空间数据和全文搜索。
- SP-GiST(Space-Partitioned Generalized Search Tree)索引:适用于多维数据。
示例:创建 B-tree 索引
CREATE INDEX idx_column_name ON table_name(column_name);
1.2 分析查询计划
使用 EXPLAIN
或 EXPLAIN ANALYZE
命令查看查询计划,了解查询是否使用了空间索引以及如何使用索引。
示例:使用 EXPLAIN
EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';
示例:使用 EXPLAIN ANALYZE
EXPLAIN ANALYZE SELECT * FROM table_name WHERE column_name = 'value';
1.3 覆盖索引
如果查询只需要从索引中获取数据,可以使用覆盖索引。覆盖索引包含所有查询所需的列,从而避免访问表数据。
示例:创建覆盖索引
CREATE INDEX idx_covering ON table_name(column1, column2);
1.4 复合索引
对于经常一起使用的多个列,可以创建复合索引。复合索引可以提高多列查询的性能。
示例:创建复合索引
CREATE INDEX idx_composite ON table_name(column1, column2);
1.5 维护索引
定期重建或重新组织索引,以保持其性能。大多数数据库系统提供了自动维护索引的功能,但在某些情况下,手动维护可能是必要的。
示例:重建索引(PostgreSQL)
REINDEX TABLE table_name;
1.6 删除不必要的索引
过多的索引会增加写操作的开销,因此应定期检查并删除不再需要的索引。
示例:删除索引
DROP INDEX idx_column_name;
1.7 使用适当的数据类型
确保列的数据类型与存储的数据匹配,这有助于优化索引的使用。例如,不要将整数存储为字符串。
2. 建立分区表
2.1 分区表的基本概念
在PostgreSQL中,分区表(Partitioned Table)是一种将大表的数据分割成更小、更易管理的部分的技术。根据地理区域或其他合适的分区键将数据分割成多个子表,这样在查询时只需要扫描相关的分区。通过分区,可以提高查询性能、简化数据维护以及优化存储空间的使用。
- 父表(Parent Table):这是定义了分区策略的表,它本身不包含实际的数据,只包含元数据和分区信息。
- 子表(Child Tables):这些是实际存储数据的表,每个子表对应一个分区。
- 分区键(Partition Key):用于决定数据行应该存储在哪个分区的列或列的组合。
- 分区类型:
- 范围分区(Range Partitioning):根据某个列的值的范围来划分数据。例如,按日期范围进行分区。
- 列表分区(List Partitioning):根据某个列的具体值列表来划分数据。例如,按国家代码进行分区。
- 哈希分区(Hash Partitioning):使用哈希函数将数据均匀分布到多个分区中。
在PostGIS中,使用分区表进行空间查询时,查询引擎会自动处理跨子表的查询。这意味着你不需要手动指定要查询的子表,PostgreSQL会根据查询条件自动选择适当的子表进行查询。假设你有一个输入的几何图形(例如一个多边形),并希望查询与该图层相交的所有图形。PostgreSQL会解析查询条件,并根据分区键和索引来优化查询。如果查询条件涉及多个子表的范围,PostgreSQL会自动识别并访问所有相关的子表。
2.2 创建分区表的步骤
- 创建父表:定义表结构并指定分区策略。
- 创建子表:为每个分区创建实际存储数据的子表。
- 附加分区:将子表附加到父表上。
以下是一个简单的范围分区示例:
-- 创建父表
CREATE TABLE orders (order_id SERIAL PRIMARY KEY,order_date DATE NOT NULL,customer_id INT NOT NULL,amount DECIMAL(10, 2) NOT NULL
) PARTITION BY RANGE (order_date);-- 创建子表
CREATE TABLE orders_2022 PARTITION OF orders
FOR VALUES FROM ('2022-01-01') TO ('2023-01-01');CREATE TABLE orders_2023 PARTITION OF orders
FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
在这个例子中,orders
是父表,orders_2022
和 orders_2023
是子表。数据会根据 order_date
被自动分配到相应的子表中。
2.3 空间数据的分区
要提升对大型空间数据的查询效率,首先需要确定一个合适的分区键。常见的分区键包括时间(如日期、年份)、地理区域(如行政区划代码、经纬度范围)等。选择分区键时,应考虑数据访问模式和查询需求。例如,如果大多数查询都是基于属性,比如时间范围的,那么可以选择时间作为分区键;如果查询主要是基于地理位置的,那么可以选择地理区域作为分区键。
基于地理位置的分区方法,通常用于将数据按照地理区域进行划分。这种策略在处理空间数据时非常有用,例如在GIS(地理信息系统)中。常见的分区方法包括四分法、网格法和行政区划法等。
四分法:将整体区域划分为四个相等的部分。
网格法:将区域划分为大小相等的网格单元。
行政区划法:根据行政边界进行分区,如省、市、县等。
标准分幅法:将区域按1:1万标准分幅或1:5万等标准分幅进行子表划分。
例如,以图形左下角坐标建立复合空间网格分区。使用PostgreSQL的复合分区(Composite Partitioning)功能根据多个列的值进行分区,步骤如下:
(1)创建主表并定义复合分区
首先,创建一个主表,并使用PARTITION BY RANGE
来定义复合分区。这里我们将使用ST_XMin(geom)和ST_YMin(geom)作为分区键。
(2)创建子表并定义分区范围
接下来,创建四个子表,每个子表代表一个象限。这些子表将根据x最小值和y最小值的范围进行分区。
(3)添加空间索引
为每个子表添加空间索引,以提高查询性能。
--(1) 创建分区表
CREATE TABLE spatial_data (id SERIAL PRIMARY KEY,geom GEOMETRY(Point, 4326)
) PARTITION BY RANGE (ST_XMin(geom), ST_YMin(geom));-- (2)创建四个子表,分别代表四个象限
CREATE TABLE spatial_data_q1 PARTITION OF spatial_data FOR VALUES FROM (-180, -90) TO (0, 0);
CREATE TABLE spatial_data_q2 PARTITION OF spatial_data FOR VALUES FROM (0, 0) TO (180, 90);
CREATE TABLE spatial_data_q3 PARTITION OF spatial_data FOR VALUES FROM (-180, 90) TO (0, 180);
CREATE TABLE spatial_data_q4 PARTITION OF spatial_data FOR VALUES FROM (0, 90) TO (180, 180);-- (3)添加空间索引
CREATE INDEX spatial_data_q1_idx ON spatial_data_q1 USING GIST (geom);
CREATE INDEX spatial_data_q2_idx ON spatial_data_q2 USING GIST (geom);
CREATE INDEX spatial_data_q3_idx ON spatial_data_q3 USING GIST (geom);
CREATE INDEX spatial_data_q4_idx ON spatial_data_q4 USING GIST (geom);
2.4 分区表优点
-
提高查询性能:通过将空间数据按照特定的分区键(如地理区域或时间范围)进行分区,可以减少查询时需要扫描的数据量,从而加快查询速度。
-
简化数据维护:分区表使得对特定数据集的操作(如备份、恢复、删除等)更加简单高效。例如,如果只需要处理某个特定时间段或地理区域内的数据,可以直接操作对应的分区。
-
优化存储空间:可以针对不同类型的数据使用不同的存储策略,如压缩、加密等。分区表还可以帮助更有效地利用存储资源。不常用的历史数据可以被移动到成本较低的存储介质上,而当前活跃的数据则保留在高性能的存储上。
-
支持多种分区类型:PostgreSQL支持多种分区类型,包括范围分区、列表分区和哈希分区等。这些分区类型可以根据不同的业务需求和数据特性进行选择和应用。
通过合理使用分区表,可以有效地管理和优化大型数据库系统的性能和可维护性。
注意事项
- 索引:需要为每个子表单独创建索引,因为索引不会自动继承。
- 约束:某些约束(如外键约束)可能需要在每个子表上单独定义。
- 维护成本:分区表的管理和维护可能比非分区表复杂一些,需要更多的规划和监控。
3. 简化几何形状
在插入或更新数据时,尽量简化几何形状。例如,可以使用ST_Simplify
函数来减少顶点数量,从而降低存储和计算的复杂度。
4. 使用适当的几何类型
选择合适的几何类型可以减少存储需求和计算复杂度。例如,如果不需要三维坐标,可以使用GEOMETRY(Polygon, 4326)
而不是GEOMETRY(PolyhedralSurface, 4326)
。
5. 避免不必要的计算
在查询中尽量避免不必要的计算。例如,不要在WHERE子句中进行复杂的几何运算,而是尽可能提前计算好结果。
6. 使用空间索引的统计信息
确保PostgreSQL有最新的统计信息,以便优化器能够生成高效的查询计划。你可以定期运行ANALYZE
命令来更新统计信息。
ANALYZE spatial_data;
7. 使用并行查询
如果你的硬件资源允许,可以利用PostgreSQL的并行查询功能来加速空间查询。确保你的PostgreSQL配置允许并行查询,并在查询中使用PARALLEL
提示。
SET max_parallel_workers_per_gather = 4;
SELECT /*+ PARALLEL(spatial_data, 4) */ * FROM spatial_data WHERE ST_Intersects(geom, ST_GeomFromText('POLYGON((...))', 4326));
8. 使用适当的查询策略
有时,调整查询策略也能显著提高性能。例如,使用ST_DWithin
代替ST_Intersects
,因为前者通常更快。
SELECT * FROM spatial_data WHERE ST_DWithin(geom, ST_GeomFromText('POINT(10 20)', 4326), 100);
9. 缓存热点数据
如果你的数据访问模式具有明显的热点特性,可以考虑使用缓存机制来存储热点数据,以减少数据库的负载。
10. 优化数据库配置参数
确保你的PostgreSQL和PostGIS配置已经过优化。例如,调整共享缓冲区大小、工作内存、并行数量等参数,以适应你的工作负载。
提高PostGIS数据库空间查询效率的参数调整主要集中在以下几个方面:
10.1 内存相关参数
-
work_mem
: 控制每个操作(如排序、哈希表等)可以使用的最大内存量。增加这个值可以提高复杂查询的性能,但要注意不要超过物理内存的限制。
ALTER SYSTEM SET work_mem = '64MB';
SELECT pg_reload_conf();
-
maintenance_work_mem
: 控制维护操作(如VACUUM、CREATE INDEX等)可以使用的最大内存量。适当增加这个值可以加快这些操作的速度。
ALTER SYSTEM SET maintenance_work_mem = '512MB';
SELECT pg_reload_conf();
10.2 并行查询参数
-
max_parallel_workers_per_gather
: 控制每个Gather节点可以使用的最大并行工作进程数。增加这个值可以提高并行查询的效率。ALTER SYSTEM SET max_parallel_workers_per_gather = 4; SELECT pg_reload_conf();
-
parallel_setup_cost
: 设置启用并行查询的代价阈值。降低这个值可以使更多的查询自动使用并行执行。
ALTER SYSTEM SET parallel_setup_cost = 100;
SELECT pg_reload_conf();
10.3 索引和缓存参数
-
shared_buffers
: 控制用于共享内存缓冲区的内存量。增加这个值可以提高缓存命中率,从而提高查询性能。
ALTER SYSTEM SET shared_buffers = '2GB';
SELECT pg_reload_conf();
-
effective_cache_size
: 控制PostgreSQL认为操作系统缓存的大小。增加这个值可以帮助优化器更好地估计I/O成本。
ALTER SYSTEM SET effective_cache_size = '6GB';
SELECT pg_reload_conf();
10.4 日志和检查点参数
checkpoint_segments
: 控制WAL日志文件的数量。增加这个值可以减少检查点的频率,从而减少I/O开销。
ALTER SYSTEM SET checkpoint_segments = 32;
SELECT pg_reload_conf();
wal_buffers
: 控制WAL日志缓冲区的大小。增加这个值可以减少WAL日志写入的频率。
ALTER SYSTEM SET wal_buffers = '16MB';
SELECT pg_reload_conf();
10.5 其他与空间查询相关的参数
postgis.backend
: 确保PostGIS扩展已正确加载并启用。--创建空间扩展 CREATE EXTENSION postgis;
10.6 总结
以下是一个综合示例,展示如何调整上述参数:
ALTER SYSTEM SET work_mem = '64MB';
ALTER SYSTEM SET maintenance_work_mem = '512MB';
ALTER SYSTEM SET max_parallel_workers_per_gather = 4;
ALTER SYSTEM SET parallel_setup_cost = 100;
ALTER SYSTEM SET shared_buffers = '2GB';
ALTER SYSTEM SET effective_cache_size = '6GB';
ALTER SYSTEM SET checkpoint_segments = 32;
ALTER SYSTEM SET wal_buffers = '16MB';
SELECT pg_reload_conf();
查看这些参数现有值的方法:
(1)SHOW
命令
SHOW work_mem;
SHOW maintenance_work_mem;
SHOW max_parallel_workers_per_gather;
SHOW parallel_setup_cost;
SHOW shared_buffers;
SHOW effective_cache_size;
SHOW checkpoint_segments;
SHOW wal_buffers;
(2)查询 pg_settings
系统视图
-- 查看 work_mem 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'work_mem';-- 查看 maintenance_work_mem 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'maintenance_work_mem';-- 查看 max_parallel_workers_per_gather 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'max_parallel_workers_per_gather';-- 查看 parallel_setup_cost 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'parallel_setup_cost';-- 查看 shared_buffers 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'shared_buffers';-- 查看 effective_cache_size 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'effective_cache_size';-- 查看 checkpoint_segments 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'checkpoint_segments';-- 查看 wal_buffers 的当前值
SELECT name, setting
FROM pg_settings
WHERE name = 'wal_buffers';
通过结合以上方法,你可以显著提高PostGIS中的空间查询性能。这些优化措施不仅适用于单个查询,还能在整个系统层面提升性能。
相关文章:
PostgreSQL/PostGIS中提升空间查询(分析)性能(效率)的一些方法
目录 1. 使用适当的索引 1.1 索引类型 1.2 分析查询计划 1.3 覆盖索引 1.4 复合索引 1.5 维护索引 1.6 删除不必要的索引 1.7 使用适当的数据类型 2. 建立分区表 2.1 分区表的基本概念 2.2 创建分区表的步骤 2.3 空间数据的分区 2.4 分区表优点 3. 简化几何形状 …...
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球最受欢迎的Web服务器软件,支持约30.2%的所有活跃网站。凭借其可靠性、灵活性和强大的功能,Apache数十年来一直是互联网的中坚力量。 一、Apache Web服务器的工作原理 Apache Web服务器的工作原理如下: 接收HTTP请求࿱…...
攻防世界Reversing-x64Elf-100
一、使用Exeinfo PE 查壳 64无壳 二、使用IDA静态分析 1.找main 总览分析到:要使sub_4006FD出0,就可以得到"Nice!" 2.找到关键函数sub_4006FD 总览分析:v3是二维数组,要使if( )里的值1,就可以出0 分析if(…...
MySQL生产环境备份脚本
全量备份脚本,其中BakDir,ZlbakDir,LogFile需要自己创建 #!/bin/bash export LANGen_US.UTF-8# 指定备份目录 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量备份目录 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 备份日志…...
redis 怎么样删除list
在 Redis 中,可以使用以下方法删除列表或列表中的元素: 1. 删除整个列表 使用 DEL 命令删除一个列表键: DEL mylist这个命令会删除键 mylist 及其值(无论 mylist 是一个列表还是其他类型的键)。 2. 删除列表中的部分…...
uniapp小程序 slot中无法传递外部参数的解决方案
最近在封装一个List组件,外部传给我数据,我循环后将每个Item部分slot到外部,由调用者自己去写item布局,类似ElementUI、iView的Tabe列表。 List: <view v-if"list.length > 0" class"list-scroll__item&quo…...
Java面试之实现多线程(二)
此篇接上一篇Java面试之什么是多线程(一) Java多线程是Java语言中的一个重要特性,它可以实现并发处理、提高程序的性能和响应能力。开发者需要了解多线程的概念和机制,并采用合适的多线程编程模型和同步机制,以保证程序的正确性和稳定性。Jav…...
论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See
2024 10月的arxiv 1 主要idea 针对多模态大模型(如LLaVA),提出了一系列高效的剪枝策略 在显著降低计算开销(多达 88%)的同时,保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…...
HDOJ 1735:字数统计 ← 贪心
【题目来源】https://acm.hdu.edu.cn/showproblem.php?pid1735【题目描述】 一天,淘气的 Tom 不小心将水泼到了他哥哥 Jerry 刚完成的作文上。原本崭新的作文纸顿时变得皱巴巴的,更糟糕的是由于水的关系,许多字都看不清了。可怜的 Tom 知道他…...
Java常用类(完整版)
其他类 Object类 超类、基类,所有类的直接或间接父类,位于继承树的最高层 任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类 Object类中所定义的方法,是所有对象都具备的方法 Object类型可以存储…...
【JAVA】Java项目实战—Java SE进阶项目:在线考试系统
在数字化教育中,在线考试系统的需求日益增加。它不仅提高了考试的效率,还能方便学生随时随地进行学习和测试。Java作为一种强大的编程语言,因其平台无关性、丰富的类库和强大的社区支持,成为开发在线考试系统的理想选择。 在线考…...
仿iOS日历、飞书日历、Google日历的日模式
仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…...
机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法
引言 大模型(如BERT、GPT等)在自然语言处理任务中展现了强大的能力,但为了使其更贴合特定应用场景,通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据,并通过具体…...
【飞机纵向动力学建模与分析】
飞机纵向动力学建模与分析 文章目录 飞机纵向动力学建模与分析前言坐标系定义及转换机体坐标系定义机体坐标系定义气流角定义气流坐标系与机体坐标系相互转化 纵向动力学方程建立力的分解动力学方程的建立纵向动力学方程纵向动力学方程状态空间表达形式纵向运动分析短周期简化处…...
【机器人】控制之稳定性判定: 李雅普诺夫Lyapunov (7) 判定是否是李函数,思维导图
要判断一个函数 V(x)是否可以作为某个动力学方程的 Lyapunov 函数,需要满足特定的数学和物理条件。以下是详细说明: 1. 满足 Lyapunov 函数的基本条件 一个函数 V(x)能否作为 Lyapunov 函数,需要满足以下基本条件: 1.1 正定性 …...
Qwen 论文阅读记录
本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…...
ViewModel
ViewMode是MVVM架构模式中VM层对应的类,它的作用是存储界面数据,并和界面发生数据交互。ViewModel能感知生命周期,并且在界面由于配置问题发生重建时候,可以保持当前的数据不变。生命周期如下: ViewMode由ViewModePr…...
AI和SEO的完美结合关键词策略解析
内容概要 在当今数字营销环境中,AI与SEO的结合已成为提升网站流量和转化率的重要策略。为了更好地理解这一主题,本文将首先介绍AI技术在数字营销中的多种应用,其次分析SEO的基础知识和重要性,以便为后续讨论建立坚实的基础。 提示…...
网络基础 - TCP/IP 五层模型
文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…...
pyenv 管理多个 Python 版本(1)
引言 你是否曾希望参与一个支持多个 Python 版本的项目,但又不知道如何轻松地测试所有这些版本?你是否对 Python 的最新版本感到好奇?或许你想尝试这些新功能,但又不想冒险破坏你的开发环境。幸运的是,如果你使用 pyen…...
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读 导读:这篇论文的核心议题是理解和建模大型语言模型(LLM)的上下文学习(ICL)能力。文章从贝叶斯学习的角度出发,提出了一…...
泷羽Sec学习笔记-Bp中ip伪造、爬虫审计
ip伪造与爬虫审计 ip伪造 下载插件:burpFakeIP 地址:GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython:下载地址:Maven Central: org.python:jython-…...
常用vim命令行-linux008
Vim 是一款功能强大的文本编辑器,广泛应用于编程、配置文件编辑以及日常文本处理。Vim 在其命令行模式下提供了丰富的操作命令,这些命令能够大幅提升编辑效率。以下是 Vim 中常用的命令及操作的总结,覆盖了 Vim 中的基本操作、查找、替换、文…...
Linux相关概念和易错知识点(24)(认识信号、信号捕捉)
目录 1.认识信号 (1)后台进程和前台进程 ①为什么Ctrl C能终止前台进程? ②如何终止这个后台程序? (2)信号、异步和同步 ①同步 ②异步 (3)信号的处理 2.信号捕捉 &#x…...
Scala的导入
//导入 //(1) 创建包:在src上右键,新建软件包 //(2)填写包名:小写 //(3)在包上右键,创建类。自动加入包名 //(4)导入。import 包名.类名 //导入多个类 //import jh.yuanlixueyuan.bigdata.scala03.{A,B,C} //导入包下的所有的类 /…...
strace,tcmalloc,asan使用
1、strace使用 1.1、编译strace strace开源库 解压strace-4.21.tar.xz 编译./configure --hostarm-ca9-linux-gnueabihf --prefix~/out make&&make install 1.2、参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息…...
C++中多态性在实际项目中的应用场景;C++中面向对象编程实现数据隐藏的方法
1. C中多态性在实际项目中的应用场景 C中多态性是面向对象编程中的一个重要概念,它允许我们在使用基类指针或引用的情况下,调用派生类对象的特定方法。这种灵活性使得多态性在实际项目中有着广泛的应用场景,具体包括但不限于以下几个方面&am…...
【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)
前言 界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,QT中可以使用QMovieQLabel完成gif动态图片的播放及关闭的效果。 效果图 功能讲解 1、加载动画 void MainWindow::addloadgi…...
iPhone苹果相册视频怎么提取音频?
在数字时代,视频已成为我们记录生活、分享故事的重要方式。然而,有时候我们只想保留视频中的音频部分,比如一段动人的背景音乐或是一段珍贵的对话。那么,苹果相册视频怎么提取音频呢?本文将介绍三种简单且实用的方法&a…...
【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器
文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...
完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...
在销售管理中,客户跟进时会出现什么问题?如何解决?
客户跟进表是销售工作中重要的一部分,用于记录与客户的每次沟通、执行计划和合作动态。然而,在实际使用中,客户跟进表经常会出现一些问题,导致效率低下甚至客户流失。本文就从常见问题出发,一一提供措施,让…...
【代码随想录|动态规划】
一、动态规划理论基础 |、动态规划包含题目类型 (1)背包问题 (2)打家劫舍 (3)股票问题 (4)子序列问题 ||、做一道题需要掌握(动态规划5步曲)࿱…...
时间敏感网络与工业通信的融合:光路科技电力专用交换机和TSN工业交换机亮相EP电力展
12月7日,第三十一届中国国际电力设备及技术展览会(EP Shanghai 2024)暨上海国际储能技术应用展览会在上海新国际博览中心圆满落幕。本届展会以“数字能源赋能新质生产力”为主题,系统地呈现了电力设备行业在技术融合、转型升级及上…...
初识Linux · 系统编程done
目录 前言: 死锁 可重入函数 读写锁 自旋锁 前言: 本文作为Linux系统编程的收尾工作,介绍的是些零碎的概念,比如死锁,可重入函数,自旋锁,读写锁等,其中死锁概念要重要些&#…...
JavaScript函数式编程: 实现不可变数据结构
# JavaScript函数式编程: 实现不可变数据结构 什么是不可变数据结构 在计算机编程中,不可变数据结构指的是数据一旦创建就不可更改或者修改。这意味着我们不能在原始数据上进行增删改操作,而是需要创建一个新的数据结构来代替原始数据进行操作。 为什么要…...
union find算法 c++
1.原理参考 labuladong-fucking-algorithm/算法思维系列/UnionFind算法详解.md at master jiajunhua/labuladong-fucking-algorithm GitHub 2.初级模式 #include <iostream>class UF {public:// 记录连通分量/* 构造函数,n 为图的节点总数 */UF(int n) {…...
路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)
目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 改进的人工势场法(APF)路径规划算法 在路径规划中,人工势场法(APF)是一种常见的方法,但传统的APF算法容易陷入局部极小值,导致路径规…...
ES语句——DSL(kibana语句)
一、查询操作 查看当前索引的数据结构 _mapping Get ai-open-log*/_mapping 查询当前索引下的文档数以及分片信息 _count Get ai-open-log*/_count { "count": 12345, //当前索引下的文档总数 "_shards": { //分片信息 "total&…...
y3编辑器教学5:触发器2 案例演示
文章目录 一、探索1.1 ECA1.1.1 ECA的定义1.1.2 使用触发器实现瞬间移动效果 1.2 变量1.2.1 什么是变量1.2.2 使用变量存储碎片收集数量并展现 1.3 if语句(魔法效果挂接)1.3.1 地形设置1.3.2 编写能量灌注逻辑1.3.3 编写能量灌注后,实现传送逻…...
MVC配置文件及位置
配置文件位置 默认位置 WEB-INF目录下,文件名:<servlet-name>-servlet.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.…...
【razor】echo搭配relay功能分析
echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…...
C++类的运算符重载
目标 让自定义的类直接使用运算符运算 代码 头文件及类定义 #include <iostream>using namespace std; class Complex {int rel;int vir; public:void show(){cout <<"("<<this->rel<<","<<this->vir<<&quo…...
Motionface RTASR 离线实时语音识别直播字幕使用教程
软件使用场景: 直播、视频会议、课堂教学等需要实时字幕的场景。 1:系统要求 软件运行支持32位/64位windows 10/11系统,其他硬件要求无,无显卡也能实时识别字幕。 2:下载安装 链接:百度网盘 请输入提取码 提取码&#…...
【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究
文章目录 概述:摘要1. 引言2. 相似误差订正算法(核心)3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...
learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)
1.父子组件u-search (1)父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...
UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案
UNIX系统常见故障表现: 1、存储结构出错; 2、数据删除; 3、文件系统格式化; 4、其他原因数据丢失。 UNIX系统常见故障解决方案: 1、检测UNIX系统故障涉及的设备是否存在硬件故障,如果存在硬件故障…...
c#动态更新替换json节点
需求项目json作为主模板,会应用到多个子模版,当后续项目变更只需要修改主模板中节点,并且能够动态更新到原来的子模版中去。 主模板示例: {"A": {"A1": "","A2": false,"A3"…...
kubernetes的可靠性测试或者故障测试有哪些?
kubernetes的可靠性测试或者故障测试有哪些? 在 Kubernetes (K8s) 集群中,可靠性测试和故障性测试旨在确保系统能够稳定运行并具备应对各种故障的能力。这些测试主要针对集群的组件、应用程序和基础设施。以下是详细的测试内容和方法: 一、可靠性测试 1. 高可用性测试 目…...
datax和datax-web打包成docker运行
概述 datax和datax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8,需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…...