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

MongoDB伪分布式部署(mac M2)

1. 序言

  • 本博客是上一博客的进阶版:mac M2安装单机版 MongoDB 7.x,上一博客可以看做是单机、单节点部署MongoDB
  • 本博客将介绍单机、多服务部署MongoDB,实际就是伪分布式部署

2. 副本集(Replica Set)方式部署

2.1 什么是副本集?

  • 多节点部署、主从部署等其实都是为了 MongoDB 的高可用,支持数据多副本、读写分离等
  • 较新版本的MongoDB Master/slave 被废弃,通过副本集提供高可用和数据冗余
    "msg":"Master/slave replication is no longer supported"
    
  • 一个副本集由多个节点组成,其中一个节点是主节点(Primary),其余是从节点(Secondary)
  • 主节点处理所有的写操作,从节点复制主节点的数据并可以处理读操作(如果启用了读偏好)
  • 副本集的特点:
    • 高可用性: 如果主节点发生故障,从节点会自动选举一个新的主节点。
    • 数据冗余:数据在多个节点上复制,提供数据冗余。
    • 读扩展:可以配置从节点处理读操作,以减轻主节点的负载。

2.2 副本集部署

2.2.1 启动3个MongoDB服务

  • 在本机以前台进程的方式启动3个 MongoDB 服务,且指定副本集为 rs0

    mongod --replSet rs0 --dbpath /Users/bytedance/mongodb11/data --port 27031 --bind_ip_allmongod --replSet rs0 --dbpath /Users/bytedance/mongodb12/data --port 27032 --bind_ip_allmongod --replSet rs0 --dbpath /Users/bytedance/mongodb13/data --port 27033 --bind_ip_all
    
  • 如果想通过配置文件部署,服务1的配置文件如下

    # 数据存储相关配置
    storage:dbPath: /Users/bytedance/mongodb2/datajournal:enabled: true# 网络相关配置
    net:port: 27030bindIp: 0.0.0.0  # 允许从所有IP地址访问# 副本集相关配置
    replication:replSetName: "rs0"# 日志相关配置
    systemLog:destination: filelogAppend: truelogRotate: renamepath: /Users/xxx/mongodb11/log/mongo.log# 进程管理相关配置
    processManagement:fork: true  # 以守护进程方式运行(后台运行)# 安全相关配置
    security:authorization: disabled  # 关闭用户认证
    

2.2.2 初始化副本集

  • 通过mongosh登录访问其中一个服务:

    mongosh --port 27032
    
  • 执行如下命令初始化副本集合:

    rs.initiate({_id: "rs0",members: [{ _id: 0, host: "localhost:27031" },{ _id: 1, host: "localhost:27032" },{ _id: 2, host: "localhost:27033" }]
    })
    
  • 执行rs.status() 验证副本集状态

    rs0 [direct: primary] test> rs.status()
    {set: 'rs0',... # 其他信息省略members: [{_id: 0, # initiate 时指定的idname: 'localhost:27031',health: 1,state: 2,stateStr: 'SECONDARY', # 从节点... # 其他信息省略},{_id: 1,name: 'localhost:27032',health: 1,state: 1,stateStr: 'PRIMARY', # 主节点... # 其他信息省略},{_id: 2,name: 'localhost:27033',health: 1,state: 2,stateStr: 'SECONDARY', # 从节点... # 其他信息省略}],ok: 1,... # 其他信息省略
    }
    
  • 还可以通过 rs.isMaster() 查看当前访问的服务是不是primary节点

    rs0 [direct: primary] test> rs.isMaster()
    {... # 其他信息省略hosts: [ 'localhost:27031', 'localhost:27032', 'localhost:27033' ],setName: 'rs0',setVersion: 1,ismaster: true, # 当前访问的是primary节点(服务)secondary: false,primary: 'localhost:27032',me: 'localhost:27032',.. # 其他信息省略readOnly: false,... # 其他信息省略isWritablePrimary: true # 只能通过primary节点写入
    }
    

2.3 副本集中数据的读写

  • 从上面的信息就可以看出, 副本集的可以支持设置读写偏好、支持读写分离

  • 例如,isWritablePrimary: true 只能在primary节点写入,若在非primary节点插入数据将报错

    Uncaught:
    MongoBulkWriteError[NotWritablePrimary]: not primary
    
  • 在primary节点插入数据

    db.test_data.insertMany([{ name: "Bob", age: 25, sex: "male", city: "Los Angeles" },{ name: "Carol", age: 28, sex: "female", city: "Chicago" },{ name: "Dave", age: 35, sex: "male", city: "San Francisco" }
    ])
    
  • 在任意节点查询数据

    db.test_data.find({'name':"Bob"})
    

3. 部署分片(Sharding)集群

3.1 什么是分片?

  • 在数据存储系统中,除了支持副本集(多副本存储全量数据),还支持分片(Sharding),MongoDB也不例外
  • 分片是 MongoDB 提供的一种水平扩展机制,用于将数据分布在多个服务器上
  • 分片具备以下特性:
    • 水平扩展:通过将数据分布在多个分片上,解决单个服务器的存储和性能限制。
    • 负载均衡:数据和请求可以在多个分片之间均匀分布。
    • 高可用性:结合副本集使用,每个分片可以是一个副本集,从而提供高可用性。

3.2 副本集 vs 分片

  • 相对副本集,分片会按照某种规则将数据拆分成多个split,每个split存储到相应的分片
  • 以销售数据为例,形象化比喻:
    • 副本集就是一个机房有多台机器,每台机器都将存储中国市场的销售数据
    • 分片就是存在多个机房,每个机房存储只存储所在区域的销售数据。例如,华北机房只存储华北地区的销售数据,西南机房只存储西南地区的销售数据
    • 同时,为了提供高可用和数据冗余,分片存储时,每个机房需要有多台机器,支持多副本储存该区域的销售数据
    • 也就是说,一个分片就是一个副本集,分片内部通过副本集实现高可用和数据冗余机制

3.3 部署分片集群(副本集与分片的结合使用)

  • 分片集群由配置服务器(Config Servers)、分片服务器(Shards)、和路由服务器(mongos)组成
    • 配置服务器作为副本集:配置服务器存储集群的元数据,为了确保配置服务器的高可用性,配置服务器也通常设置为一个副本集
    • 每个分片作为一个副本集:在分片集群中,每个分片通常是一个副本集。这意味着每个分片不仅能存储数据的一部分,还能提供高可用性和数据冗余。
    • 路由服务器(mongos):mongos不存储数据,而是作为路由器将客户端请求路由到适当的分片,可以部署多个mongos实例以提供高可用性和负载均衡

3.3.1 部署配置服务器

  • 使用如下命令,在本地启动三个配置服务器,注意提前创建好data目录

    • --configsvr:表示这是一个配置服务器

    • --replSet rs0:设置副本集,配置服务器的本质是一个副本集

      
      mongod --configsvr --replSet rs0 --dbpath /Users/xxx/mongodb1/data/configdb --port 27019 --bind_ip_allmongod --configsvr --replSet rs0 --dbpath /Users/xxx/mongodb2/data/configdb --port 27020 --bind_ip_allmongod --configsvr --replSet rs0 --dbpath /Users/xxx/mongodb3/data/configdb --port 27021 --bind_ip_all
      
  • 访问某个配置服务,初始化副本集

    mongosh --port 27019 # 访问配置服务rs.initiate({_id: "rs0",configsvr: true,members: [{ _id: 0, host: "localhost:27019" },{ _id: 1, host: "localhost:27020" },{ _id: 2, host: "localhost:27021" }]
    })
    
  • PS: 若以后台服务方式启动,上述启动方式对应的配置文件如下

    storage:dbPath:  /Users/xxx/mongodb1/data/configdbjournal:enabled: true
    # 网络相关配置
    net:port: 27010bindIp: 0.0.0.0  # 允许从所有IP地址访问
    # 复制集相关配置
    replication:replSetName: "rs0"
    # 设置role:分片集群中的配置服务器
    sharding:clusterRole: "configsvr"
    # 日志相关配置
    systemLog:destination: filelogAppend: truelogRotate: renamepath: /Users/xxx/mongodb1/log/configd/mongo.log
    # 进程管理相关配置
    processManagement:fork: true  # 以守护进程方式运行(后台运行)
    # 安全相关配置
    security:authorization: disabled  # 关闭用户认证
    

3.3.2 部署分片服务器

shard1
  • 使用如下命令,在本地启动三个分片服务器,注意提前创建好data目录

    mongod --shardsvr --replSet shard1 --dbpath /Users/bytedance/mongodb1/data/shard --port 27022 --bind_ip_allmongod --shardsvr --replSet shard1 --dbpath  /Users/bytedance/mongodb2/data/shard --port 27023 --bind_ip_allmongod --shardsvr --replSet shard1 --dbpath  /Users/bytedance/mongodb3/data/shard --port 27024 --bind_ip_all
    
  • 访问其中某个分片服务器,初始化分片信息

    mongosh --port 27022rs.initiate({_id: "shard1",members: [{ _id: 0, host: "localhost:27022" },{ _id: 1, host: "localhost:27023" },{ _id: 2, host: "localhost:27024" }]
    })
    
shard2
  • 使用如下命令,在本地启动三个分片服务器,注意提前创建好data目录

    mongod --shardsvr --replSet shard2 --dbpath /Users/bytedance/mongodb1/data/shard2 --port 27025 --bind_ip_allmongod --shardsvr --replSet shard2 --dbpath  /Users/bytedance/mongodb2/data/shard2 --port 27026 --bind_ip_allmongod --shardsvr --replSet shard2 --dbpath  /Users/bytedance/mongodb3/data/shard2 --port 27027 --bind_ip_all
    
  • 访问其中某个分片服务器,初始化分片信息

    mongosh --port 27025rs.initiate({_id: "shard2",members: [{ _id: 0, host: "localhost:27025" },{ _id: 1, host: "localhost:27026" },{ _id: 2, host: "localhost:27027" }]
    })
    

3.3.4 部署mongos

  • 先创建好mongos所需的相关目录

    mkdir /Users/xxx/mongos
    cd /Users/xxx/mongos
    mkdir data log etc
    
  • 在etc目录下创建mongos的配置文件,mongos-config.yaml

    net:bindIp: 0.0.0.0port: 27017sharding:configDB: rs0/localhost:27019,localhost:27020,localhost:27021
    
  • 以前台方式启动mongos

    mongos --config /Users/xxx/mongos/etc/mongos-config.yaml
    
  • 访问mongos,添加分片(之前部署好的分片服务器)

    mongosh --port 27017sh.addShard("shard1/localhost:27022,localhost:27023,localhost:27024")
    sh.addShard("shard2/localhost:27025,localhost:27026,localhost:27027")
    
  • 通过 sh.status() 查看shard信息

    # 关键信息
    shards
    [{_id: 'shard1',host: 'shard1/localhost:27022,localhost:27023,localhost:27024',state: 1,topologyTime: Timestamp({ t: 1727872634, i: 3 })},{_id: 'shard2',host: 'shard2/localhost:27025,localhost:27026,localhost:27027',state: 1,topologyTime: Timestamp({ t: 1727939236, i: 4 })}
    ]
    

3.5 启用分片

3.5.1 启用数据库分片和集合分片

  • 启用数据库分片和集合分片

    use admin # 一定要先切换到admin,
    sh.enableSharding("test")use test
    sh.shardCollection("test.test_data", {user_id: 1}) # user_id作为分片的key
    
  • 验证是否成功开启集合分片

    use test
    db.test_data.getShardDistribution()
    
  • 若有如下输出,说明开启成功

3.5.2 插入数据并查看

  • 插入100条数据

    # 数据示例 -- user_id: id000001; name: name1
    for (let i = 1; i <= 2000; i++) {let user_id = `id${String(i).padStart(6, '0')}`;  let name = `name${i}`;  db.test_data.insertOne({ user_id: user_id, name: name });
    }
    
  • 执行sh.status()查看分片信息,但数据只分布到了shard2,要么是集群部署存在问题,要么跟公司的 “chatGPT” 回答一样

    • 分片键选择不当:如果分片键的值分布不均匀,可能会导致数据集中在一个分片上。例如,如果您的分片键是一个递增的字段(如时间戳或自增 ID),那么所有新插入的数据都会集中在同一个分片上
    • 数据量不足:在数据量较小的情况下,MongoDB 可能不会立即将数据分布到多个分片上。MongoDB 需要一定的数据量来决定何时进行分片 (笔者倾向于该原因)
       ... # 其他信息省略,可以看到 'test.test_data' 集合成功开启了分片collections: {'test.test_data': {shardKey: { user_id: 1 },unique: false,balancing: true,chunkMetadata: [ { shard: 'shard2', nChunks: 1 } ],chunks: [{ min: { user_id: MinKey() }, max: { user_id: MaxKey() }, 'on shard': 'shard2', 'last modified': Timestamp({ t: 1, i: 0 }) }],tags: []}}
    
  • PS: 公司的 “chatGPT” 还给出了其他的查看分片信息的方法,但无任何输出

    use config
    db.chunks.find({ ns: "testDB.test_data" }).sort({ min: 1 }).pretty()
    

3.5.3 在shard2的各服务器查询数据

  • 由于上面的集合只分布在shard2,现在连接shard2的任意服务器,执行如下查询命令

    use test
    db.test_data.find({'name':"name1"})
    
  • 均能从shard2的每个服务器查到数据,这也说明了,shard2分片自身就是一个副本集


4. 后记

  • 网上查了很多MongoDB多副本部署,大部分的版本都比较低,还有 master/slave 之类的配置
    • MongoDB主从复制(master–>slave)环境搭建
    • mongodb的主从同步配置:实战详细版(建议收藏)
  • 笔者依靠公司的chartGPT完成部署后,发现这篇文章是最靠谱的:MongoDB数据库之主从复制配置实战
  • 其他一些感悟
    • AI真强大: 此次部署完全依靠公司的chartGPT,不懂就问、出问题也问,最后磕磕绊绊完成了部署
    • 磨刀不误砍柴工: 部署分片集群时,一开始没有为认真了解分片集群的架构,不知道副本集是存储元数据的,导致部署失败

相关文章:

MongoDB伪分布式部署(mac M2)

1. 序言 本博客是上一博客的进阶版&#xff1a;mac M2安装单机版 MongoDB 7.x&#xff0c;上一博客可以看做是单机、单节点部署MongoDB本博客将介绍单机、多服务部署MongoDB&#xff0c;实际就是伪分布式部署 2. 副本集(Replica Set)方式部署 2.1 什么是副本集&#xff1f; …...

Golang | Leetcode Golang题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; func fourSumCount(a, b, c, d []int) (ans int) {countAB : map[int]int{}for _, v : range a {for _, w : range b {countAB[vw]}}for _, v : range c {for _, w : range d {ans countAB[-v-w]}}return }...

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域&#xff0c;[ComfyUI]Flux以其独特的虚实结合技术&#xff0c;已经成为艺术家和设计师们手中的利器。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品&#xff0c;经典中文元素通过AI技术重现&#xff0c;包…...

Linux 系统 nvm 管理node无法使用

文章目录 一、报错说明二、报错原因三、解决办法四、验证 一、报错说明 centos7服务器使用nvm安装的node之后&#xff0c;只要使用npm或者node&#xff0c;均会出现以下问题。 npm -v node: /lib64/libm.so.6: version GLIBC_2.27 not found (required by node) node: /lib64…...

信号处理快速傅里叶变换(FFT)的学习

FFT是离散傅立叶变换的快速算法&#xff0c;可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的&#xff0c;但是如果变换到频域之后&#xff0c;就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外&#xff0c;FFT可以将一个信号的频谱提取出来&am…...

vue3项目el-table表格行内编辑加输入框校验

核心点 1. el-form的model属性需要跟el-form-item的prop要对应 2. el-form的model属性绑定tableData 3. el-form-item的prop绑定字符串&#xff1a;scope.index.列名&#xff08;注意有个点&#xff09; 4. el-form-item需要单独设置rules属性 代码示例 <el-form :mod…...

【Node.js】内置模块FileSystem的保姆级入门讲解

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;Vscode 本文代码都经由博主PleaSure乐事实操后得出&#xff0c;可以放心使用。 1.FileSystem介绍 Node.js 的 fs&#xff08;filesystem&#xff09;模块是一个核心模块&#xff0c…...

问:LINUXWINDOWS线程CPU时间如何排序?

Linux 在Linux上&#xff0c;你可以使用ps命令结合sort命令来查看和排序进程或线程的CPU使用时间。 查看进程的CPU使用时间并按时间排序 使用ps命令的-o选项可以自定义输出格式&#xff0c;-e选项表示显示所有进程&#xff0c;--sort选项用于排序。 ps -e -o pid,tid,comm,…...

postgresql-重复执行相同语句,试试 prepare!

文章目录 每次你向 PostgreSQL 发送 SQL 语句时&#xff0c;数据库都必须对其进行解析(parse)。解析虽然很快&#xff0c;但如果同样的语句被解析一千次&#xff0c;这种操作累积起来可能会占用大量时间&#xff0c;而这些时间本可以用于处理其他事务。为避免这种情况&#xff…...

wpf加载带材料的3D模型(下载的3D预览一样有纹理)

背景&#xff1a;最近真的是忙啊&#xff0c;累出汁水了 整体效果&#xff1a; 放大可以看清砖头&#xff1a; 1、需要自己准备好3D模型&#xff0c;比如我这里是下载的这里的3D Warehouse&#xff0c;下载Collada File格式文件 2、解压可以看到一个model.dae和材料的文件夹&…...

【k8s之深入理解调度】调度框架扩展点理解

参考自 K8s 调度框架设计与 scheduler plugins 开发部署示例&#xff08;2024&#xff09; 调度插件扩展点 等待调度阶段PreEnqueuePod 处于 ready for scheduling 的阶段。 内部工作原理&#xff1a;sig-scheduling/scheduler_queues.md。在 Pod 被放入调度队列之前执行的插…...

音视频基础理论

1. 音频基础 1.1 音频基本概念 1.1 频率&#xff1a;声波的频率&#xff0c;即声音的音调&#xff0c;人类听觉的频率(音调)范围为20Hz--20KHz 1.2 振幅&#xff1a;即声波的响度&#xff0c;通俗的讲就是声音的高低&#xff0c;一般男生的声音振幅(响度)大于女生。 1.3 波形…...

《江苏科技大学学报(自然科学版)》

《江苏科技大学学报&#xff08;自然科学版&#xff09;》&#xff08;双月刊&#xff0c;国内外公开发行&#xff09;是由江苏省教育厅主管、江苏科技大学主办的理工类学术期刊&#xff0c;1986年创刊&#xff0c;国际刊号&#xff1a;ISSN1673-4807&#xff0c;国内刊号&…...

C++初学者指南-5.标准库(第二部分)–随机数生成

C初学者指南-5.标准库(第二部分)–随机数生成 文章目录 C初学者指南-5.标准库(第二部分)–随机数生成基本概念例子统一随机数布尔值&#xff08;“抛硬币”&#xff09;正态分布具有独立概率的整数 怎么做种子引擎使用自定义生成器 shuffle算法分布类型概述通用接口均匀分布采样…...

Unity2017在安卓下获取GPS位置时闪退的解决办法

在Unity使用低功耗蓝牙通信&#xff08;BLE&#xff09;需要用到设备的位置信息。但是调用Input.location.Start()程序会闪退。 解决办法&#xff1a;调用原生安卓接口。 参见《Unity2021通过aar调用Android方法》编写一个aar插件gpsplugin&#xff0c;在插件中提供获取GPS位…...

OpenGL ES 索引缓冲区(4)

OpenGL ES 索引缓冲区(4) 简述 本节会介绍索引缓冲区&#xff0c;索引缓冲区和顶点缓冲区类似&#xff0c;也是显存上的一段内存&#xff0c;只不过上面的数据用处不同&#xff0c;索引缓冲区故名思义里面的数据是用于索引&#xff0c;主要作用是用于复用顶点缓冲区里的数据。…...

01:(寄存器开发)点亮一个LED灯

寄存器开发 1、单片机的简介1.1、什么是单片机1.2、F1系列内核和芯片的系统架构1.3、存储器映像1.4、什么是寄存器 2、寄存器开发模板工程3、使用寄存器点亮一个LED4、代码改进15、代码改进2 本教程使用的是STM32F103C8T6最小系统板&#xff0c;教程来源B站up“嵌入式那些事”。…...

.Net 6.0 Windows平台如何判断当前电脑是否联网

最近在工作中开发需要判断当前电脑是否联网的需求&#xff0c;在网上找了一个调用window API来判断本机是否联网。具体请看下面介绍&#xff1a; 1.方法一&#xff08;调用winAPI&#xff09; [DllImport("wininet")] public static extern bool InternetGetConnec…...

微软准备了 Windows 11 24H2 ISO “OOBE/BypassNRO“命令依然可用

Windows 11 24H2 可能在未来几周内开始推出。 微软已经要求 OEM 遵循新的指南准备好 Windows 11 24H2 就绪的驱动程序&#xff0c;并且现在已经开始准备媒体文件 (.ISO)。 OEM ISO 的链接已在微软服务器上发布。 一个标有"X23-81971_26100.1742.240906-0331.ge_release_sv…...

MacOS 终端执行安装 Brew

在配置新的 Mac 环境时&#xff0c;如果你发现终端中无法识别 brew 命令&#xff0c;可以按照以下步骤进行解决。 步骤 1&#xff1a;确保网络稳定 为了避免安装过程中出现中断&#xff0c;建议使用 Wi-Fi 或有线连接&#xff0c;不推荐使用移动网络。 步骤 2&#xff1a;打…...

YOLO X Layout在新闻行业的应用:版面自动排版

YOLO X Layout在新闻行业的应用&#xff1a;版面自动排版 每天清晨&#xff0c;当大多数人还在睡梦中时&#xff0c;新闻编辑部的排版编辑已经开始了一天中最紧张的工作&#xff1a;将记者们连夜赶制的稿件、摄影师捕捉的精彩瞬间、设计师制作的图表&#xff0c;精准地排列在有…...

Qwen3-Reranker-0.6B效果实测:轻量级模型如何让搜索结果更智能

Qwen3-Reranker-0.6B效果实测&#xff1a;轻量级模型如何让搜索结果更智能 1. 重排序模型的价值与挑战 在构建搜索系统时&#xff0c;我们常常面临一个困境&#xff1a;基于嵌入模型的向量检索能快速返回大量候选结果&#xff0c;但真正相关的文档可能埋没在列表中。就像用渔…...

四轴飞行器飞控编写教程

四轴飞行器飞控编写教程 写在前面 这份教程专门为零基础的初学者编写。如果你刚接触四轴飞行器不知道从何下手&#xff0c;听说过PID控制但不理解它是怎么工作的&#xff0c;看过飞控代码但感觉像天书一样看不懂&#xff0c;想自己动手写飞控但不知道从哪里开始——那么这份教程…...

Spring IoC 与 DI 核心详解 —— 基于 XML 配置:Bean 创建、依赖注入与生命周期全解析(Spring系列1)

在 Java 企业级开发中&#xff0c;Spring 框架凭借其强大的 IoC&#xff08;控制反转&#xff09; 与 DI&#xff08;依赖注入&#xff09; 能力&#xff0c;成为了事实上的标准。本文将带你从最原始的 XML 配置开始&#xff0c;逐步过渡到纯注解开发&#xff0c;并深入剖析 Io…...

程序员副业指南:从技术到变现全攻略

CSDN程序员副业图谱技术文章大纲副业图谱概述副业图谱的定义与背景CSDN平台在程序员副业中的作用副业图谱的核心价值&#xff08;技能变现、职业发展等&#xff09;常见程序员副业类型技术博客与内容创作&#xff08;如CSDN专栏、公众号&#xff09;在线教育与课程开发&#xf…...

面向对象分析模型深入分析

面向对象分析模型深入分析 面向对象分析(Object-Oriented Analysis, OOA)是系统分析师在需求阶段的核心工作方法。它强调从问题域中的客观实体出发,以“对象”为基本单元建立业务模型,而不是从功能或数据流出发。下面从核心概念、三大模型、建模流程到实战案例进行全面解析…...

镜像视界|AI空间计算重塑公安实战:从“找人”到“锁人”的智能体革命——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统

&#x1f4d8; 镜像视界&#xff5c;AI空间计算重塑公安实战&#xff1a;从“找人”到“锁人”的智能体革命 ——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统 一、实战痛点&#xff1a;为什么公安仍停留在“找人阶段” 在当前公安实战中&#xff0c…...

手把手教你用Matlab/Simulink实现PMSM FOC控制(附SVPWM算法代码)

从零构建PMSM磁场定向控制&#xff1a;Matlab/Simulink实战指南 在工业驱动和电动汽车领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;凭借其高功率密度和卓越效率成为首选。而磁场定向控制&#xff08;FOC&#xff09;作为当前最先进的电机控制策略&#xff0c;能实…...

如何用免费工具3步完成华硕游戏本终极性能调校:完整指南

如何用免费工具3步完成华硕游戏本终极性能调校&#xff1a;完整指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

LeetCode 152. Maximum Product Subarray 题解

LeetCode 152. Maximum Product Subarray 题解 题目描述 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 示例 1&#xff1a; 输入&#xff1a;n…...