小集合 VS 大集合:MySQL 去重计数性能优化
小集合 VS 大集合:MySQL 去重计数性能优化
- 前言
- 一、场景与问题 🔎
- 二、通俗执行流程对比
- 三、MySQL 执行计划解析 📊
- 四、性能瓶颈深度剖析 🔍
- 五、终极优化方案 🏆
- 六、总结
前言
📈 测试结果:
在对百万级 indicator_log 表进行 去重计数 的测试中,我们发现:
-
SQL1(先去重再计数)耗时 ≈ 0.9s,
-
SQL2(直接 COUNT(DISTINCT))耗时 ≈ 1.0s。
🔍 核心原因:
-
SQL1 利用物化临时表批量去重,I/O 可控;
-
SQL2 在内存哈希/排序中实时去重,内存与 CPU 负载更重,并触发更多 spill-to-disk 。
最终,通过覆盖式联合索引、内存参数调优及Loose Index Scan等手段,能让两者在大数据量下都达到毫秒级。
一、场景与问题 🔎
-
表结构示例(示例参数):
CREATE TABLE indicator_log (obj_id INT, -- 评估对象 ID (:obj_id)plan_id INT, -- 评估计划 ID (:plan_id)del_flag TINYINT, -- 逻辑删除标志 (:del_flag)INDEX idx_plan (plan_id), -- 单独索引 (:plan_id)INDEX idx_delflag (del_flag) -- 单独索引 (:del_flag) );
-
需求:统计某评估计划中、未被逻辑删除的唯一对象数。
-
SQL1(子查询版):
SELECT COUNT(obj_id) FROM (SELECT DISTINCT obj_idFROM indicator_logWHERE plan_id = 312 AND del_flag = 0 ) AS t;
-
SQL2(直接版):
SELECT COUNT(DISTINCT obj_id) FROM indicator_log WHERE plan_id = 312 AND del_flag = 0;
二、通俗执行流程对比
-
SQL1:阶段化去重
-
子查询去重
SELECT DISTINCT obj_id FROM indicator_log WHERE plan_id = :plan_id AND del_flag = :del_flag;
-
⚙️ 数据库先从大表中抽取所有唯一的
obj_id
,并将结果写入“小篮子”(物化临时表), -
此阶段只做一次去重,借助外部排序或分区哈希批量处理,I/O 可控、稳定
-
-
外层快速计数
SELECT COUNT(obj_id) FROM (… 上一步子查询 … ) AS t;
-
⚡ 在“小篮子”上做
COUNT
,不涉及任何去重逻辑, -
仅需对已去重的小结果集扫描一次,CPU 和 I/O 开销极低
-
优势:先缩小数据规模,再聚合,适合大数据量场景。
-
-
SQL2:一次性去重
SELECT COUNT(DISTINCT obj_id) FROM indicator_log WHERE plan_id = :plan_id AND del_flag = :del_flag;
-
实时扫描去重
-
🏃 MySQL 在全表扫描过程中,边读取每行边将
obj_id
插入内存哈希表或进行内存排序, -
每次插入都需判断是否已存在,CPU 和内存压力陡增 。
-
-
矿山级 Hash / 排序
-
🔄 若待去重行数超过
sort_buffer_size
或tmp_table_size
,会频繁 spill-to-disk, -
导致磁盘 I/O 大幅增加,性能抖动明显
-
劣势:一次性完成去重+计数,对内存依赖高,遇大数据量易触发磁盘溢写。
-
-
索引合并(Index Merge)附加开销 ⚙️
-
在只有单列索引
idx_plan(plan_id)
与idx_delflag(del_flag)
时,MySQL 必须:-
分别走两个索引扫描;
-
对扫描结果做行号交集(
Index Merge Intersection
) ;
-
-
双重扫描 + 交集 也为两种写法都增加了额外 I/O 和 CPU 消耗。
-
三、MySQL 执行计划解析 📊
-
SQL1 的 EXPLAIN
EXPLAIN ANALYZE SELECT COUNT(obj_id) FROM (SELECT DISTINCT obj_idFROM indicator_logWHERE plan_id = 312AND del_flag = 0 ) AS t;
-
执行计划解析
-
聚合操作:计算
obj_id
的总数,执行成本和实际时间较低。 -
表扫描:查询对
t
表进行了全表扫描,扫描了约 280,269 行,实际执行时间为 902 毫秒。 -
物化:将中间结果存储在内存中,避免重复计算,时间与表扫描相同。
-
临时表:查询创建了临时表进行去重,去重操作与物化时间相同。
-
过滤条件:通过
del_flag = 0
和plan_id = 312
过滤数据,执行时间较长,返回 165,849 行。 -
交集操作:从两个索引扫描中交集数据,执行时间较长。
-
索引扫描:
-
使用
idx_plan
扫描符合plan_id = 312
的数据,执行非常快。 -
使用
idx_delflag
扫描符合del_flag = 0
的数据,执行较慢,因为扫描了大量数据。
-
-
总结
1. Index Merge Intersection ├─ idx_plan (plan_id=:plan_id) └─ idx_delflag (del_flag=:del_flag) 📚 :contentReference[oaicite:3]{index=3} 2. Temporary table with deduplication 📚 :contentReference[oaicite:4]{index=4} 3. Table scan on <temporary> 4. Aggregate: COUNT(obj_id)
-
交集扫描:分别走两个单列索引,再取交集,得到 N 条候选行
-
物化去重:写入临时表后批量排序去重,I/O 可控
-
快速计数:对临时小表直接
COUNT
,耗时极低。
查询的瓶颈主要在于对
del_flag
的过滤和交集操作,建议优化索引或减少数据量。 -
-
SQL2 的 EXPLAIN
EXPLAIN ANALYZE SELECT COUNT(DISTINCT obj_id) FROM indicator_log WHERE plan_id = 312AND del_flag = 0;
-
执行计划解析
-
聚合操作:
count(distinct indicator_log.obj_id)
,计算obj_id
的去重总数,执行成本和时间较低,实际执行时间为 964 毫秒。 -
过滤条件:查询对
indicator_log
表进行了过滤,条件为del_flag = 0
和plan_id = 312
。过滤后返回了 165,849 行数据,执行时间为 341 到 838 毫秒。 -
交集操作:通过
INTERSECT
操作结合两个索引扫描结果,筛选符合条件的数据。执行时间为 341 到 837 毫秒,结果包含 165,849 行。 -
索引扫描:
-
使用
idx_plan
索引扫描plan_id = 312
的数据,执行非常快,时间为 0.148 到 85.3 毫秒,扫描了 279,786 行。 -
使用
idx_delflag
索引扫描del_flag = 0
的数据,执行较慢,时间为 0.051 到 426 毫秒,扫描了大约 1.5 百万行。
-
-
总结
1. Index Merge Intersection ├─ idx_plan └─ idx_delflag 2. Filter predicates 3. Aggregate: COUNT(DISTINCT obj_id) 🔄
-
同样交集得出 N 行;
-
内存去重:逐行插入 HashSet 或排序,边去重边计数
-
瓶颈:大量内存操作易触发 spill-to-disk 或频繁 GC,性能抖动明显
查询主要瓶颈在于对
del_flag = 0
条件的过滤,因为这个条件扫描了大量数据。可以通过优化索引或减少数据量来提高查询性能。 -
四、性能瓶颈深度剖析 🔍
- 索引合并(Index Merge)开销
- 单列索引需做两次范围扫描并交集,I/O 与 CPU 成本陡增 。
- 覆盖式联合索引可一步到位,跳过合并与回表,大幅缩短扫描范围 。
- 去重策略对比
特性 | 临时表批量去重 (SQL1) | 内存哈希/排序 (SQL2) |
---|---|---|
实现方式 | 外部排序 + 临时表 I/O | HashSet/排序,内存优先 |
稳定性 | 高(I/O 可控) | 受限于 tmp_table_size /sort_buffer_size |
典型场景 | 中大规模去重 | 小数据量、快速响应 |
- I/O vs 内存权衡
-
SQL1:I/O 适当增加,换取稳定去重;
-
SQL2:依赖内存,当数据量超出配置时表现不稳 。
- 统计信息影响
-
高选择性 (
plan_id
) 与 低选择性 (del_flag
) 配合不当,容易让优化器选错计划; -
保持准确统计信息,定期
ANALYZE TABLE
是必备流程 。
五、终极优化方案 🏆
-
覆盖式联合索引 ✨
CREATE INDEX idx_opt ON indicator_log(plan_id, del_flag, obj_id);
-
一次扫描完成所有条件过滤:
plan_id
→del_flag
→ 取出obj_id
,无需再做索引合并或回表 -
支持索引覆盖(Covering Index),减少磁盘 I/O,聚合与去重都可在索引层直接完成
-
-
内存与临时表参数调优 🔧
SET GLOBAL tmp_table_size = 256M; SET GLOBAL max_heap_table_size = 256M; SET GLOBAL sort_buffer_size = 64M;
-
增大内存阈值,让大多数临时表都在内存中完成,避免频繁落盘
-
提高排序缓冲区,减少
COUNT(DISTINCT)
或ORDER BY
时的 spill-to-disk
-
-
启用 Loose Index Scan 🚀
SET SESSION optimizer_switch = 'loose_index_scan=on';
-
对于
COUNT(DISTINCT obj_id)
,MySQL 5.6+ 可以利用“松散索引扫描” -
在覆盖索引场景下,只需依次跳读不同值的第一条记录,即可高效去重
-
-
物化视图 / 预聚合表 🗄️
-
写时维护:在插入/更新阶段,通过触发器或应用逻辑同步维护
(plan_id, unique_obj_count)
-
定时批处理:夜间或低峰期,将去重结果写入专用聚合表,查询时直接读取,无需在线去重
六、总结
-
🧺 SQL1 = 小集合计数
先执行子查询:
SELECT DISTINCT obj_id …
,把所有唯一值抽取到“小篮子”中(临时表或物化表),然后再对这“小篮子”做COUNT(obj_id)
。拆分去重和计数两步,使得 I/O 可控、压力分散,性能更稳定 。 -
⚡ SQL2 = 大集合实时计数
直接在大表上执行
COUNT(DISTINCT obj_id)
,MySQL 需要边扫描边在内存中维护哈希表或做外部排序来去重并计数。这种“一次性”实时去重对内存和 CPU 依赖极高,一旦超过内存阈值就会频繁 spill-to-disk,性能抖动明显 。
👉 真·性能优化,绝非单点发力,而是「SQL 写法 + 执行计划 + 索引设计 + 系统参数」四位一体,才能在海量数据面前保持高效稳定
相关文章:
小集合 VS 大集合:MySQL 去重计数性能优化
小集合 VS 大集合:MySQL 去重计数性能优化 前言一、场景与问题 🔎二、通俗执行流程对比三、MySQL 执行计划解析 📊四、性能瓶颈深度剖析 🔍五、终极优化方案 🏆六、总结 前言 📈 测试结果: 在…...
什么是模块化区块链?Polkadot 架构解析
原文:https://polkadot.com/blog/understanding-modular-blockchains/ 作者:Joey Prebys 编译:OneBlock 区块链的构建方式有很多种,而不同的架构选择会直接影响性能、可扩展性和开发者体验。随着行业的发展,单体区块…...
C++翻转数相乘 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
目录 C++翻转数相乘 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、 推荐资料 1、C++资料 2、Scratch资料 3、Python资料 C++翻转数相乘 2024年信息素养大赛 C++复赛真题 一、题目要求 1、编程实现 假设一个…...
Go 语言中的 `select` 语句详解
select 是 Go 语言中处理通道(Channel)操作的一个强大控制结构,它允许 goroutine 同时等待多个通道操作。下面我将全面详细地解释 select 语句的各个方面。 基本语法 select 语句的基本语法如下: select { case <-ch1:// 如果从 ch1 成功接收数据&…...
Nacos简介—4.Nacos架构和原理二
大纲 1.Nacos的定位和优势 2.Nacos的整体架构 3.Nacos的配置模型 4.Nacos内核设计之一致性协议 5.Nacos内核设计之自研Distro协议 6.Nacos内核设计之通信通道 7.Nacos内核设计之寻址机制 8.服务注册发现模块的注册中心的设计原理 9.服务注册发现模块的注册中心的服务数…...
Web服务器技术选型指南:主流方案、核心对比与策略选择
Web服务器技术选型指南:主流方案、核心对比与策略选择 一、主流Web服务器概览 在当今互联网架构中,Web服务器承担着处理HTTP请求、管理资源分配和保障服务稳定性的核心职责。根据应用场景和技术特性的不同,主流的Web服务器可分为以下五类&a…...
Git和Gitlab的部署和操作
一。GIT的基本操作 1.GIT的操作和查看内容 [rootmaster ~]# yum install git -y [rootmaster ~]# git config --list:查看所有配置 2.GIT仓库初始化 [rootmaster ~]# mkdir /gittest:创建目录 [rootmaster ~]# cd /gittest/:进入目录 [rootm…...
【Git】初始Git及入门命令行
目录 为什么学习 Git 这么重要? 1. 安装 Git 2. 配置 Git 3. 创建本地 Git 仓库 1. git初始化远程仓库: git init 2. 就是要新增两个必须要配置的选项: name 和 email 3. 查看当前本地仓库的配置情况: git config -l 4. 删…...
自然语言to SQL的评估
一、怎么进行一个自然语言to SQL评估? 1.DB——准备可用的数据表 2.准备问题集,自然语言|正确的预期SQL 3.大模型执行完成的SQL 4.Table.json——一个存储表格数据或者数据库表结构信息的 JSON 文件。当前是存储的表结构信息的,存储数据库…...
详解React Fiber架构中,reconcile阶段的具体工作流程
在 React Fiber 架构里,协调(Reconcile)阶段处于虚拟 DOM(VDOM)与实际 DOM 渲染之间,主要承担着把 VDOM 转化为 Fiber 节点树、开展 Diff 比较并标记节点变化的任务。下面详细阐述协调阶段的具体工作流程&a…...
迅雷精简绿色融合版【高速下载版】12.1.9.2870【11.2.2.1716】【20250426】
迅雷Thunder 11官方版会提示敏感需升级不能使用,本人制作的迅雷 12.1.9.2870【11.2.2.1716】精简绿色融合版是在11.2.2.1716版本的基础上制作的,实际版本号显示为12.1.9.2870,不是真正意义的迅雷12.1.9.2870精简绿色版,本实质上还…...
决策树相关案例
全流程 以下是一个更复杂、全流程的决策树和随机森林示例,不仅包括模型训练和预测,还涵盖了数据预处理、超参数调优以及模型评估的可视化。我们依旧使用鸢尾花数据集,并额外引入 GridSearchCV 进行超参数调优,使用 matplotlib 进…...
AI音频核爆!Kimi开源“六边形战士”Kimi-Audio,ChatGPT语音版?
音频处理领域的天花板被撕开了。 刚刚,kimi 发布全新通用音频基础模型 Kimi-Audio,这款由月之暗面(Moonshot AI)推出的开源模型,在 24 小时内收获 3.2 万星标,不仅以 1.28% 词错率刷新语音识别纪录…...
vscode vue 的插件点击组件不能跳转到文件问题解决
ctrl shift p 打开命令行,搜索 更改语言模式 选择第二项 选择 vue 现在可以了...
二叉树的前序、中序和后序遍历:详解与实现
1. 前序遍历(Pre-order Traversal) 1.1 定义 前序遍历的顺序是:先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。 1.2 访问顺序 对于任意节点: 访问根节点。 递归遍历左子树。 递归遍历右子…...
5、Rag基础:RAG 专题
RAG 简介 什么是检索增强生成? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强…...
FISCO BCOS 智能合约开发详解
一、FISCO BCOS 智能合约开发概览 FISCO BCOS 是一个国产开源联盟链平台,支持两种类型的智能合约:FISCO BCOS Documentation Solidity 合约:与以太坊兼容,使用 Solidity 语言编写,适用于灵活的业务逻辑开发。 预…...
Linux操作系统从入门到实战(四)Linux基础指令(下)
Linux操作系统从入门到实战(四)Linux基础指令(下) 前言一、date 指令二、cal 指令三、find 指令四、which 指令五、whereis 指令六、alias 指令七、grep 指令八、zip/unzip 指令九、tar 指令(重要)十、bc 指…...
使用 LLM助手进行 Python 数据可视化
在数据科学中,数据可视化是一项至关重要的任务,旨在揭示数据背后的模式和洞察,并向观众传达这些信息。然而,在编程语言(如 Python)中创建有洞察力的图表有时可能会耗时且复杂。本文介绍了一种借助 AI 助手&…...
docker安装jenkins自动化测试
#搭建gitlab docker pull gitlab/gitlab-ce docker run -d\--hostname localhost \-p 443:443 -p 80:80 -p 2222:22 \--name gitlab \-v /myproject/gitlab/config:/etc/gitlab \-v /myproject/gitlab/logs:/var/log/gitlab \-v /myproject/gitlab/data:/var/opt/gitlab \gitla…...
Python3:面向对象编程
这里写目录标题 🧩 面向对象编程:让代码化身为积木世界一、核心概念:类与对象二、四大基石:面向对象的核心特性1️⃣ 封装(Encapsulation):包装复杂性,提供简单接口2️⃣ 继承(Inheritance):站在…...
数据可视化 —— 饼图
一、饼图的所有常用使用场景 饼图是一种直观展示数据占比关系的图表,适用于以下常见场景: 1. 市场与商业分析 市场份额:展示不同品牌/产品在市场中的占有率。 收入构成:分析公司各业务线或产品的收入占比。 客户分布࿱…...
OpenLayers WebGL与3D渲染 (进阶一)
1. WebGL概述 WebGL是一种JavaScript API,它基于OpenGL ES 2.0/3.0标准,允许在不使用插件的情况下在兼容的Web浏览器中呈现高性能的交互式3D和2D图形。在地理信息系统(GIS)领域,WebGL为地图渲染和空间数据可视化提供了强大的性能支持。 1.1…...
ARP协议(地址解析协议)
ARP协议是用来把IP地址转换成MAC地址的。 因为在局域网里,真正通信靠的是MAC地址,但我们平时只知道目标的IP地址,所以需要一个办法把IP地址变成MAC地址 —— 这个过程就是靠ARP完成的。 举个超简单的例子: 你电脑要发数据给192.1…...
深度学习常见框架:TensorFlow 与 PyTorch 简介与对比
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、为什么需要深度学习框架? 2、框架的发展背…...
iOS 类与对象底层原理
iOS 类与对象底层原理 文章目录 iOS 类与对象底层原理探索对象本质objc_setProperty 源码cls与类的关联原理联合体isa的类型isa_t 原理探索initIsa方法通过setClass方法中的shiftcls来验证绑定的一个流程通过 isa & ISA_MSAK通过object_getClass通过位运算 类&类的结构…...
Babel、core-js、Loader之间的关系和作用全解析
在现代前端开发中,Babel、polyfill(如 core-js)和 Loader 是非常常见又容易混淆的几个概念。为了彻底搞明白它们的作用、关系和使用方法,下面一篇文章详细梳理。 一、Babel的作用 Babel 是一个 JavaScript 的编译器,主…...
总线位宽不变,有效数据位宽变化的缓存方案
总线位宽不变,有效数据位宽变化的缓存方案 譬如总线位宽为64bit,但是有时候只有高32bit有效,有时只有低32bit有效,有时64bit都有效。总线上收到的数据要先缓存到FIFO中,那么这个FIFO的宽度和深度如何设置呢࿱…...
若依脱敏功能升级:接口返回想脱就脱,想不脱就不脱(实现灵活可控制的数据脱敏)
若依原生框架中的脱敏功能不够灵活(默认超级管理员不脱敏,其他则脱敏)。 有时候,我们有些接口想要脱敏,但是有些接口又不想脱敏。(例如列表查询的时候脱敏。修改的时候,不想数据脱敏࿰…...
【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
问题描述 在Azure Redis服务中,如何实现只允许Azure App Service访问呢? 问题解答 Azure Redis 开启 防火墙的功能,并在防火墙中添加上App Service的出口IP地址即可。两步即可实现此目的! 1)查询 App Service 的出口IP…...
如何解决无训练数据问题:一种更为智能化的解决方案
手动标注数据真的很费时间,而且买数据集又贵得要命,还不一定能完全符合你的需求。但这里有个令人兴奋的好消息,为啥不用 AI 来解决这个问题呢? 别再依赖传统方法了,你可以用像 LLM(大型语言模型)和图像生成器这样的 AI 工具,为你的特定目标创建合成训练数据。如今有那…...
AI 应用同质化:一场看不见的资源 “吞噬战”
大家好,我是涛涛,今天聊聊令人担心的事情。 一、同质化的“繁荣”背后 当ChatGPT在2022年掀起全球AI热潮时,中国互联网行业迅速进入“All in AI”模式。根据艾瑞咨询数据,2023年国内AI应用市场新增注册企业超2.3万家,…...
Java + Spring Boot + MyBatis获取以及持久化sql语句的方法
在Java的Spring Boot项目中结合MyBatis获取实际执行的SQL语句,可以通过以下几种方法实现: 方法一:配置MyBatis日志级别 通过调整日志级别,MyBatis会输出执行的SQL语句及参数,适用于快速调试。 修改application.prope…...
「浏览器即OS」:WebVM技术栈如何用Wasm字节码重构冯·诺依曼体系?
一、冯诺依曼架构的维度坍塌 1. 传统计算模型的能量耗散 浏览器执行效率瓶颈分析: 操作x86指令周期Wasm指令周期能效比提升矩阵乘法3894.2x内存访问1234x系统调用120012100x 二、WebVM的量子纠缠架构 1. 浏览器内核的重构 // 基于WASI的系统调用处理 #[no_mangl…...
Vue3项目目录结构规范建议
以下是一个推荐的 Vue 3 项目目录结构规范,适用于中大型项目并遵循最佳实践: 基础目录结构 bash src/ ├─ assets/ # 静态资源 │ ├─ images/ # 图片文件 │ ├─ fonts/ # 字体文件 │ └─ styles/ …...
【计算机视觉】CV实战项目- Four-Flower:基于TensorFlow的花朵分类实战指南
深度解析Four-Flower:基于TensorFlow的花朵分类实战指南 项目概述与技术背景技术栈组成 完整实战流程环境配置1. 基础环境安装2. 项目环境搭建3. 环境验证 数据准备模型架构解析训练过程优化1. 训练配置2. 关键参数建议3. 训练监控 常见问题与解决方案1. 内存不足错…...
4.27 JavaScript核心语法+事件监听
JavaScript负责网页的行为(交互行为) JS基本语法: 引用方式 变量&常量&数据类型: alert()标签输出弹出框,如以上代码会输出true。 函数: 自定义对象: 属性方法行为 JS中的全局变量是window。 js…...
于键值(KV)的表
基于键值(KV)的表 将行编码为键值(KVs) 索引查询:点查询和范围查询 在关系型数据库中,数据被建模为由行和列组成的二维表。用户通过SQL表达他们的意图,而数据库则神奇地提供结果。不那么神奇的…...
Matlab算例运行
1. 使用终端命令运行算例: 2. 如果点击Run 按钮就是会一直报错,所以直接改成终端运行算例...
package.json script 中的 prepare 脚本的作用是什么
在 package.json 的 scripts 中,prepare 脚本是一个特殊的生命周期脚本,主要作用和执行时机如下: prepare 脚本的作用和执行时机 执行时机: 在执行 npm publish 命令之前运行。在执行不带参数的 npm install 命令时运行ÿ…...
图论---最大流(Dinic)
最大流一定是阻塞流,阻塞流不一定是最大流。 阻塞流---从起点到终点的管道已经阻塞了。 时间复杂度: 一般情况:O(n2m)O(n2m)(但实际运行效率较高,尤其在稀疏图上)。 使用当前弧优化后,效率接近…...
FastAPI系列06:FastAPI响应(Response)
FastAPI响应(Response) 1、Response入门2、Response基本操作设置响应体(返回数据)设置状态码设置响应头设置 Cookies 3、响应模型 response_model4、响应类型 response_classResponse派生类自定义response_class 在“FastAPI系列0…...
双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图
引言 Intel RealSense系列相机因其出色的深度感知能力和灵活的配置选项,在机器视觉与应用中得到广泛应用。大家在后期的slam学习中,无论是对算法本身的性能要求还是实验的泛化性都有一定的要求,那么公开的数据集如kitti、tum、Eourc不能满足…...
【MCP-2】MCP是什么,利用智普大模型在MaxKB中调用自己开发的MCP服务
在上一篇【MCP-1】MCP是什么,从DEMO入手文章中我们介绍了MCP是什么、他能干啥,以及简单的Demo示例等,这篇文章我们使用MaxKB这个工具,利用智普大模型,看看MCP到底怎么用。 创建SSE协议的MCP服务 在上篇文章中的Demo是…...
Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导
Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导 Allegro升级到了23.1的时候,支持单独关闭铜皮显示 ,如下图 如何仅关闭shape的显示,单独显示线,具体操作如下 点击setup...
《从分遗产说起:JS 原型与继承详解》
“天天开心就好” 先来讲讲概念: 原型(Prototype) 什么是原型? 原型是 JavaScript 中实现对象间共享属性和方法的机制。每个 JavaScript 对象(除了 null)都有一个内部链接指向另一个对象,这…...
【Part 2安卓原生360°VR播放器开发实战】第二节|基于等距圆柱投影方式实现全景视频渲染
《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...
Android——RecyclerView
RecyclerView的使用 依赖 implementation("androidx.recyclerview:recyclerview:1.4.0")activity_recyclerview.xml <androidx.recyclerview.widget.RecyclerViewandroid:id"id/rv"android:layout_width"match_parent"android:layout_height…...
跨域问题(Cross-Origin Problem)
跨域问题(Cross-Origin Problem)是浏览器出于安全考虑,对不同源(协议、域名、端口)之间的资源访问进行限制而引发的限制。以下是详细解释: 1. 核心定义 跨域:当一个网页(源A&#x…...
阿里云直接对系统云盘扩容
阿里云直接对系统云盘扩容 登录阿里云控制台,进入ECS实例管理页面,检查目标磁盘的容量是否已更新为扩容后的数值。通过SSH远程连接服务器,使用命令 lsblk 或 fdisk -l 查看当前磁盘分区和容量,确认扩容后的物理磁盘已被系统识别。…...