PostgreSQL:表分区与继承
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea
文章目录
- PostgreSQL:表分区与继承
- 引言:当数据洪流遇上结构化存储的智慧
- 1. 分区表的设计原则:构建高效数据架构的基石
- 1.1 分区策略的黄金三角
- 1.2 分区键选择的艺术
- 1.3 分区维护的最佳实践
- 2. 范围分区、列表分区与哈希分区:三叉戟的力量
- 2.1 范围分区:时间序列数据的王者
- 2.2 列表分区:离散值的优雅分割
- 2.3 哈希分区:均匀分布的艺术
- 3. 分区表的查询优化:突破性能瓶颈的密钥
- 3.1 执行计划深度解析
- 3.2 并行查询加速策略
- 3.3 索引策略精要
- 3.4 统计信息维护
- 3.5 常见性能陷阱
- 4. 表继承与多态关联:超越分区的对象关系模型
- 4.1 继承机制原理剖析
- 4.2 多态关联实现方案
- 4.3 继承与分区对比
- 4.4 高级应用场景
- 4.5 继承查询优化
- 5. 前沿发展:PG16分区增强特性
- 5.1 异步分区修剪
- 5.2 分区级权限控制
- 5.3 混合分区策略
- 参考文献
- 附录:分区方案决策树
PostgreSQL:表分区与继承
引言:当数据洪流遇上结构化存储的智慧
在数字化浪潮的推动下,全球数据总量正以每两年翻一番的速度增长。面对这样的数据洪流,传统的关系型数据库管理系统(RDBMS)正面临前所未有的挑战。根据DB-Engines的统计数据显示,PostgreSQL在2023年已成为全球第四大流行数据库系统,其强大的扩展性和灵活性使其成为处理海量数据的首选方案之一。
在这样的背景下,表分区(Table Partitioning
)和表继承(Table Inheritance
)作为PostgreSQL应对大数据处理的核心技术手段,正发挥着越来越重要的作用。想象这样一个场景:某电商平台的订单表每天新增百万级记录,三年后将达到惊人的10亿行规模。此时若使用传统单表存储,即使有索引加持,简单的范围查询也可能需要数分钟响应。这正是表分区技术大显身手的时刻——通过将数据物理分割到不同子表,查询性能可提升数十倍。
PostgreSQL的分区演进史本身就是一部技术进化史:从早期的继承表模拟分区(8.1版本
),到原生声明式分区(10版本
),再到分区修剪优化(11版本
)和哈希分区支持(14版本
),每一步都凝聚着社区对大数据处理的深刻理解。而表继承机制作为PostgreSQL特有的对象关系特性,不仅为分区实现提供底层支持,更为复杂的数据模型设计开辟了全新可能。
本文将深入剖析PostgreSQL
表分区与继承的实现机理,结合最新版本(16版本
)的特性演进,通过大量生产级代码示例,揭示如何设计高效的分区方案、优化分区查询性能,并巧妙运用继承特性构建灵活的数据模型。无论您是正在设计TB
级数据仓库的架构师,还是优化千万级事务系统的DBA
,本文都将为您提供可直接落地的解决方案。
1. 分区表的设计原则:构建高效数据架构的基石
1.1 分区策略的黄金三角
在设计分区表时,必须平衡查询模式、数据分布和维护成本这三个关键维度。根据Google的SRE经验,优秀的分区设计应满足:
- 查询局部性:80%的查询应命中单个分区
- 均衡分布:各分区数据量差异不超过20%
- 生命周期管理:旧分区归档不影响活跃数据
-- 典型的时间范围分区设计示例
CREATE TABLE sensor_data (device_id BIGINT NOT NULL,record_time TIMESTAMPTZ NOT NULL,temperature NUMERIC(5,2),humidity NUMERIC(5,2)
PARTITION BY RANGE (record_time);CREATE TABLE sensor_data_2023 PARTITION OF sensor_dataFOR VALUES FROM ('2023-01-01') TO ('2024-01-01');CREATE TABLE sensor_data_2024 PARTITION OF sensor_dataFOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
1.2 分区键选择的艺术
选择分区键时需要评估:
- 基数分布:避免产生过多小分区(>1000个分区会降低性能)
- 查询谓词:WHERE子句中最常使用的字段
- 数据时效:时间字段的自然衰减特性
-- 使用复合分区键的示例(PG14+)
CREATE TABLE customer_orders (region VARCHAR(20) NOT NULL,order_date DATE NOT NULL,amount NUMERIC(10,2)
PARTITION BY LIST (region), RANGE (order_date);-- 创建子分区
CREATE TABLE orders_asia_2023 PARTITION OF customer_ordersFOR VALUES IN ('asia') PARTITION BY RANGE (order_date);
1.3 分区维护的最佳实践
- 自动分区创建:使用触发器或pg_partman扩展
- 分区归档:使用
ALTER TABLE ... DETACH PARTITION
- 统计信息管理:配置单独的
autovacuum
参数
-- 分区维护操作示例
-- 归档旧分区
ALTER TABLE sensor_data DETACH PARTITION sensor_data_2022;-- 合并分区(PG12+)
ALTER TABLE sensor_data MERGE PARTITIONS sensor_data_202301, sensor_data_202302 INTO sensor_data_2023_q1;
2. 范围分区、列表分区与哈希分区:三叉戟的力量
2.1 范围分区:时间序列数据的王者
范围分区(Range Partitioning)特别适合具有自然顺序的数据类型,如时间戳、自增ID等。在IoT场景中,按小时分区的设计可将查询性能提升40倍。
-- 每小时自动分区创建(使用pg_partman)
SELECT partman.create_parent('public.sensor_logs','log_time','native','hourly',p_premake := 24
);
2.2 列表分区:离散值的优雅分割
列表分区(List Partitioning)适用于具有明确分类的数据,如地区、状态码等。某电商平台通过地区列表分区,将区域报表查询速度从15秒降至0.3秒。
-- 多级列表分区设计
CREATE TABLE sales (region VARCHAR(20),country VARCHAR(20),sale_date DATE,amount NUMERIC
) PARTITION BY LIST (region);CREATE TABLE sales_europe PARTITION OF salesFOR VALUES IN ('western_europe', 'eastern_europe')PARTITION BY LIST (country);
2.3 哈希分区:均匀分布的艺术
哈希分区(Hash Partitioning)自PG11引入,通过哈希算法将数据均匀分布到多个分区。某社交平台使用哈希分区将用户表分散到128个分区,并发查询吞吐量提升8倍。
-- 哈希分区示例(PG14+支持自定义模数)
CREATE TABLE user_sessions (user_id BIGINT,session_data JSONB
) PARTITION BY HASH (user_id)
WITH (MODULUS 4, REMAINDER 0); CREATE TABLE user_sessions_1 PARTITION OF user_sessionsFOR VALUES WITH (MODULUS 4, REMAINDER 0);
3. 分区表的查询优化:突破性能瓶颈的密钥
3.1 执行计划深度解析
通过EXPLAIN (ANALYZE, BUFFERS)
观察查询是否触发分区修剪(Partition Pruning)。优化器在以下场景会自动修剪:
- 静态条件:
WHERE partition_key = constant
- 动态条件:
WHERE partition_key = $1
(需开启enable_partition_pruning
) - 范围查询:
BETWEEN
操作符配合时间范围
-- 查看分区修剪效果(PG16新增partition pruning提示)
EXPLAIN (ANALYZE)
SELECT * FROM sensor_data
WHERE record_time BETWEEN '2024-03-01' AND '2024-03-02';-- 输出结果关键片段
Append (cost=0.00..48.95 rows=12 width=48)-> Seq Scan on sensor_data_20240301 (cost=0.00..24.12 rows=6 width=48)-> Seq Scan on sensor_data_20240302 (cost=0.00..24.12 rows=6 width=48)
3.2 并行查询加速策略
通过调整max_parallel_workers_per_gather
参数实现跨分区并行扫描。在32核服务器上,对100个分区的并行查询速度可达单线程的15倍。
-- 设置并行度(PG16支持分区级并行度控制)
ALTER TABLE sensor_data SET (parallel_workers = 8);-- 查看并行执行计划
EXPLAIN (ANALYZE)
SELECT AVG(temperature) FROM sensor_data
WHERE record_time > now() - interval '1 week';
3.3 索引策略精要
采用分层索引架构:
- 全局索引:在父表创建索引(自动传播到所有分区)
- 本地索引:在特定分区创建专用索引
- 条件索引:针对热点分区的部分索引
-- 全局索引示例(PG11+自动创建子分区索引)
CREATE INDEX idx_record_time ON sensor_data (record_time);-- 分区本地索引优化
CREATE INDEX idx_asia_2024_sales ON sales_asia_2024 (product_id)
WHERE quantity > 1000;
3.4 统计信息维护
通过pg_stat_user_tables
监控分区统计信息,针对大分区配置独立统计策略:
-- 配置分区自动清理参数
ALTER TABLE sensor_data_2024 SET (autovacuum_analyze_scale_factor = 0.01,autovacuum_vacuum_scale_factor = 0.02
);-- 手动收集统计信息(PG14+支持子分区并行分析)
ANALYZE VERBOSE sensor_data;
3.5 常见性能陷阱
- 跨分区聚合:
SUM()
操作可能触发全表扫描 - 外键约束:父表无法定义跨分区外键(需在子分区单独设置)
- JOIN顺序:大表JOIN时需确保分区表作为驱动表
4. 表继承与多态关联:超越分区的对象关系模型
4.1 继承机制原理剖析
PostgreSQL的表继承(Table Inheritance)采用对象关系模型的实现:
- 父子表结构:子表自动包含父表所有列
- 查询传播:父表查询自动包含所有子表数据
- 约束叠加:
CHECK
约束形成逻辑过滤条件
-- 创建继承层次(经典案例:设备类型继承)
CREATE TABLE devices (id SERIAL PRIMARY KEY,name TEXT,created_at TIMESTAMPTZ DEFAULT now()
);CREATE TABLE sensors (accuracy DECIMAL(5,2)
) INHERITS (devices);CREATE TABLE actuators (max_force NUMERIC
) INHERITS (devices);
4.2 多态关联实现方案
通过继承实现多态关联(Polymorphic Associations),解决实体类型扩展问题:
-- 事件日志多态模型
CREATE TABLE events (id BIGSERIAL PRIMARY KEY,target_type VARCHAR(32),target_id BIGINT,event_time TIMESTAMPTZ
);CREATE TABLE temperature_events (sensor_id BIGINT REFERENCES sensors(id),temperature NUMERIC(5,2)
) INHERITS (events);-- 查询所有设备事件(自动包含子表数据)
SELECT e.* FROM events e WHERE target_type = 'sensor';
4.3 继承与分区对比
特性 | 表继承 | 声明式分区 |
---|---|---|
数据分布 | 逻辑分组 | 物理分区 |
约束机制 | CHECK约束手动维护 | 自动范围校验 |
查询性能 | 需手动优化 | 自动分区修剪 |
多级层次 | 支持无限继承 | 仅支持两级分区 |
外键支持 | 可在子表单独定义 | 父表无法定义外键 |
4.4 高级应用场景
-
版本化数据存储:通过继承实现数据版本快照
CREATE TABLE contracts_v1 (LIKE contracts); CREATE TABLE contracts_v2 (payment_terms TEXT) INHERITS (contracts_v1);
-
多租户隔离:每个租户子表独立权限控制
CREATE TABLE tenant_a.orders () INHERITS (public.orders); GRANT SELECT ON tenant_a.orders TO role_a;
-
实时归档系统:使用规则系统实现数据自动迁移
CREATE RULE archive_orders AS ON INSERT TO orders WHERE order_date < '2020-01-01' DO INSTEAD INSERT INTO orders_archive VALUES (NEW.*);
4.5 继承查询优化
-
ONLY关键字:限制查询仅扫描指定表
SELECT * FROM ONLY devices; -- 不包含子表数据
-
约束排除:通过
constraint_exclusion
参数控制SET constraint_exclusion = on; EXPLAIN SELECT * FROM devices WHERE id BETWEEN 1000 AND 2000;
5. 前沿发展:PG16分区增强特性
5.1 异步分区修剪
PG16引入后台工作进程实现异步分区修剪,将修剪耗时从查询主路径剥离:
-- 启用异步修剪(新增参数)
SET enable_async_partition_pruning = on;-- 监控修剪进度
SELECT * FROM pg_stat_async_partition_pruning;
5.2 分区级权限控制
实现细粒度权限管理:
GRANT SELECT ON TABLE sales_2024 TO analyst_role;
REVOKE DELETE ON TABLE sales_archive FROM api_user;
5.3 混合分区策略
支持多级组合分区(如:先LIST再HASH):
CREATE TABLE genomic_data (lab_id INT,sample_date DATE,dna_data BYTEA
PARTITION BY LIST (lab_id), HASH (sample_date);CREATE TABLE lab_nyc PARTITION OF genomic_dataFOR VALUES IN (1)PARTITION BY HASH (sample_date);
参考文献
- PostgreSQL 16 Official Documentation - Table Partitioning
- 《PostgreSQL 14 High Performance》Chapter 9 - Partitioning Strategies
- AWS Technical Whitepaper - Best Practices for Partitioning on Aurora PostgreSQL
- Microsoft Azure Architecture Center - Designing Scalable Partitioning Schemes
- Uber Engineering Blog - PostgreSQL Partitioning at Scale
- Citus Data - Sharding vs Partitioning Benchmark 2023
- PostgreSQL pg_partman Extension - GitHub Repository
附录:分区方案决策树
相关文章:
PostgreSQL:表分区与继承
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【NLP 55、投机采样加速推理】
目录 一、投机采样 二、投机采样改进:美杜莎模型 流程 改进 三、Deepseek的投机采样 流程 Ⅰ、输入文本预处理 Ⅱ、引导模型预测 Ⅲ、候选集筛选(可选) Ⅳ、主模型验证 Ⅴ、生成输出与循环 骗你的,其实我在意透了 —— 25.4.4 一、…...
CSS 创建与使用学习笔记
一、CSS 的作用 CSS(层叠样式表)用于控制 HTML 文档的样式和布局。当浏览器读取一个样式表时,它会根据样式表中的规则来格式化 HTML 文档,从而实现页面的美化和布局调整。 二、插入样式表的方法 CSS 可以通过以下三种方式插入到…...
CSS Id 和 Class 选择器学习笔记
一、概述 在 CSS 中,id 和 class 选择器是用于为 HTML 元素指定样式的强大工具。它们可以帮助我们精确地控制页面中元素的样式,让页面设计更加灵活和高效。 二、id 选择器 1. 定义和使用 定义:id 选择器用于为具有特定 id 属性的 HTML 元素…...
从小米汽车事故反思 LabVIEW 开发
近期,小米汽车的一起严重事故引发了社会各界的广泛关注。这起事故不仅让我们对智能汽车的安全性产生了深深的思考,也为 LabVIEW 开发领域带来了诸多值得汲取的知识与领悟。 在智能汽车领域,尤其是涉及到智能驾驶辅助系统时,安全是…...
解锁工业通信:Profibus DP到ModbusTCP网关指南!
解锁工业通信:Profibus DP到ModbusTCP网关指南! 在工业自动化领域,随着技术的不断进步和应用场景的日益复杂,不同设备和系统之间的通讯协议兼容性问题成为了工程师们面临的一大挑战。尤其是在Profibus DP和Modbus/TCP这两种广泛应…...
web漏洞靶场学习分享
靶场:pikachu靶场 pikachu漏洞靶场漏洞类型: Burt Force(暴力破解漏洞)XSS(跨站脚本漏洞)CSRF(跨站请求伪造)SQL-Inject(SQL注入漏洞)RCE(远程命令/代码执行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下载)Unsafe file uploads(不安全的文…...
【C++学习笔记】十三、速通笔记
完整的C编程教程 目录 开发环境配置C知识体系现代C特性设计模式数据结构CMake项目构建调试技巧进阶主题学习资源 1. 开发环境配置 1.1 安装编译器 sudo apt-get install g build-essential1.2 安装构建工具 sudo apt-get install cmake1.3 VS Code配置 安装C扩展配置调试…...
硬件电路(23)-输入隔离高低电平有效切换电路
一、概述 项目中为了防止信号干扰需要加一些隔离电路,而且有时传感器的信号是高有效有时是低有效,所以基于此背景,设计了一款方便实现高低电平有效检测切换电路。 二、应用电路...
基于深度学习的多模态癌症数据集调研
基于深度学习的多模态癌症数据集调研 关键词: 癌症、分割、多模态、radiology、pathology、深度学习 目录: 一、 数据集总结 二、 胶质瘤/脑肿瘤(glioma) 三、 肺癌/非小细胞肺癌(NSCLC) 四、 乳腺癌&am…...
Logo语言的系统监控
Logo语言的系统监控 引言 在信息技术飞速发展的时代,系统监控成为了确保计算机系统和网络平稳运行的重要手段。系统监控不仅可以实时跟踪系统的性能、资源使用情况和安全风险等,还能够在出现问题时及时发出警报,从而避免潜在的故障和损失。…...
Go语言-初学者日记(八):构建、部署与 Docker 化
🧱 一、go build:最基础的构建方式 Go 的构建工具链是出了名的轻量、简洁,直接用 go build 就能把项目编译成二进制文件。 ✅ 构建当前项目 go build -o myapp-o myapp 指定输出文件名默认会构建当前目录下的 main.go 或 package main &a…...
青少年编程与数学 02-015 大学数学知识点 08课题、信息论
青少年编程与数学 02-015 大学数学知识点 08课题、信息论 一、信息论基础二、熵与信息量三、信源编码四、信道编码五、率失真理论六、信息论的应用七、网络信息论八、信息论与统计学习九、量子信息论十、信息论的前沿研究总结 信息论是研究信息传输、存储和处理的数学理论&…...
【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录
解决办法:勾上【使用凭据帮助程序】(英文:Use credential helper)...
FreeRTOS:嵌入式实时操作系统的轻量化解决方案
一、FreeRTOS 的核心定位 FreeRTOS(Free Real-Time Operating System)是一款专为微控制器及资源受限的嵌入式设备设计的开源实时操作系统内核。自2003年由Richard Barry发布以来,其以轻量化、高实时性、低资源占用的特点,成为物…...
Linux操作系统 4.Linux实用操作
一、各类小技巧(快捷键) 强制停止 退出、登出 历史命令搜索 光标移动 1.CTRL C 强制停止 1.Linux某些程序的运行,如果想要强行停止它,可以使用ctrlc 2.命令输入错误,也可以通过快捷键ctrl c,退出当前输入࿰…...
学透Spring Boot — 010. 单元测试和Spring Test
系列文章目录 这是CSDN postnull 博客《学透Spring Boot》系列的一篇,更多文章请移步:Postnull - 学透Spring Boot系列文章 文章目录 系列文章目录前言1. 基本概念UT 单元测试TDD 测试驱动开发UT测试框架Mock框架 3. Spring Test为什么要用Spring Test引…...
Perl语言的文件系统
Perl语言中的文件系统操作 引言 在软件开发中,文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入,还是复杂的文件管理,合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言,凭…...
ffmpeg基础指令学习
文章目录 1. **基本的 FFmpeg 语法**2. **常见的 FFmpeg 基础指令****1. 转换视频格式****2. 视频剪切****3. 转换视频的编码****4. 提取音频****5. 改变视频分辨率****6. 改变音视频的比特率****7. 合并音视频****8. 提取视频中的一帧图片****9. 提取视频的帧速率(…...
英国电商物流变革:ebay私人卖家如何借势简易配送提升履约效率?
近年来,英国电商物流正在经历一场不小的变革。从“等待5-7个工作日”到如今“次日达”成为常态,市场和用户对配送效率的要求越来越高。对于在 eBay 平台上的私人卖家来说,这既是挑战,也是机会。如何用有限的资源跟上平台和消费者对…...
第15周:注意力汇聚:Nadaraya-Watson 核回归
注意力汇聚:Nadaraya-Watson 核回归 Nadaraya-Watson 核回归是一个经典的注意力机制模型,它展示了如何通过注意力权重来对输入数据进行加权平均。以下是该内容的核心总结: 关键概念 注意力机制框架:由查询(自主提示…...
批量图片文本识别重命名,批量ocr识别图片重命名,基于WPF和腾讯OCR云部署实,现批量对图片局部提取文字后重命名的操作详细步骤
1. 项目背景 在日常工作中,我们经常需要处理大量图片文件,这些图片可能包含重要的文字信息。为了提高工作效率,我们需要一种自动化的方式,从图片中提取文字,并根据提取的文字对图片进行重命名。 本项目基于 WPF 框架开发桌面应用程序,结合 腾讯 OCR…...
26考研——排序(8)
408答疑 文章目录 一、排序的基本概念二、插入排序三、交换排序四、选择排序五、归并排序、基数排序和计数排序六、排序的代码实操七、各种内部排序算法的比较及应用八、外部排序九、参考资料鲍鱼科技课件26王道考研书 十、总结基本排序算法希尔排序快速排序、堆排序和归并排序…...
KUKA机器人导入设备说明文件
KUKA机器人在应用中需要进行通讯配置,通讯前需要导入设备说明文件,比如常用的倍福设备说明文件。在Workvisual软件上通过以下步骤即可导入设备说明文件。 一、打开Workvisual软件,在选项卡【File】下找到【Import/Export】输入/输出并点击打…...
ssl.SSLCertVerificationError报错解决方案
这个错误 ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate 指出 Python 在尝试建立安全的 HTTPS 连接时,无法验证远程服务器(在此案例中是 GitHub 或 Hugging Face…...
drawio导出流程图为白色背景png图片
draw.io 操作路径: 1.纯白背景图片(一般导出流程图就这种纯白背景,看自己需求 什么都不勾选 导出效果图 2.田字格白背景 只勾选网格 导出效果图 3.方块背景 只勾选背景 导出效果图 4.大方块背景 都勾选 导出效果图...
【Linux】——手撕线程池、简易线程池
前言 在现代计算机编程领域,随着多核处理器和分布式系统的广泛应用,并发编程变得越来越重要。而线程作为实现并发的基本手段之一,其重要性不言而喻。然而,在实际的应用开发中,如何高效地管理和调度线程,以充…...
使用mcp自定义编写mcp tool,使用 conda 启动,在cline中配置使用
自定义 mcp tool 例子 ## /langchain_learn/mcp学习/base_mcp_tool_study2.py # 导入必要模块 import os from typing import Optional from mcp.server.fastmcp import FastMCP# 初始化 MCP 服务器实例,指定服务器名称和版本 mcp_server FastMCP(name"DemoS…...
OpenEuler/CentOS一键部署OpenGauss数据库教程(脚本+视频)
📌OpenEuler/CentOS一键安装OpenGauss数据库教程 为什么需要OpenGauss一键安装脚本? 手动部署OpenGauss数据库时,环境适配、依赖冲突等问题常让开发者头疼。尤其对新人而言,官方文档的配置步骤可能耗时数小时甚至引发未知报错。 …...
python如何快速删除文件夹中的大量文件
在 Python 中,删除文件夹中的大量小图片文件可以通过使用 os 模块或 shutil 模块来实现。以下是一个示例代码,展示了如何快速删除指定文件夹中的所有文件。如果你只需要删除小图片文件,可以添加额外的逻辑来检查文件大小。 以下是一个示例代…...
【mongodb】MongoDB的应用场景
目录 1.说明2.内容管理系统(CMS)2.1 场景描述2.2 MongoDB优势2.3 示例 3.实时分析与大数据3.1 场景描述3.2 MongoDB优势3.3 示例 4.移动应用后端4.1 场景描述4.2 MongoDB优势4.3 示例 5.游戏开发5.1 场景描述5.2 MongoDB优势5.3 示例 6.电子商务平台6.1 …...
使用 Swift 实现 LRU 缓存淘汰策略
📌 实现思路 一、核心目标 我们要实现一个缓存类: 支持通过 get(key) 获取缓存的值;支持通过 put(key, value) 写入缓存;缓存容量有限,当超过容量时要淘汰最久未使用的元素。 二、为什么用「哈希表 双向链表」 功…...
【面试篇】Dubbo
基础概念 问题:请简要介绍一下 Dubbo 是什么,它的主要用途是什么?答案:Dubbo 是阿里巴巴开源的高性能、轻量级的分布式服务框架,它致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案…...
01-STM32(介绍、工具准备、新建工程)p1-4
文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…...
关于termux运行pc交叉编译的aarch64 elf的问题
在Linux系统上交叉编译Nim程序到Android Termux环境需要特殊处理,以下是详细的解决方案: 问题根源分析 ABI不兼容 Android使用bionic libc而非标准glibc,直接编译的Linux ARM二进制无法直接运行 动态链接错误 默认编译会链…...
Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析
192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍:在发生改变时执行的操作(类似puppet通知机制) 示例: 当apache的配置文件发生改变时,apache服务才会重启…...
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
目录 问题描述解决方案为什么需要这样配置? 问题描述 在你的项目中,如果你遇到了以下错误信息: [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…...
006贪心——算法备赛
跨步问题 跳跃游戏|| 问题描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j &…...
Hyperlane:高性能 Rust HTTP 服务器框架评测
Hyperlane:高性能 Rust HTTP 服务器框架评测 在当今快速发展的互联网时代,选择一个高效、可靠的 HTTP 服务器框架对于开发者来说至关重要。最近,我在评估各种服务器框架性能时,发现了一个名为 Hyperlane 的 Rust HTTP 服务器库&a…...
解锁多元养生密码,开启活力生活
在车水马龙、节奏飞快的现代社会,亚健康像阴霾一样,笼罩着不少人的生活。不少上班族长期久坐,肩颈酸痛;有的人作息混乱,皮肤状态差。想要驱散这些健康阴霾,拥抱活力生活,不妨解锁下面这些多元养…...
如何安全地访问AWS
如何安全地访问AWS 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 如何安全地访问AWS当可以使用AWS Organizations & IAM Identity Center时理想的访问方式补充:什么是IAM IIC…...
机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处
在机器视觉行业,真正的技术突破往往诞生于深度思考与有效碰撞的辩证统一。建议采用「70%高质量独处30%精准社交」的钻石结构,构建可验证的技术能力护城河。记住:你的专业精度决定职业高度,而专注密度决定成长速度。 作为机器视觉工…...
Linux的 `sysctl` 命令 笔记250404
Linux的 sysctl 命令 笔记250404 sysctl 是 Linux 系统中用于 动态查看和修改内核运行时参数 的核心工具。它通过 /proc/sys/ 目录的虚拟文件系统接口,允许用户在不重启系统的前提下调整内核行为,涵盖网络、内存、文件系统等关键功能。 📜 核…...
prism WPF 导航
导航和浏览器的后退前进是一样的功能 项目结构 App.xaml.cs using Prism.Ioc; using Prism.Modularity; using Prism.Unity; using PrismWpfApp.ViewModels; using PrismWpfApp.Views; using System; using System.Collections.Generic; using System.Configuration; using S…...
Pytorch实现线性分类
目录 1.导包 2.加载数据 3.获取X与Y数据 4.将X,Y数据转化成tensor张量, tensor张量必须是二维数据 5.用封装的API实现线性分类 5.1导包 5.2建模-神经网络(二分类问题) 5.3定义损失函数 5.4定义优化器 5.5定义训练过程 5.6 计算正确…...
使用人工智能大模型kimi,如何免费高效制作PPT?
今天我们学习人工智能大模型kimi,如何免费协助我们做班会PPT。 免费手把手讲解视频,请访问 https://edu.csdn.net/learn/40402/666417 第一步使用谷歌浏览器,搜索Kimi,看到Kimi智能助手,点击,在Kimi对话框…...
YOLO学习笔记 | 基于YOLO与光流融合的车牌识别方法研究(附Matlab代码)
🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 基于YOLO与光流融合的车牌识别方法研究 🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 摘要 针对动态场景下车牌识别易受运动模糊影响的问题,提出结合YOLO目标检测与Lucas-Kanade…...
leetcode 数组总结篇
基础理论 数组:下标时从 0 开始的,地址是连续的,不能删除,只能覆盖;数组的实现:vector动态数组 常用操作 头文件 #include <iostream> #include <vector> #include <cstdint> // IN…...
CCF GESP C++编程 四级认证真题 2025年3月
C 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 A B B D D C D D B B B B A A C 1 单选题(每题 2 分,共 30 分) 第 1 题 关于下述代码,说法错误的是( )。 int multiply(int x, int …...
元宇宙浪潮下,前端开发如何“乘风破浪”?
一、元宇宙对前端开发的新要求 元宇宙的兴起,为前端开发领域带来了全新的挑战与机遇。元宇宙作为一个高度集成、多维互动的虚拟世界,要求前端开发不仅具备传统网页开发的能力,还需要掌握虚拟现实(VR)、增强现实&#…...