MongoDB小课堂: 复制集高可用架构全解析与实战指南

4.13Windows搭建MongoDB分片以及复制集 文章目录前言一、理解分页和复制集二、使用步骤1.D:\software\MongoDB\data建立data和log2.读入数据总结 前言 以下内容感谢展权的帮助嘻嘻 一、理解分页和复制集 链接: 关于mongoDB的相关概念理解. 理解了原理和语法的意思再去理解代码会更加便捷去完成作业 二、使用步骤 1.D:\software\MongoDB\data建立data和log 注意: 以下链接参考自身电脑mongodb的安装位置来写路径 我的bin路径是D:\software\MongoDB\bin 我将 阅读详情

背景:复制集的核心价值与架构设计


1 ) 高可用性与故障转移

  • 当单节点故障时(如硬件损坏/服务中断),复制集自动将客户端请求重定向至健康节点
    • 确保数据安全性与业务连续性
  • 数据冗余机制:多节点存储相同数据副本,避免单点故障导致服务中断
  • 心跳检测:节点间每2秒互发心跳,超时10秒触发故障转移

2 ) 数据安全与容灾能力

  • 异步数据复制确保多节点数据一致性
  • 支持跨地域部署,防范区域性灾难
  • 备份恢复机制:主节点数据损坏时,可通过副节点快速还原

3 ) 请求优化与分流

  • 低延迟访问:副节点部署在靠近客户端的地理位置,处理读取请求以降低延迟(需客户端显式指定读取选项)
  • 功能隔离:多个副节点可分工处理不同负载(如:2个节点服务客户端请求,1个节点处理内部数据报告任务)

3 ) 性能优化与负载均衡

数据复制
数据复制
客户端
主节点-写操作
从节点-读操作
从节点-报告生成

或下面这样描述

Oplog同步
Oplog同步
客户端
主节点-写操作
副节点-地理就近读
专用节点-报表生成
  • 读写分离:
    • 主节点(Primary):独占写操作(增/删/改)
    • 副节点(Secondary):支持readPreference读请求分流,并可承担数据分析、报表生成等后台任务
  • 低延迟访问:客户端请求优先路由至物理位置最近的节点
  • 专用节点:分离数据分析、报表生成等后台任务

4 ) 节点规模约束

节点类型数量上限约束原因
总节点数50心跳请求O(n²)增长
投票节点7选举通信资源消耗
最小有效节点数3避免选举僵局

要点小结

  • 复制集通过多节点冗余实现高可用,读写分离优化性能,最小3节点部署避免选举僵局,心跳检测(2秒/次)支撑秒级故障转移。

复制集工作机制详解


1 )节点规模限制与设计约束

节点类型数量限制约束原因
总节点数≤50心跳请求数呈O(n²)增长
投票节点≤7选举通信开销
最小有效节点数3避免选举僵局(多数决原则)

2 ) 节点角色定义

链式复制
客户端
主节点-Primary
副节点-Secondary 1
副节点-Secondary 2
副节点-Secondary 3
  • 主节点(Primary):唯一接收写操作,默认处理读请求
  • 副节点(Secondary):异步复制数据,支持读分流
  • 节点数量限制:
    • 最大支持50个节点,但仅≤7个节点具投票权(避免选举通信资源过载)(O(n2)O(n^2)O(n2)复杂度)
    • 投票机(Arbiter):
      • 无数据存储,仅参与投票
      • 解决偶数节点平票问题:确保奇数投票节点数,避免选举平票问题
      • 启动命令:mongod --replSet mySet --arbiter
  • 选举触发条件
    • 主节点心跳超时、服务崩溃或下线
    • 复制集初始化或新节点加入
  • 专业术语
    • 任期号(Term):全局单调递增计数器,标识选举轮次
    • 优先级(Priority):可配置节点优先级,高优先级节点优先发起选举
  • 心跳请求优化
    • 通信成本:节点数NNN的心跳请求数为N(N−1)N(N-1)N(N−1),N>7N>7N>7时资源消耗显著增加

关于投票机

启动Arbiter节点示例 
mongod --replSet mySet --port 27019 --dbpath /arbiter-data --arbiter 
  1. 核心特性:
    • 不存储实际数据,仅参与投票
    • 无法成为主节点
    • 解决偶数节点集群的选举僵局问题
  2. 使用场景:
    • 需保证投票节点数为奇数,但无需额外数据副本时
  3. 设计目的
    • 解决偶数节点投票平局问题,不增加数据存储开销
  4. 核心特性
    • 不存储实际数据,仅参与投票。
    • 不可成为主节点(因无数据副本)。
    • 示例场景:3节点复制集中,2个存储数据的副节点 + 1个投票机节点。

节点健康监控体系

// 节点心跳检测模拟逻辑 
setInterval(() => {
  clusterNodes.forEach(node  => {
    const lastHeartbeat = Date.now()  - node.lastSeen; 
    if (lastHeartbeat > HEARTBEAT_TIMEOUT) {
      markNodeUnhealthy(node.id); 
      initiateFailoverProcedure(); // 触发故障转移
    }
  });
}, HEARTBEAT_INTERVAL);

检测参数

  • 频率:每2秒发送心跳包
  • 超时阈值:10秒未响应判定节点异常

故障处理流程

  • 节点失联触发自动故障检测
  • 复制集启动新主节点选举(基于Raft协议)
  • 客户端请求自动重定向到新主节点

3 ) 选举机制深度解析

// 选举伪代码逻辑 
function startElection(candidate) {
  candidate.term++; // 自增任期号 
  let votes = 1;    // 自投票
  
  cluster.nodes.forEach(node => {
    if (node.dataOlderThan(candidate)) { 
      votes++; // 仅投票给数据更新的节点 
    }
  });
  return votes > cluster.size / 2; // 需获半数以上票 
}

或

// 选举核心逻辑伪代码 
class ReplicaSet {
  constructor(nodes) { 
    this.term = 0;
    this.nodes = nodes;
  }
 
  startElection(candidate) {
    candidate.term++;
    let votes = 1; // 自投票 
    
    this.nodes.forEach(node => {
      if(node !== candidate) {
        if(node.term < candidate.term && 
           candidate.dataIsMoreRecent()) {
          votes++;
        }
      }
    });
    
    return votes > Math.floor(this.nodes.length / 2);
  }
}

关键步骤解析

  • 候选节点(Candidate)自增任期号(Term)并自投一票
  • 向所有节点发起投票请求(包含新Term值)
  • 投票节点比较:
    • 若请求Term > 本地Term,更新本地Term
    • 仅当候选节点数据更新时投赞成票(通过oplog时间戳比对)
  • 获得超过半数(含自投票)即当选主节点

选举流程详解

  • 候选节点自增任期号(Term),并自投一票
  • 向其他节点发送投票请求(含当前Term值)
  • 投票节点对比候选节点数据同步状态:
    • 若候选节点数据更新,返回赞成票;否则返回反对票
  • 候选节点需获超过半数赞成票(含自投票)方可当选主节点
  • 触发条件:主节点宕机、集群初始化、节点维护

核心规则:

  • 数据同步性优先:节点仅投票给数据同步状态优于自身的候选节点,需获得超过半数投票(含自投票)
  • 最小节点数要求:复制集至少需3个节点,避免双数节点导致的投票僵局(如2节点故障后无法达成多数票)
  • 任期号(Term):全局单调递增的选举轮次标识

4 ) 数据同步核心技术与写库记录(Oplog)

初始同步流程: (Initial Sync)

  1. 新节点清空本地数据
  2. 全量克隆主节点的DB/集合/索引/文档
  3. 增量追补同步期间写操作的Oplog

Oplog工作原理:

  • 存储位置:local.oplog.rs(固定大小集合),主节点记录写操作,副节点拉取并应用
  • 幂等性设计:相同操作重复执行不影响最终状态
  • 写入放大效应:单次批量更新可能产生多条oplog记录
  • 异步批处理:
    • 副节点批量拉取Oplog至本地缓存
    • 多线程按文档分组应用:将同一文档的多次操作合并处理,提升同步效率

异步复制流程

客户端主节点主节点本地从节点从节点本地写请求写入数据并记录oplog拉取新oplog重放oplog操作确认复制进度客户端主节点主节点本地从节点从节点本地
  • 多线程应用:按文档ID分组并行重放oplog
  • 流控机制:防止从节点落后过多时拖垮主节点
  • 复制延迟:客户端可能读到过期数据(需显式指定readConcern)

批处理优化:

"客户端""主节点""Oplog""副节点"写请求记录操作批量拉取Oplog按文档ID分组应用"客户端""主节点""Oplog""副节点"

Oplog集合文档结构示例

{
  "ts": Timestamp(1628000000, 1),  -- 操作时间戳 
  "h": NumberLong("1234567890"),   -- 操作唯一标识 
  "op": "u",                       -- 操作类型(i=插入,u=更新,d=删除)
  "ns": "test.products",           -- 命名空间 
  "o": { "_id": 100, "price": 49.99 },          -- 更新条件 
  "o2": { "$set": { "price": 59.99 } }          -- 更新内容 
}

Oplog应用原理

// 副节点应用Oplog的伪逻辑
while (true) {
  let batch = fetchOplogBatchFromPrimary(); // 批量拉取Oplog
  batch.groupBy(documentId).forEach(group => {
    applyOperations(group); // 按文档分组应用操作 
  });
}

Oplog与数据量关系

  • 非等比增长:
    • 示例:单次updateMany更新100篇文档,Oplog生成100条独立记录(每条对应单文档操作)
    • 文档总大小不变,但Oplog体积显著增长

oplog 大小通过 oplogSizeMB 参数配置(默认占用磁盘 5% 空间)。监控命令:

# 查看 oplog 状态  
rs.printReplicationInfo()   
 
# 查询 oplog 条目  
use local  
db.oplog.rs.find().sort({  $natural: -1 }).limit(10)  

要点小结

  • 选举机制以数据同步性为优先条件,Oplog通过幂等性和批处理保障高效复制,投票机节点解决选举僵局问题,初始同步含全量克隆+增量追补两阶段
  • 监控要求:需单独跟踪 oplog 增长(通过 db.getReplicationInfo() ),避免因批量操作导致 oplog 溢出(触发循环覆盖)
  • 设计建议:高频批量更新场景下,应增大 oplogSizeMB 或优化操作模式(如分批次执行)

工程示例


1 ) NestJS连接复制集

// app.module.ts  
import { MongooseModule } from '@nestjs/mongoose';
 
@Module({
  imports: [
    MongooseModule.forRoot('mongodb://host1:27017,host2:27017,host3:27017/mydb?replicaSet=myReplSet',  {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      // readPreference: 'primaryPreferred' // 读写分离策略
      readPreference: 'secondaryPreferred',
      retryWrites: true,
    })
  ]
})
export class AppModule {}

2 ) 服务监听 oplog 变更示例

import { Injectable } from '@nestjs/common';  
import { MongoClient, ChangeStream } from 'mongodb';  
 
@Injectable()  
export class OplogService {  
  private changeStream: ChangeStream;  
 
  async startOplogMonitoring() {  
    const client = new MongoClient('mongodb://localhost:27017');  
    await client.connect();   
 
    const db = client.db('local');   
    const collection = db.collection('oplog.rs');   
 
    this.changeStream  = collection.watch([],  { fullDocument: 'updateLookup' });  
 
    this.changeStream.on('change',  (change) => {  
      console.log('Oplog  Change:', change);  
      // 自定义业务逻辑(如通知其他服务)  
    });  
  }  
 
  onModuleDestroy() {  
    this.changeStream.close();   
  }  
}  

3 ) 复制集状态查询命令

/* MongoDB管理命令 */
-- 查看复制集状态
rs.status() 
 
-- 手动触发主节点切换
rs.stepDown(300)   // 保持300秒不可选主 
 
-- 强制节点进入恢复模式
replSetMaintenance: true

补充原生 MongoDB 命令示例

# 将新节点加入复制集  
rs.add("secondary-node:27017")   
 
# 强制节点重新同步  
rs.syncFrom("primary-node:27017")   

# 调整 oplog 大小(需重启)  
mongod --replSet mySet --oplogSize 2048 # 单位 MB  

# 在线修改 oplog 大小(需主节点操作)  
use admin  
db.adminCommand({  replSetResizeOplog: 1, size: 2048 })  

案例:复制集实战部署(Docker环境)


1 ) 环境准备与节点启动

# 创建容器通信网络
docker network create mongo-cluster
docker network ls  # 验证网络创建
 
# 启动三个节点(端口映射不同)
docker run -d --name mongo1 --net mongo-cluster \
  -p 27017:27017 mongo:latest --replSet mySet
 
docker run -d --name mongo2 --net mongo-cluster \
  -p 27018:27017 mongo:latest --replSet mySet
 
docker run -d --name mongo3 --net mongo-cluster \
  -p 27019:27017 mongo:latest --replSet mySet

2 ) 复制集初始化与验证

  1. 连接mongo1执行
    • $ mongo --host mongo1:27017
  2. 执行初始化复制集
    rs.initiate({
      _id: "mySet",
      members: [
        { _id: 0, host: "mongo1:27017" },
        { _id: 1, host: "mongo2:27017" },
        { _id: 2, host: "mongo3:27017" }
      ]
    });
    
    // rs.status(); // 或下面的方式
    // 验证集群状态(预期:1 Primary + 2 Secondary)
    rs.status().members.map(m => ({
      node: m.name, 
      state: m.stateStr,
      lag: m.optimeDate - new Date() // 复制延迟(ms)
    }));
    
    /* 预期输出:
    [
      { name: "mongo1:27017", state: "PRIMARY", lag: 0 },
      { name: "mongo2:27017", state: "SECONDARY", lag: 120 },
      { name: "mongo3:27017", state: "SECONDARY", lag: 250 }
    ]
    */
    

关于rs.status()

// 检查复制集状态(返回文档解析)
rs.status() 
 
// 预期输出核心字段:
{
  "set": "my_set",
  "date": ISODate("2023-XX-XXTXX:XX:XXZ"),
  "members": [
    { 
      "_id": 0,
      "name": "mongo1:27017",
      "health": 1,  // 1=健康
      "stateStr": "PRIMARY",  // 主节点 
      "state": 1    // 状态码1=Primary 
    },
    {
      "_id": 1,
      "name": "mongo2:27018",
      "health": 1,
      "stateStr": "SECONDARY", // 从节点
      "state": 2    // 状态码2=Secondary
    },
    {
      "_id": 2,
      "name": "mongo3:27017",
      "health": 1,
      "stateStr": "SECONDARY",
      "state": 2 
    }
  ]
}
  • 关键输出指标:
    • stateStr: "PRIMARY"(主节点)
    • stateStr: "SECONDARY"(副节点)

3 ) 故障转移测试

# 停止主节点容器
docker stop mongo1
 
# 10秒后检查新主节点 
rs.status().members.find(m => m.stateStr === 'PRIMARY').name
# 输出示例: "mongo2:27017"

4 ) 读写分离配置示例

// Node.js读偏好设置
const client = new MongoClient(uri, {
  readPreference: 'secondaryPreferred' // 优先从副节点读 
});

要点小结
Docker网络实现节点通信,rs.initiate()初始化三节点集群,故障转移测试验证高可用性,readPreference参数实现读写分离

生产环境关键实践


1 ) 写关注(Write Concern)配置

// 确保数据写入多数节点 
db.orders.insert(
  { product: "Laptop", price: 1200 },
  { 
    writeConcern: { 
      w: "majority",  // 写入大多数节点
      wtimeout: 5000  // 超时5秒
    }
  }
);

2 ) 读偏好(Read Preference)策略

模式描述适用场景
primary仅从主节点读(默认)强一致性场景
primaryPreferred主不可用时读副节点高可用优先
secondary仅从副节点读报表分析任务
nearest选择网络延迟最低节点全球化部署

3 ) Oplog容量规划公式

所需Oplog大小 = (平均写入速率 × 最大预期故障时间) × 安全系数(1.5-2)

参考下面

所需Oplog大小 = (平均写入速率 × 最大故障恢复时间) × 2 
  • 监控命令:db.getReplicationInfo()
  • 调整方式:启动参数--oplogSize=2048(单位MB)

4 ) 滚动维护流程

  1. 连接主节点执行降级:rs.stepDown(60)(60秒内不参选)
  2. 等待新主节点选举完成
  3. 维护旧主节点硬件/软件
  4. 重启节点自动重新加入集群
    # 安全下线主节点(60秒内不参与选举)
    rs.stepDown(60)
    

数据复制测试

// 在主节点写入数据
use test_db
db.repl_demo.insertOne({  
  timestamp: new Date(), 
  message: "Primary write test" 
})
 
// 在从节点读取(需启用读扩展)
rs.slaveOk()   // MongoDB 4.4以下版本
db.repl_demo.find()  // 验证数据同步 

架构设计核心原则


1 ) 三位一体高可用机制

  • 数据冗余存储 + 自动故障转移 + 读写负载均衡

2 ) 关键配置要素

  • 最小3节点部署避免选举僵局
  • Oplog容量按业务写入峰值规划
  • 写关注(Write Concern)保障数据持久性

3 ) 持续监控指标

  • 复制延迟(rs.status().optimeLag)
  • 节点状态(rs.isMaster())
  • Oplog窗口时间(db.getReplicationInfo().timeDiff)

4 )关键要点

  • 冗余设计:复制集通过多节点数据副本实现高可用与灾难恢复
  • 智能选举:基于Term计数器和数据同步性投票确保主节点快速切换
  • 数据同步:Oplog的幂等性设计保障最终一致性
  • 扩展性:投票机节点解决选举平局问题,优化奇数节点部署

最终总结

  • MongoDB复制集通过自动化故障转移、数据多副本冗余和智能读写分离三位一体机制,构建了生产级高可用数据库架构。
  • 核心在于合理规划节点拓扑(推荐3节点起步)、精细化Oplog容量配置,以及结合业务场景的读写策略设定。
  • 定期执行滚动维护和延迟监控,可确保集群长期稳定运行。

后续规划

  • 监控方案:添加Prometheus+Grafana监控指标(选举次数/复制延迟/Oplog使用率)
  • 安全加固:补充密钥文件认证配置示例
  • 跨机房部署:增加地理位置分布节点的延迟优化技巧
  • 版本升级:滚动升级操作指南(兼容性检查/回滚预案)

补充示例代码片段:

# 密钥文件认证启动 
mongod --replSet mySet --keyFile /path/to/keyfile

关键注意事项

网络配置:生产环境必须启用SSL/TLS加密节点通信,防止中间人攻击

# mongod.conf 安全配置示例 
net:
  tls:
    mode: requireTLS 
    certificateKeyFile: /etc/mongo/ssl/server.pem  
  • 节点启动顺序:首次初始化至少需两个节点在线才能形成有效选举
  • 主机名解析:跨主机部署时需配置DNS或/etc/hosts确保主机名可解析
  • 最终状态验证:当Mongo Shell提示符显示为my_set:PRIMARY>时,确认三节点复制集搭建成功。此架构可容忍单节点故障(N=3时满足大多数原则),但需通过分片集群扩展写入能力

总结

  • 故障转移:主节点故障后 60秒内 自动完成新主选举(默认超时+选举时间)
  • 数据一致性:通过 OpLog 复制 和 同步性比较 保障新主节点数据最新
  • 脑裂防护:严格半数以上投票 机制避免多主冲突

扩展建议:

  • 跨机房部署:将节点分布在不同可用区
  • 隐藏节点:添加 priority: 0 的专用备份节点,不参与投票
  • 关键结论:复制集通过自动化选举机制和数据同步优先策略,在保障数据一致性的同时实现秒级故障转移,是 MongoDB 高可用架构的核心基石
配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现 电力系统的可靠性研究是相关领域的热点问题。根据研究对象的不同,又可分为发电系统的可靠性,输电系统的可靠性和配电系统的可靠性。配电网在电力系统中处于最末端的位置,直接和用户相连,一旦出现故障情况,就会在用户侧表现为停电事故。因此对配电网的可靠性评估有着重大意义。...... 阅读详情

相关推荐

光纤布拉格光栅(FBG)笔记【1】:波导结构和布拉格波长推导

引言 本文是光纤布拉格光栅(FBG)的笔记【1】,主要介绍了光纤布拉格光栅的波导结构,并且利用动量和能量守恒推导了光纤布拉格波长的表达式 普通光纤中让折射率发生周期性变化就是结构最简单的均匀光纤布拉格光栅(FBG),其波导结构如下图所示。 其传感原理描述可以分为以下的三点: ①光纤纤芯传播的光会在每个光栅面进行反射和透射; ②如果不满足布拉格条件,依次排列的光栅平面反射的光会逐渐变得不同直到最后相互抵消;同时由于系数不匹配,与布拉格波长不相符的光在每个光栅平面的反射也很微弱,这些光大部分在光纤中发生透.

subtitle_的博客 2万+

Mongodb复制集及复制集管理

文章目录前言一、mongodb复制集部署二、复制集中故障转移切换主实例2.1复制集自动切换2.2复制集手动切换二、复制集如何选举2.1选举的原理2.2选举原理验证2.3如何允许从节点读取复制集中的数据2.4如何查看复制状态信息2.4如何更改oplog(日志文件)大小三、如何部署认证复制 前言 mongodb复制集简介: 在Mongodb中,如果只有一份数据集,万一出现某些意外,那么数据将会出现损坏或丢失。为了解决这个问题,Mongodb提供了复制集,来抵抗这种数据丢失的风险。 什么是复制集呢?复制集(rep

chengu04的博客 1142

【MDC开发者实战】多传感器融合算法在自动驾驶中的配置与优化

本文详细介绍了华为MDC平台在自动驾驶中多传感器融合算法的配置与优化实践。通过前融合与后融合技术,结合摄像头、激光雷达和毫米波雷达的数据,提升感知精度与可靠性。文章还分享了ARXML配置、标定技巧、算法调优及性能优化等实战经验,帮助开发者高效实现自动驾驶系统的传感器融合。

weixin_29214199的博客 516

mongodb的复制集整理

数据冗余:防止数据丢失高可用性:自动故障转移读扩展:支持从节点读取1. 使用副本集:请务必使用副本集(Replica Set)而非过时的 Master-Slave 架构2. 规划节点数:确保副本集中拥有投票权的成员(包括仲裁节点)总数为奇数3. 生产环境配置:对于重要的生产环境,更推荐的稳健配置是1个主节点 + 2个从节点,这样可以同时提供数据冗余和读扩展能力。

weixin_42333247的博客 793

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

人形机器人触觉革命:压电式电子皮肤的多模态感知与自修复技术突破

本文深入探讨了压电式电子皮肤如何推动人形机器人的触觉革命。文章分析了其基于压电效应的多模态感知原理,能够灵敏检测压力、振动与温度,并重点介绍了赋予电子皮肤自修复能力的动态共价网络等前沿材料技术,从而极大提升了机器人与物理世界进行精细、安全交互的可靠性与智能化水平。

weixin_29251567的博客 195

MongoDB小课堂:从核心原理到实战运维的全面指南

本文介绍了MongoDB的核心概念、操作方法和应用实践。主要内容包括:1)MongoDB文档模型和容器化部署方案;2)CRUD操作、聚合框架和索引优化等核心方法;3)基于NestJS的RESTful API开发实战;4)数据模型设计原则和分布式架构(复制集与分片集群)。重点讲解了BSON文档结构、聚合管道优化、索引性能调优、数据建模权衡以及高可用集群的选举机制,为MongoDB的开发和运维提供了实用指导。

Wang的专栏 1189

数字电子时钟——数字电路课设

本文设计了一种基于中小规模集成电路的数字电子时钟系统,采用模块化设计方法,包含晶振电路(CD4060+D触发器)、计时电路(74HC161计数器)、数码管驱动(CD4511)和整点报时功能。系统实现了60进制秒/分、24进制小时、7进制星期的计时显示,支持手动校时功能,并具备整点报时特性(59分54-58秒5次500Hz低音,59秒1次1000Hz高音)。通过分模块调试与整合,最终实物电路满足设计要求,获得优秀评价。

来自FZU——电子科学与技术专业 1493

MongoDB小课堂: 分片集群架构深度解析与生产级优化指南

MongoDB分片集群架构解析 MongoDB分片集群通过横向扩展解决单机性能瓶颈,主要由三个核心组件构成:分片节点存储数据子集,配置服务器管理元数据,mongos路由处理请求分发。分片采用副本集确保高可用,配置服务器必须部署为3节点副本集以保证元数据安全。mongos作为客户端入口,通过查询配置服务器获取分片信息并路由请求。该架构支持弹性扩展,理论上可无限增加分片节点应对数据增长,但需权衡架构复杂度与运维成本。生产环境建议将每个分片部署为副本集,配置服务器采用3节点保障元数据安全,mongos多实例部署实

Wang的专栏 1140

【ArcGIS微课1000例】0149:Geographic Imager6.6下载安装教程

首先保证电脑上安装对应版本的PS软件,笔者安装的是PS2023(V24.7)版本,然后安装本软件。保持以上窗口运行状态,然后打开PS,自动弹出如下窗口。勾选【Automatically checkout LIcense】,点击Close。双击setup开始安装,点击【确认】,一路默认安装到底。驱动器:DVD-ROM驱动器(用于DVD版本)处理器:2GHz或更快的英特尔或AMD处理器。安装完成后,将Crack中的所有文件拷贝到。硬盘:600 MB的可用硬盘空间用于安装。内存:4GB内存(建议8GB或更高)。

智慧空间实验室 1222

游戏“中台”的故事——架构演进、团队协同与产品创新的深度剖析

什么是中台?在游戏行业里,中台并不是把所有技术都归口管理、统一“圈养”。更不是简单的工具集合。它代表的,是一种“模块化底座”——把业务的通用能力、基础支撑和数据结合,变成可复用、可扩展、可创新的技术体系。让“前台”专注于创新玩法、极致体验;让“后台”稳健保障数据、安全、性能;让“中台”统合各种资源、流程、工具,形成平台型生产力。游戏中台是团队协同、技术创新、业务增长并行的产物。它让开发从重复劳动解脱,带着创新冲锋;让运营靠数据说话,精准制胜;让产品实现高效迭代,生态爆发。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1950

MongoDB小课堂: MongoDB综合指南之从核心架构到实战应用

文档型数据库核心概念与应用实践 本文系统介绍了文档型数据库的核心特性和MongoDB实践应用。主要内容包括: 架构对比:文档型数据库采用BSON格式、动态Schema和嵌套文档存储,相比关系型数据库具有更灵活的数据模型和水平扩展能力 核心特性: 动态模式支持异构文档存储 嵌套文档实现复杂关系扁平化 BSON格式提供丰富数据类型支持 实践应用: 基础CRUD操作与高级聚合查询 NestJS集成方案实现动态Schema管理 分布式架构组件与性能优化策略 学习路径:从基础操作到原理解析,再到运维管理实战的系统化学

Wang的专栏 1133

SNAP计算哨兵2号的LAI/FVC/FAPAR

SNAP的计算LAI方法是基于PROSAIL模型,集成的模块,很方便。首先要下载SNAP软件,下载步骤见。

所有专家都曾始于新手 2509

MongoDB笔记记录(雷哥课堂)--mongodb介绍

1 MongoDB介绍 1.1 应用场景 传统的关系型数据库(如MySQL),在应对当下互联网产品的某些需求面前,显得力不从心 数据库高写入负载需求 对海量数据的高效率存储和读取 对数据库的高扩展性的需求 这些场景中,MySQL处理起来显得很麻烦,而MongoDB应对起来则很灵活。 具体的应用场景: 视频直播:使用MongoDB存储点赞、评论、弹幕信息。 游戏场景:使用MongoDB存储用户积分、打怪记录、NPC对话记录。 社交场景:使用MongoDB存储朋友圈信息、浏览记录、评论、转发、

qq_24573381的博客 588

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mongodb mysql数据类型_插入mongodb类型

MongoDB概念解析阅读目录数据库RDBMS与MongoDB对应的术语比较文档集合capped collections回到顶部数据库MongoDB默认把_id设置为主键(_开头的键是保留的)数据库名必须为小写回到顶部RDBMS与MongoDB对应的术语比较需注意文档中的键...文章技术mix呢2017-12-12659浏览量mongodb数据结构学习1--增删改查插入文档在数据库中,数据插入是最...

weixin_42301009的博客 432

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

保存路径 查看mongodb_mongodb设置存储位置

mongodb数据库备份恢复MongoDB数据文件备份与恢复备份与恢复数据对于管理任何数据存储系统来说都是非常重要的。1、冷备份与恢复——创建数据文件的副本(前提是要停止MongoDB服务器),也就是直接copywww.2cto.comMongoDB将所有数据都存储在数据目录下,默认是/data/d...文章cloud_ruiy2014-09-17630浏览量全新版本MongoDB数据存储席卷物联...

weixin_39992417的博客 1902

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

golang mongodb 复杂插入更新如何实现_MongoDB

训练大纲MongoDb1大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。第145次(MongoDb)学习主题:MongoDb学习目标:1.掌握什么是mongodb?2.掌握mongodb的配置安装3.mongodb的用户创建和认证4.mongodb更新用户删除用户5.mongodb创建集合 查看删除集合对应视频:http...

weixin_35792468的博客 578

Mac下MySQL的配置和修改密码以及忘记密码后的重置密码

1 ) Mac下MySQL的配置和修改密码 2 ) 忘记并重置密码 启动MySQL服务,通过 $ps aux | grep mysql 判断是否启动该服务,若未启动,则到 系统偏好设置/MySQL面板 启动服务 软件默认会安装到:/usr/local/mysql 目录,进入这个目录下的bin目录:$cd /usr/local/mysql/bin 执行 $./mysql -u root -p 通过初始密码登录MySQL 通...

Wang的专栏 6259

mysql数据库的一些简单的sql语句 内连接 - 表的关联查询

# 创建一个user表 create table users( id int primary key auto_increment, name varchar(20), dpt_id int ); # 向user表中插入数据 insert into users values (null,'刘备',1), (null,'关羽',2), (null,'赵

Wang的专栏 4264

数据库、数据库类型、RDBMS以及MySQL

什么是数据库 数据库 就是按一定的结构来组织、存储和管理数据的仓库 可以很方便的进行crud, 能提供多个用户共享、具有尽可能小的冗余度、与应用程序批次独立的数据集合。 其他持久储存缺点:文件操作(不灵活) 数据库类型 包括 : 关系型 和 非关系型 【关系型】 MySQL MariaDB PostgreSQL Microsoft SQL Server Oracle数据库 Sybase 【...

Wang的专栏 4039

Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作

相关文档 https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elasticsearch/client https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html https://www.elastic.co/guide/en/elasticsearch/client/javascrip

Wang的专栏 3530

Redis: 集群高可用之故障转移和集群迁移

若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。

Wang的专栏 2918

Python笔记:基于Django框架的数据库设计

概述 需要根据《项目建议书》、《需求说明书》、界面原型、各种标准规范对数据库进行设计, 我们目前先参考这一设计图 结构设计 1 ) 找实体 实体是实体-关系模型的基本对象, 是现实世界中各种事物的抽象。 凡是可以相互区 开并可以被识 的事、物、概念等对象均可认为是实体。 基本的实体列表如下: 会员 类别 商品 订单 订单详情 收货地址 商品评论 商品图片 友情链接 站内公告 … ...

Wang的专栏 2772

Elastic Stack梳理:集群搭建指南之高可用架构与实战部署

本文介绍了Elasticsearch分布式架构和Cerebro监控工具的部署策略。主要内容包括: ES集群角色划分(主节点、数据节点、协调节点)及功能说明 Cerebro监控工具的独立部署方法和访问方式 集群拓扑规划示例,包含节点IP分配和架构拓扑图 各类型节点的配置原则和数量计算公式 高可用主节点配置要点及示例配置 生产环境优化建议,包括分片规划、硬件配置和安全措施 文章提供了完整的集群部署方案,涵盖从基础概念到具体实施的各个环节,适用于不同规模的ES集群建设。

Wang的专栏 2545

Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息

当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。

Wang的专栏 2466

MySQL: 数据库性能的决定性因素之从双十一大促高并发场景看系统瓶颈与优化路径

电商大促期间,数据库面临高并发写入、连接数暴增、慢查询积压等核心挑战。本文分析了锁竞争、主从延迟等关键性能瓶颈,并提出多种优化方案:1)使用乐观锁通过版本号控制库存超卖;2)CAS机制实现无锁并发;3)分布式锁协调多节点操作。这些方案在保证数据一致性的同时提升吞吐量,适用于库存扣减、订单创建等典型场景,有效解决数据库扩展难题。

Wang的专栏 2426
上一篇: MongoDB小课堂: 聚合管道实战详解与性能优化策略
下一篇: MongoDB小课堂: 分片集群架构深度解析与生产级优化指南
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值