当前位置: 首页 > news >正文

分库分表 相关问题

问题:分库后,就有多个数据源需要,dbproxy 对机器做代理,一般需要lvs/f5 等手段来实现流量的负载均衡,跨机房可能需要dns分发,例如 mycat 阿里的主键。

就这个问题通过一问一答的方式解答

什么是 dbproxy,为什么要用 dbproxy?

dbproxy(数据库代理)可以理解为在应用层与数据库之间插入的一层代理服务,它的主要作用是“屏蔽后端数据库的复杂性”,对上层提供一个统一的访问接口。

屏蔽数据分片(sharding)的细节:
当数据库做了分库分表(sharding)之后,后端往往会出现多台数据库实例、多套数据源。
如果没有代理层,应用需要自己知道每条 SQL 或者每个主键应该访问哪一台数据库实例。
这样应用层会变得非常复杂,而且维护成本高。

统一的连接管理:
在没有代理的情况下,应用可能需要和多台数据库都建立连接,而且应用可能会开启大量连接,会导致数据库压力上升或者网络开销变大。引入代理层后,可以集中管理连接池,并对数据库连接进行复用、路由等操作。

读写分离、负载均衡:
如果有读写分离需求(主库写、从库读),dbproxy 可以帮我们根据 SQL 类型(读/写)自动路由到不同的数据库实例。此外,如果有多台从库,需要做负载均衡时,也可以在代理层实现。

此外,MyCat、阿里 DRDS(Alibaba 的分布式关系数据库服务)、ShardingSphere 等其实都是常见的分库分表中间件或数据库代理的一些解决方案。

为什么分库就需要多个数据源?

所谓“分库”,可以理解成将原本在单一数据库中的数据,按照一定的规则(比如按照用户 ID 范围、订单 ID 哈希等)拆分到多个数据库实例中。这样做的目的是:

水平扩展:单库的容量或性能达到瓶颈后,将数据分到多台机器可以提高整体吞吐量。
分摊压力:多台数据库服务器分担请求,能够缓解单库/单机的压力。

但是分库带来的一个直接后果就是后端出现了多个数据源:

数据源 1(库 A)
数据源 2(库 B)

数据源 N(库 N)

对应用来说,就不是只连一个“数据库”,而是多个。所以应用需要知道——“我这条 SQL 到底要去哪一个库执行?”。这时如果缺少一个统一的代理或中间件,应用就得自己写很多逻辑来进行路由判断:

if (用户ID % 2 == 0) {
走 数据源A
} else {
走 数据源B
}

而且当分库策略或者分库结构发生改变时,又得改业务逻辑。
所以大部分情况下,会加一个 dbproxy 或类似的中间件,把多库对应用‘伪装’成一个逻辑库,由它来做路由、聚合操作等。

为什么需要 LVS / F5 等做负载均衡?

假设你的 dbproxy 部署了多台实例,或者你的数据库实例本身也有多台,需要对外提供统一的访问地址。这时一般会需要一个负载均衡层,比如:
LVS(Linux Virtual Server):内核层级的负载均衡转发,性能高;
F5:硬件负载均衡设备,很多大公司可能用来做专业的流量调度。

它们可以提供一个虚拟 IP 或者域名,对外只暴露一个地址,而内部则把请求按一定的策略分发到真正的 dbproxy 或数据库后端。这样:

如果某个实例挂了,负载均衡可以自动摘除,保证服务的高可用。
可以让多个实例并行,达到横向扩展的效果。

为什么跨机房可能需要 DNS 分发?

当你的应用或服务需要跨机房(甚至跨地域)部署时,网络拓扑就更加复杂。常见有两种层面的流量调度手段:

在网络或四层/七层负载均衡上做流量转发:

比如同一个业务在北京、上海、广州都有机房,那么应用流量先走到一个全局的负载均衡设备或 GSLB(Global Server Load Balancing),再根据 IP 或者距离、延迟等策略把流量引导到就近的机房。

DNS 级别的负载均衡(域名解析层面):

比如你配置一个域名 db.xxx.com,通过 DNS 轮询或者智能 DNS 的方式,自动把请求解析到离用户最近或健康的机房 IP。
常见的做法叫做 GSLB + DNS 方案,比如一些云厂商的 “智能 DNS” 或者 Akamai、Cloudflare 的 GSLB 服务,都能帮你做全局流量调度。
好处是:不需要手动去改 IP,用户通过域名访问,不同区域的解析得到不同的 IP,可以就近接入,提高访问速度,降低延迟,而且当某个机房出现故障时,DNS 解析可以切换到其他机房 IP。

所以,跨机房的负载均衡往往涉及到 DNS 层面的全局调度(GSLB),并配合一定的健康检查或路由策略,使得应用或客户端能够快速接入最近且健康的机房。

关于主键冲突等问题?

分库分表之后,为了保证每台库中的主键(或 ID)全局唯一,通常需要在代理层或者ID 生成服务进行处理。例如:

雪花算法(Snowflake),保证在分布式场景中生成的 ID 全局唯一,而且还能保证有一定的递增趋势。

或者 MyCat/DRDS 自带一些主键策略,像 全局自增主键、多列联合主键 等方式,避免分片数据库中的主键冲突。

这类中间件/代理层也会在一定程度上统一管理或生成主键,屏蔽后面多数据源的冲突问题。

常见的全局唯一主键生成方案?

数据库自增序列/表

通过某个中心数据库表或者序列来获取全局递增的 ID。
缺点:中心化依赖,性能和可用性受限,单点故障风险。

UUID

系统随机生成 128 bit(通常存储为 36 字符的字符串)的标识。
优点:本地生成,无中心依赖。
缺点:存储空间大(影响索引性能),不适合有序索引,难以根据 ID 做路由分片。

Snowflake/雪花算法(Twitter 提出的经典算法)

64 位长整型ID,通常结构是时间戳 + 机器ID + 序列号。
优点:按时间递增,大多是本地生成(需正确配置机器ID、时钟等),性能好,索引有序。
缺点:需要分配 workerId,时钟回拨(时间不同步)会带来复杂度。

号段(Segment)/号段缓存(Leaf)方案

利用数据库的自增列或序列,一次分配一段区间(比如 1000 个ID的区间)给某个节点,节点本地生成 ID。
优点:减少数据库频繁访问,提升性能。
缺点:依赖号段中心库,遇到数据库故障时要有兜底策略。

Redis 原子自增

借助 Redis 的 INCR 命令进行分布式递增;
优点:性能高、实现简单。
缺点:Redis 挂了影响可用性,需要持久化或主从架构保证可靠性。

分布式协调(Zookeeper)

通过 ZK 的顺序节点特性生成全局有序 ID。
缺点:并发高时性能瓶颈明显,不是高并发场景的最佳选择。

实际生产中,雪花算法和号段方案是非常常见的选择。

具体实现细节:以雪花算法为例

雪花算法基础
Snowflake 算法生成的 64 位长整型,通常格式如下(不同实现可能略有差异):

| 1 bit 符号位 | 41 bit 时间戳(毫秒)| 10 bit 工作机器ID | 12 bit 序列号 |

符号位 (1 bit):通常是 0,不用。
时间戳 (41 bit):可以支撑约 69 年的毫秒级时间。
机器ID (10 bit):可以表示 1024 台机器/进程。
序列号 (12 bit):同一毫秒内可生成 4096 个 ID。

生成过程:

取当前时间戳(毫秒级),减去一个自定义起始时间(epoch),得到相对毫秒数。
拼接机器ID 和当毫秒内的序列号。
得到 64 位整形数字(在 Java 中通常是 long 类型)。

机器ID分配
通常会在配置中心或注册中心(Zookeeper、Nacos、Apollo 等)配置每台实例的唯一机器ID。
避免重复机器ID,否则会造成 ID 冲突。

处理时间回拨
如果因为服务器时间突然往回跳,会导致 ID 重复。
一种常见策略:
如果检测到当前时间小于上一次生成 ID 的时间,则等待或直接抛异常,让调用方进行重试;
或在机器ID 上再加一层备用标记,用以覆盖临时回拨(但实现较复杂)。

ID 的数据类型、在数据库如何存储?

无论是雪花算法、号段方案还是其他方式,最终在数据库里通常会用BIGINT类型(MySQL 等常见数据库都是 64 位整型)。为什么?

足够大:64 位可以容纳相当大的数字(9,223,372,036,854,775,807)。
索引效率:数字类型做主键索引效率更高(相比字符串),也有天然顺序(Snowflake 生成的ID大体单调递增)。
通用性好:大多数语言里都有 64 位整型类型(long 类型等)

CREATE TABLE user_order (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
amount DECIMAL(10,2),
create_time TIMESTAMP,

);

在插入数据时,应用侧(或中间件)已经生成好了全局唯一的 ID,直接插入即可。

分库分表/跨机房场景下的路由分片?

基于 ID 的分库分表

常见做法是基于 ID 取模(Hash)或区间进行路由。例如:

Hash 路由:库索引 = (id % 库数),表索引 = (id % 表数) 等;
区间路由:如 0 ~ 9999999 存在库0,10000000 ~ 19999999 存在库1,等等。

如果使用雪花算法,往往取其中的低位来做 id % n,这样分散度较好(也要注意避免某些位都是 0 导致不均衡)。

注意:如果将来要扩容分库数,从 2 库扩展到 4 库,ID 取模算法也要做迁移或映射,否则会导致数据不在预期的库中。可以考虑使用一致性哈希或中间件提供的线上扩容功能。

基于 ID 分配机房(跨机房存储)

如果每个机房都存储不相交的数据片,通常也可以通过取模或区间来决定某条数据应该进哪个机房。

例如:id % 2 == 0 存在北京机房,id % 2 == 1 存在上海机房。
或者更精细的分段,比如 ID 前 X 位代表机房编号,这在定制的雪花算法实现里也可以做到(将机器ID 部分的一部分位数当作“机房ID”+“机器ID”)。

但是这种做法会导致“跨机房 JOIN/查询”难度较大。如果一个用户的数据需要经常跨机房访问,就要考虑多机房同步或“同城多活”方案,复杂度会增加。

具体举例:MyCat / ShardingSphere / DRDS?

一些常见的分库分表中间件内部也会内置 ID 生成器,或者可以集成第三方 ID 生成服务,以实现全局主键:

MyCat

提供了多种主键策略,比如自增 ID、UUID、前缀自增等,但很多团队会结合雪花算法自己生成,然后写到 MyCat 路由。
路由规则可自定义(Groovy 表达式等)。

ShardingSphere

可以配置内置的雪花算法生成器 (Snowflake) 或者你自定义的算法;
在 sharding 配置中指定 keyGenerator 的实现类;
还可以定义分片算法(standard/inline/hint 等),在 inline 中写 t_order_$->{order_id % 4} 之类的表达式。

阿里 DRDS / PolarDB-X

本身也提供全局自增 ID和雪花算法两种模式,可以在控制台上进行配置。

如果使用雪花算法,ID 会不会重复?

只要每台机器的 workerId 唯一,时间戳不回拨,序列号在同毫秒内不溢出,就不会重复。
时间回拨可以通过“等待”或“抛异常重试”来处理。

ID 是不是严格递增?

雪花算法是趋势递增,同一毫秒内生成多个 ID,后者序列号更大,毫秒切换后则跳到新的时间区间。但由于多线程并发或多机并发,全局的顺序性不一定 100% 按数值递增,只有单机单毫秒内是顺序的。
如果要绝对顺序,可以用数据库序列或 ZK 顺序节点,但要考虑性能。

ID 占用多少存储空间?

64 位整型在 MySQL 中一般是 BIGINT (8 字节),相比 32 位INT 多 4 个字节,但是在实际生产中一般都能接受。

修改分库分表策略,ID 取模规则怎么变?

需要迁移数据或使用中间件提供的在线扩容功能;
在早期设计就要考虑可扩容,比如使用 “虚拟桶” 思路(先对 ID 取模 128,再把桶映射到实际库表),扩容时只需改变桶与库表的映射关系,减少大规模数据迁移。

跨机房多活场景,主键还会冲突吗?

如果每个机房都用各自的雪花算法,但机器ID 没做好区分,可能出现冲突;
需要为不同机房分配不同机房ID段,然后再在机房内部用机器ID + 序列号;
或者用统一的中心化 ID 服务(注意多活容灾)

订单表量很大,会不会因为主键太大影响性能?

通常使用雪花算法或递增 ID,都能让主键在InnoDB聚簇索引中大致有序插入,插入性能较好;
如果索引随机性大(如 UUID) 反而会导致数据页分裂、性能下降。

在分布式事务下 ID 是怎么处理的?

通常先拿 ID(本地生成或分布式 ID 服务),再进行插入,这样不依赖全局事务;
避免了“插入时再获取自增ID”,减少锁竞争和分布式事务带来的性能问题

公司订单量爆炸增长,单库性能不足,如何拆分数据库?

先做读写分离,缓解读压力。
如果还是不够,进一步垂直拆分(用户、订单等分不同数据库),再进行水平拆分(根据订单ID或用户ID哈希拆分)。
引入分库分表中间件(MyCat、ShardingSphere)或云厂商 DRDS/PolarDB-X,实现自动路由、主键生成。
同时考虑搜索、统计类场景,可能要引入ES、大数据平台等。

“为什么要用 MyCat / ShardingSphere,而不是自己在应用里写路由逻辑?”

避免业务代码与分库分表策略耦合,后期维护成本高。
中间件往往提供成熟的功能,如全局主键生成、分片路由、读写分离、分布式事务支持等。
便于在线扩容、迁移,减少对应用的改动。

问道 谈到多数据源 / 分库分表 / 负载均衡 / 跨机房 / DNS 分发 ?

业务背景:为什么要分库/分表,为什么要做负载均衡,为什么要跨机房。

技术实现:
分库分表中间件的核心功能(路由、读写分离、主键生成);
负载均衡(LVS/F5/HAProxy)的工作原理和如何部署;
DNS/GSLB 进行跨机房流量调度的思路。

关键挑战:分布式事务、数据一致性、主键冲突、迁移扩容、故障切换、DNS 缓存等。

实践经验:
是否有线上规模案例?遇到哪些坑,比如 SQL 分片错误、热点数据、跨机房延迟等。
如何进行监控与报警,比如 metrics、日志、慢 SQL。

扩展思考:
会不会继续往微服务、消息队列、大数据分析方向演进?如何结合 Spring Cloud 或云平台服务?

项目实践或线上真实数据(QPS、TPS、库规模、节点数、机房分布)

深挖底层原理,可以谈一些LVS 的四层转发机制 (DR/NAT 模式)、F5 处理 SSL 卸载、DB 中间件如何做 SQL 解析和执行计划等底层知识。

场景设计,你可以尝试描述如何保证当机房A挂了以后,机房B能够无缝顶上,涉及到数据同步、应用配置、DNS 切换、监控报警等全链路内容。

相关文章:

分库分表 相关问题

问题:分库后,就有多个数据源需要,dbproxy 对机器做代理,一般需要lvs/f5 等手段来实现流量的负载均衡,跨机房可能需要dns分发,例如 mycat 阿里的主键。 就这个问题通过一问一答的方式解答 什么是 dbproxy&…...

【Linux系统】进程间通信:实现命名管道通信

认识命名管道通信 命名管道通信的结构图示: 图中的 Server 和 Client 是不同的进程, Server 负责发送数据, Client 则是接收数据,进程之间通过命名管道进行数据通信 准备工作: 创建以下文件 Server.hpp #服务器类的…...

IT服务管理平台(ITSM):构建高效运维体系的基石

IT服务管理平台(ITSM):构建高效运维体系的基石 在数字化转型浪潮的推动下,企业对IT服务的依赖日益加深,如何高效管理和优化IT服务成为企业面临的重要课题。IT服务管理平台(ITSM)应运而生,以其系统化的管理方法和工具,助力企业实现IT服务的规范化、高效化和智能化。本…...

SSM开发(八) MyBatis解决方法重载

目录 一、Mybatis能否支持方法重载? 二、解决 MyBatis 方法重载问题的几种方法 解决方法一: (注解方式) 将重载方法命名为不同的方法名 解决方法二:采用@SelectProvider注解 解决方法三:使用 MyBatis 的 标签和动态 SQL 来构建不同参数的 SQL 查询 三、总结 一、Myb…...

AIGC时代的Vue或React前端开发

在AIGC(人工智能生成内容)时代,Vue开发正经历着深刻的变革。以下是对AIGC时代Vue开发的详细分析: 一、AIGC技术对Vue开发的影响 代码生成与自动化 AIGC技术使得开发者能够借助智能工具快速生成和优化Vue代码。例如,通…...

【实践案例】使用Dify构建文章生成工作流【在线搜索+封面图片生成+内容标题生成】

文章目录 概述开始节点图片封面生成关键词实时搜索主题参考生成文章详情和生成文章标题测试完整工作流运行测试结果 概述 使用Dify构建文章生成工作流,使用工具包括:使用 Tavily 执行的搜索查询,使用Flux生成封面图片,使用Stable…...

使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱

在开发 React Native 应用时,我们经常需要管理全局状态,比如用户信息、主题设置、网络状态等。而对于某些临时状态,例如 数据同步进行中的状态 (isSyncing),我们应该选择什么方式来管理它? 在项目开发过程中&#xff…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.26 统计圣殿:从描述统计到推断检验

1.26 统计圣殿:从描述统计到推断检验 目录 #mermaid-svg-3nz11PRr47fVfGWZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3nz11PRr47fVfGWZ .error-icon{fill:#552222;}#mermaid-svg-3nz11PRr47fVfGWZ…...

C# 添加、替换、提取、或删除Excel中的图片

在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观。此外,对于已有图片,你有事可能需要更新图片以确保信息的准确性,或者将Excel 中的图片单独保存,用于资料归档、备…...

商密测评题库详解:商用密码应用安全性评估从业人员考核题库详细解析(9)

1. 申请商用密码测评机构需提交材料考点 根据《商用密码应用安全性测评机构管理办法(试行)》,申请成为商用密码应用安全性测评机构的单位应当提交的材料不包括( )。 A. 从事与普通密码相关工作情况的说明 B. 开展测评工作所需的软硬件及其他服务保障设施配备情况 C. 管…...

开源项目Umami网站统计MySQL8.0版本Docker+Linux安装部署教程

Umami是什么? Umami是一个开源项目,简单、快速、专注用户隐私的网站统计项目。 下面来介绍如何本地安装部署Umami项目,进行你的网站统计接入。特别对于首次使用docker的萌新有非常好的指导、参考和帮助作用。 Umami的github和docker镜像地…...

模型I/O功能之模型包装器

文章目录 模型包装器分类LLM模型包装器、聊天模型包装器 截至2023年7月,LangChain支持的大语言模型已经超过了50种,这其中包括了来自OpenAI、Meta、Google等顶尖科技公司的大语言模型,以及各类优秀的开源大语言模型。对于这些大语言模型&…...

免杀国内主流杀软的恶意样本分析

目录下存在愤怒的小鸟.exe和fun.dll文件,最新版火绒,windows defender,腾讯电脑管家,360静态扫描都未发现恶意程序 动态执行,杀软也未拦截 上传到virustotal网站分析恶意程序,只有三个引擎检测出来 die分析…...

Cloudreve:Star22.3k,免费开源的网盘,支持多种存储方式,它允许用户快速搭建个人或团队的私有云存储服务。

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Cloudreve是一个基于Web的文件管理和分享系统,它允许用户快速搭建个人或团队的私有云存储服务。该项目以其高度的可定制性和灵活性&#x…...

【高内聚】设计模式是如何让软件更好做到高内聚的?

高内聚(High Cohesion)是指模块内部的元素紧密协作,共同完成一个明确且相对独立的功能。就像高效的小团队,成员们目标一致,相互配合默契。 低耦合(Loose Coupling)是指模块之间的依赖较少&#…...

第一个3D程序!

运行效果 CPP #include <iostream> #include <fstream> #include <string> #include <cmath>#include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/…...

基础项目实战——学生管理系统(c++)

目录 前言一、功能菜单界面二、类与结构体的实现三、录入学生信息四、删除学生信息五、更改学生信息六、查找学生信息七、统计学生人数八、保存学生信息九、读取学生信息十、打印所有学生信息十一、退出系统十二、文件拆分结语 前言 这一期我们来一起学习我们在大学做过的课程…...

【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状

目录 1. reshape 函数的用法 2. transpose 和 permute 函数的使用 4. squeeze 和 unsqueeze 函数的用法 5. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&am…...

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境

以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤&#xff0c;通常可以使用流复制&#xff08;Streaming Replication&#xff09;或基于Patroni等工具来实现高可用&#xff0c;以下以流复制为例&#xff1a; 安装PostgreSQL 配置软件源&#xff1a;可以使用O…...

记录一次Sqoop从MySQL导入数据到Hive问题的排查经过

个人博客地址:记录一次Sqoop从MySQL导入数据到Hive问题的排查经过 | 一张假钞的真实世界 问题描述 MySQL中原始数据有790W+的记录数,在Sqoop抽取作业成功的情况下在Hive中只有500W左右的记录数。 排查过程 数据导入脚本Log 通过Log可以发现以下信息: 该Sqoop任务被分解…...

什么是集成学习

什么是集成学习 集成学习是一种分布式机器学习框架&#xff0c;通过构建多个学习器并将其结合起来完成学习任务。由于在实际应用中单一的学习器往往不能达到理想的学习效果&#xff0c;且有时单一学习器会导致过拟合&#xff0c;因此使用多个学习器进行集成学习往往能够达到更好…...

VSCode+Continue实现AI辅助编程

Continue是一款功能强大的AI辅助编程插件&#xff0c;可连接多种大模型&#xff0c;支持代码设计优化、错误修正、自动补全、注释编写等功能&#xff0c;助力开发人员提高工作效率与代码质量。以下是其安装和使用方法&#xff1a; 一、安装VSCode 参见&#xff1a; vscode安…...

Springboot如何使用面向切面编程AOP?

Springboot如何使用面向切面编程AOP? 在 Spring Boot 中使用面向切面编程&#xff08;AOP&#xff09;非常简单&#xff0c;Spring Boot 提供了对 AOP 的自动配置支持。以下是详细的步骤和示例&#xff0c;帮助你快速上手 Spring Boot 中的 AOP。 1. 添加依赖 首先&#xff…...

ThreadLocal源码解析

文章目录 一、概述二、get()方法三、set()方法四、可能导致的内存泄漏问题五、remove六、思考&#xff1a;为什么要将ThreadLocalMap的value设置为强引用&#xff1f; 一、概述 ThreadLocal是线程私有的&#xff0c;独立初始化的变量副本。存放在和线程进行绑定的ThreadLocalMa…...

Maven的单元测试

1. 单元测试的基本概念 单元测试&#xff08;Unit Testing&#xff09; 是一种软件测试方法&#xff0c;专注于测试程序中的最小可测试单元——通常是单个类或方法。通过单元测试&#xff0c;可以确保每个模块按预期工作&#xff0c;从而提高代码的质量和可靠性。 2.安装和配…...

深度学习 Pytorch 深层神经网络

在之前已经学习了三种单层神经网络&#xff0c;分别为实现线性方程的回归网络&#xff0c;实现二分类的逻辑回归&#xff08;二分类网络&#xff09;&#xff0c;以及实现多分类的softmax回归&#xff08;多分类网络&#xff09;。从本节开始&#xff0c;我们将从单层神经网络展…...

【python】三帧差法实现运动目标检测

三帧差法是一种常用的运动目标检测方法&#xff0c;它通过比较连续三帧图像之间的差异来检测运动物体。这种方法尤其适用于背景变化较小的场景。 目录 1 方案 2 实践 ① 代码 ② 效果图 1 方案 具体步骤如下&#xff1a; ① 读取视频流&#xff1a;使用cv2.VideoCapture()…...

机器人抓取与操作经典规划算法(深蓝)——2

1 经典规划算法 位姿估计&#xff1a;&#xff08;1&#xff09;相机系位姿 &#xff08;2&#xff09;机器人系位姿 抓取位姿&#xff1a;&#xff08;1&#xff09;抓取位姿计算 &#xff08;2&#xff09;抓取评估和优化 路径规划&#xff1a;&#xff08;1&#xff09;笛卡…...

WGCLOUD服务器资源监控软件使用笔记 - Token is error是什么错误

[wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:90: 主机监控信息上报server开始 [wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:99: 主机监控信息上报server返回信息: {"result":"Token is error"} 这个错误是因为agent配置的wgToken和serv…...

在排序数组中查找元素的第一个和最后一个位置(力扣)

一.题目介绍 二.题目解析 使用二分进行查找 2.1处理边界情况 如果数组为空&#xff0c;直接返回 [-1, -1]&#xff0c;因为无法找到目标值。 int[] ret new int[2]; ret[0] ret[1] -1; if (nums.length 0) return ret; 2.2查找左端点&#xff08;目标值开始位置&#…...

Kafka的消息协议

引言 在学习MQTT消息协议的时候我常常思考kafka的消息协议是什么&#xff0c;怎么保证消息的可靠性和高性能传输的&#xff0c;接下来我们一同探究一下 Kafka 在不同的使用场景和组件交互中用到了多种协议&#xff0c;以下为你详细介绍&#xff1a; 内部通信协议 Kafka 使用…...

Vue 3 30天精进之旅:Day 09 - 组合式API

在Vue 3中&#xff0c;组合式API&#xff08;Composition API&#xff09;是一个引入的新特性&#xff0c;它为开发者提供了一种更灵活的方式来构建和组织组件。与传统的选项API相比&#xff0c;组合式API更注重逻辑的复用和逻辑的组合&#xff0c;让我们更容易处理大型应用中的…...

Day28(补)-【AI思考】-AI会不会考虑自己的需求?

文章目录 AI会不会考虑自己的需求&#xff1f;一、**技术本质&#xff1a;深度≠理解**二、**传播机制&#xff1a;热搜如何制造幻觉**三、**伦理考量&#xff1a;为何必须"撇清"**关键结论 AI会不会考虑自己的需求&#xff1f; 让思想碎片重焕生机的灵魂&#xff1a…...

JavaScript 进阶(下)

原型 what 首先&#xff0c;构造函数通过原型分配的函数是所有对象所 共享的。 然后&#xff0c;JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象 这个对象可以挂载函数&#xff0c;对象实…...

selenium自动化测试框架——面试题整理

目录 1. 什么是 Selenium&#xff1f;它的工作原理是什么&#xff1f; 2. Selenium 主要组件 3. 常见 WebDriver 驱动 4. Selenium 如何驱动浏览器&#xff1f; 5. WebDriver 协议是什么&#xff1f; 6. Page Object 模式与 Page Factory 7. 如何判断元素是否可见&#x…...

CF1098F Ж-function

【题意】 给你一个字符串 s s s&#xff0c;每次询问给你 l , r l, r l,r&#xff0c;让你输出 s s s l , r sss_{l,r} sssl,r​中 ∑ i 1 r − l 1 L C P ( s s i , s s 1 ) \sum_{i1}^{r-l1}LCP(ss_i,ss_1) ∑i1r−l1​LCP(ssi​,ss1​)。 【思路】 和前一道题一样&#…...

数据库备份、主从、集群等配置

数据库备份、主从、集群等配置 1 MySQL1.1 docker安装MySQL1.2 主从复制1.2.1 主节点配置1.2.2 从节点配置1.2.3 创建用于主从同步的用户1.2.4 开启主从同步1.2.4 主从同步验证 1.3 主从切换1.3.1 主节点设置只读&#xff08;在192.168.1.151上操作&#xff09;1.3.2 检查主从数…...

电脑要使用cuda需要进行什么配置

在电脑上使用CUDA&#xff08;NVIDIA的并行计算平台和API&#xff09;&#xff0c;需要进行以下配置和准备&#xff1a; 1. 检查NVIDIA显卡支持 确保你的电脑拥有支持CUDA的NVIDIA显卡。 可以在NVIDIA官方CUDA支持显卡列表中查看显卡型号是否支持CUDA。 2. 安装NVIDIA显卡驱动…...

【Unity3D】实现横版2D游戏——攀爬绳索(简易版)

目录 GeneRope.cs 场景绳索生成类 HeroColliderController.cs 控制角色与单向平台是否忽略碰撞 HeroClampController.cs 控制角色攀爬 OnTriggerEnter2D方法 OnTriggerStay2D方法 OnTriggerExit2D方法 Update方法 开始攀爬 结束攀爬 Sensor_HeroKnight.cs 角色触发器…...

JS 时间格式大全(含大量示例)

在 JS 中&#xff0c;处理时间和日期是常见的需求。无论是展示当前时间、格式化日期字符串&#xff0c;还是进行时间计算&#xff0c;JavaScript 都提供了丰富的 API 来满足这些需求。本文将详细介绍如何使用 JavaScript 生成各种时间格式&#xff0c;从基础到高级&#xff0c;…...

opencv裁剪视频区域

import cv2 # 打开视频文件 video_path input.mp4 cap cv2.VideoCapture(video_path) # 获取视频的帧率、宽度和高度 fps int(cap.get(cv2.CAP_PROP_FPS)) width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 定义裁剪区…...

C++ deque(1)

1.deque介绍 deque的扩容不像vector那样麻烦 直接新开一个buffer 不用重新开空间再把数据全部移过去 deque本质上是一个指针数组和vector<vector>不一样&#xff0c;vector<vector>本质上是一个vector对象数组&#xff01;并且vector<vector>的buffer是不一…...

MapReduce概述

目录 1. MapReduce概述2. MapReduce的功能2.1 数据划分和计算任务调度2.2 数据/代码互定位2.3 系统优化2.4 出错检测和恢复 3. MapReduce处理流程4. MapReduce编程基础参考 1. MapReduce概述 MapReduce是面向大数据并行处理的计算模型、框架和平台:   1. 基于集群的高性能并行…...

DOM操作中childNodes与children的差异及封装方案

引言 在JavaScript的DOM操作中&#xff0c;childNodes和children是开发者常用的属性&#xff0c;但它们在浏览器中的行为差异可能导致兼容性问题。尤其是在处理空白符&#xff08;如换行符\n&#xff09;时&#xff0c;某些浏览器&#xff08;如Chrome和Edge&#xff09;会将空…...

在线课堂小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

分布式系统架构怎么搭建?

分布式系统架构 互联网企业的业务飞速发展&#xff0c;促使系统架构不断变化。总体来说&#xff0c;系统架构大致经历了单体应用架构—垂直应用架构—分布式架构—SOA架构—微服务架构的演变&#xff0c;很多互联网企业的系统架构已经向服务化网格&#xff08;Service Mesh&am…...

大模型知识蒸馏技术(2)——蒸馏技术发展简史

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl2006年模型压缩研究 知识蒸馏的早期思想可以追溯到2006年,当时Geoffrey Hinton等人在模型压缩领域进行了开创性研究。尽管当时深度学习尚未像今天这样广泛普及,但Hinton的研究已经为知识迁移和模…...

C++初阶 -- 泛型编程(函数模板、类模板)入门

目录 一、泛型编程 1.1 介绍 二、函数模板 2.1 函数模板的概念 2.2 函数模板的格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.4.1 隐式实例化 2.4.2 显式实例化 2.5 模板参数的匹配原则 三、类模板 3.1 类模板的使用格式 3.2 类模板的实例化 一、泛型编程 在有…...

[EAI-027] RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…...

MongoDB常见的运维工具总结介绍

MongoDB 提供了一些强大的运维工具&#xff0c;帮助管理员进行数据库监控、备份、恢复、性能优化等操作。以下是一些常见的 MongoDB 运维工具及其功能介绍&#xff1a; 1. MongoDB Atlas 功能&#xff1a;MongoDB Atlas 是 MongoDB 官方的云托管数据库服务&#xff0c;它提供…...