MongoDB中的横向扩容数据分片

news2025/1/24 6:11:34

MongoDB中的分片启用及应用

分片(Sharding)是MongoDB为解决大规模数据集存储和高并发访问设计的一种分布式存储机制。通过分片,数据可以水平拆分并分布在多个服务器(物理或虚拟)上,以提升性能和容量。


1. 分片的核心概念

(1) 分片(Shard)
  • 每个分片是一个独立的MongoDB实例或副本集,存储数据集的一部分。
  • 分片可以独立承担读写任务,提升负载能力。
(2) 分片键(Shard Key)
  • 是集合中的一个字段或字段组合,用于决定数据分布在哪个分片上。
  • MongoDB根据分片键拆分集合中的数据。
(3) Config Server
  • 用于存储分片的元数据(例如分片键范围、数据分布等)。
  • 是分片集群的核心协调器,所有的分片信息都存储在Config Server中。
(4) MongoS
  • MongoS是分片集群的路由服务。
  • 客户端通过MongoS与分片集群交互,而无需直接访问具体分片。

2. 启用分片的步骤

(1) 环境准备
  • 主机规划

    • 至少需要3台服务器:
      1. Config Server(可以是3个节点,建议使用副本集模式)。
      2. Shard Servers(实际存储数据的分片服务器,建议每个分片为副本集)。
      3. MongoS(分片集群的路由服务,建议至少部署1个)。
  • 安装MongoDB

    • 确保所有节点安装相同版本的MongoDB。
(2) 配置分片集群

以下为分片集群的部署流程:

  1. 启动Config Server

     

    bash

    复制编辑

    mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb --bind_ip 0.0.0.0

    • --configsvr:指定为Config Server。
    • --replSet:为Config Server启用副本集。
  2. 初始化Config Server副本集: 在任意一个Config Server上,运行mongo,然后初始化副本集:

     

    javascript

    复制编辑

    rs.initiate({ _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "config1:27019" }, { _id: 1, host: "config2:27019" }, { _id: 2, host: "config3:27019" } ] });

  3. 启动分片服务器(Shard Server): 每个分片是一个独立的副本集。例如,启动一个分片:

     

    bash

    复制编辑

    mongod --shardsvr --replSet shard1ReplSet --port 27018 --dbpath /data/shard1 --bind_ip 0.0.0.0

  4. 初始化分片副本集: 在任意一个分片服务器上,初始化副本集:

     

    javascript

    复制编辑

    rs.initiate({ _id: "shard1ReplSet", members: [ { _id: 0, host: "shard1node1:27018" }, { _id: 1, host: "shard1node2:27018" }, { _id: 2, host: "shard1node3:27018" } ] });

  5. 启动MongoS路由服务

     

    bash

    复制编辑

    mongos --configdb configReplSet/config1:27019,config2:27019,config3:27019 --port 27017 --bind_ip 0.0.0.0

  6. 添加分片到集群: 在MongoS实例上连接mongo客户端,添加分片:

     

    javascript

    复制编辑

    sh.addShard("shard1ReplSet/shard1node1:27018,shard1node2:27018,shard1node3:27018"); sh.addShard("shard2ReplSet/shard2node1:27018,shard2node2:27018,shard2node3:27018");

(3) 启用集合的分片
  • 启用数据库的分片功能:

     

    javascript

    复制编辑

    sh.enableSharding("myDatabase");

  • 为集合设置分片键并启用分片:

     

    javascript

    复制编辑

    sh.shardCollection("myDatabase.myCollection", { "shardKeyField": 1 });


3. 分片的应用场景

(1) 处理大规模数据
  • 当数据量无法单台服务器存储时,可以通过分片扩展存储容量。
(2) 高并发读写
  • 分片将请求分散到多个服务器,提高读写性能。
(3) 地理分布场景
  • 数据可以根据地理位置分片,减少跨地区的访问延迟。
(4) 热点数据管理
  • 可以基于分片键,将热点数据均匀分布到多个分片,避免单节点瓶颈。

4. 注意事项

  1. 分片键设计很重要

    • 应选择具有高卡片性(unique values)的字段。
    • 避免选择会导致热点问题的字段(如时间戳)。
  2. 分片数据平衡

    • MongoDB会自动平衡分片数据,但大规模重分片可能会影响性能。
  3. 分片配置的复杂性

    • 配置和维护分片集群需要经验丰富的DBA。
  4. 事务支持

    • 从MongoDB 4.2开始,支持跨分片事务,但会增加性能开销。

总结

MongoDB分片是实现水平扩展的重要机制,适用于大规模数据和高并发场景。启用分片需要配置分片集群,并合理设计分片键以优化数据分布和性能。虽然分片可以解决很多问题,但它的配置和维护复杂度较高,适合有明确扩展需求的应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Uniapp-Vue3】uni-icons的安装和使用

一、uni-icon的安装 进入到如下页面中,点击“点击下载&安装”。 uni-icons 图标 | uni-app官网 点击“下载插件并导入HBuilder”,如果没有登录就登陆一下 网页中会打开Hbuilder,进入Hbuilder以后,选择需要使用该插件的项目进…

【橘子ES】Kibana的分析能力Analytics简易分析

一、kibana是啥,能干嘛 我们经常会用es来实现一些关于检索,关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI,你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…

一、引论,《组合数学(第4版)》卢开澄 卢华明

零、前言 发现自己数数题做的很烂,重新学一遍组合数学吧。 参考卢开澄 卢华明 编著的《组合数学(第4版)》,只打算学前四章。 通过几个经典问题来了解组合数学所研究的内容。 一、幻方问题 据说大禹治水之前,河里冒出来一只乌龟&#xff0c…

LabVIEW太阳能照明监控系统

在公共照明领域,传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统,通过智能控制和实时监测,提高能源利用效率,降低维护成本,实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…

5. 马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)

目录 0. 承前1. AI金融智能体1.1 What is AI金融智能体1.2 Why is AI金融智能体1.3 How to AI金融智能体 2. 数据要素&计算流程2.1 参数集设置2.2 数据获取&预处理2.3 收益率计算2.4 因子构建与预期收益率计算2.5 协方差矩阵计算2.6 投资组合优化2.7 持仓筛选2.8 AI金融…

【华为路由的arp配置】

华为路由的arp配置 ARP:IP地址与MAC地址的映射。 R1: g0/0/0:10.1.1.254/24 g0/0/1:10.1.2.254/24 PC1: 10.1.1.1/16 PC2: 10.1.1.2/16 PC3: 10.1.2.3/16 动态ARP 查看PC1的arp表,可以看到,列表为空。 查看R1的arp表 在PC3上ping命令测…

U3D的.Net学习

Mono:这是 Unity 最初采用的方式,它将 C# 代码编译为中间语言 (IL),然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP:这是一种较新的方法,它会将 C# 代码先编译为 C 代码,再由 C 编译器…

机器学习-线性回归(简单回归、多元回归)

这一篇文章,我们主要来理解一下,什么是线性回归中的简单回归和多元回归,顺便掌握一下特征向量的概念。 一、简单回归 简单回归是线性回归的一种最基本形式,它用于研究**一个自变量(输入)与一个因变量&…

智能体的核心技能之插件,插件详解和实例 ,扣子免费系列教程(11)

欢迎来到滔滔讲AI,今天我们来学习智能体的核心功能点之一的插件。 插件是通过API连接集成各种平台和服务,它扩展了智能体的能力。平台内置了丰富的插件,我们可以直接调用。 一、什么是插件 首先,插件其实就像一个工具箱。 每个插…

Spring Security(maven项目) 3.0.2.6版本—总

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷&#xf…

超强推理大模型 QVQ-32B-preview 一键部署

QwQ-32B-Preview 是 Qwen 团队于 2024 年开发的实验研究模型,专注于提高 AI 推理能力。这个模型在多个基准测试中展现了卓越的性能,特别是在 GPQA、AIME、MATH-500 和 LiveCodeBench 等测试中,准确率分别达到了 65.2%、50.0%、90.6% 和 50.0%…

数据结构(Java)——二叉树

1.概念 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树可以是空的(即没有节点),或者由一个根节点以及零个或多个左子树和右子树组成,其中左子树和右子树也分…

谷粒商城——商品服务-三级分类

1.商品服务-三级分类 1.1三级分类介绍 1.2查询三级分类查询-递归树型结构数据获取 1.2.1导入数据pms_catelog.sql到数据表pms_category 1.2.2一次性查出所有分类及子分类 1.2.2.1修改CategoryController.java /*** 查出所有分类以及子分类,以树形结构组装起来*/R…

AviatorScript用法

AviatorScript的介绍,网上有很多,这里就不啰嗦了。这里介绍下传参的用法 应用场景:如果不想频繁的打包升级,而是想只更新某些规则脚本重启服务就可以升级的话,AviatorScript无疑是最佳选择。比如说,今天制…

云计算和服务器

一、云计算概述 ICT是世界电信协会在2001年的全球性会议上提出的综合性概念,ICT分为IT和CT,IT(information technology)信息技术,负责对数据生命周期的管理;CT(communication technology),负责数据的传输管理。 CT技术…

论文:深度可分离神经网络存内计算处理芯片

引言:SRAM - CIM芯片在处理深度可分离神经网络时面临的挑战 深度可分离卷积(Depthwise separable convolution, DSC)由逐深度卷积(DW)和逐点卷积(PW)组成,逐深度卷积用于提取空间特征&#xff…

代码随想录刷题day14(1)|(链表篇)142.环形链表 II

目录 一、链表理论基础 二、环形链表思路 1.如何判断有环? 2.如何找出环的入口? 3.其他疑问 三、相关算法题目 四、总结 一、链表理论基础 代码随想录 (programmercarl.com) 二、环形链表思路 1.如何判断有环? 使用快慢指针法&…

运算放大器应用电路设计笔记(六)

6.1输出失调电压发生的原因与计算 6.1.1用噪声增益进行评价 若运算放大器两个输入端接地,则理想运放输出为零,但实际的运放输出不为零,有一定的直流输出电压。这种直流电压称为输出失调电压。发生的原因是,运算放大器内部元件尤…

openresty(nginx)+lua+kafka实现日志搜集系统

今天我们来实现一下快捷的nginx日志搜集系统,主讲的是nginx服务里面的openresty的日志搜集。采用的手段是采用lua做中间桥梁。 一、安装openresty 具体安装步骤在这里《centos7 二进制安装openresty》 二、安装kafka 1、安装Java及配置Java 具体安装步骤在这里《采…

PortSwigger靶场练习---网页 LLM 攻击:间接提示注入

网页 LLM 攻击: Indirect prompt injection 间接提示注入 PortSwigger靶场地址: Dashboard | Web Security Academy - PortSwigger 题目: 官方提示: 发现攻击面 点击实时聊天以访问实验室的聊天功能。 询问LLM它有权访问哪些 AP…