MongoDB教程(七):mongoDB分片

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

文章目录

      • 引言
      • MongoDB 分片架构概述
      • 步骤一:配置服务器集群
        • 配置服务器集群初始化
      • 步骤二:启动查询路由器(Mongos)
        • 启动Mongos
      • 步骤三:添加分片
        • 添加分片
      • 步骤四:数据分片
        • 启用分片
      • 实战案例:构建MongoDB分片集群
        • 场景描述
        • 集群架构
        • 分片键选择
        • 配置与启动
        • 数据操作
      • 结论

引言

在高并发和大规模数据存储的场景下,单一MongoDB实例往往难以承载巨大的数据量和流量压力。MongoDB分片(Sharding)技术通过将数据水平分割并分布到多个MongoDB实例(分片)上,实现了数据存储的水平扩展,从而极大地提升了系统的可扩展性和性能。本文将深入探讨MongoDB分片的原理、配置步骤、案例代码以及最佳实践,旨在帮助读者掌握构建和管理MongoDB分片集群的能力。

MongoDB 分片架构概述

MongoDB分片集群由三个主要组成部分构成:

  1. 分片(Shards):独立运行的MongoDB实例或副本集,存储数据的子集。
  2. 查询路由器(Mongos):客户端与分片集群之间的接口,负责将查询和写操作路由到正确的分片。
  3. 配置服务器(Config Servers):一个运行在副本集上的MongoDB实例,用于存储集群元数据,如分片信息、数据分布状态等。

步骤一:配置服务器集群

首先,需要设置一个配置服务器集群,通常是一个副本集,用于存储分片集群的元数据。

配置服务器集群初始化

在三台机器上安装MongoDB并配置副本集:

# 配置文件mongod.conf
replSet: configReplSet

启动每个实例:

mongod --config mongod.conf

初始化副本集:

use admin
db.runCommand({replSetInitiate: {_id: "configReplSet",members: [{_id: 0, host: "config0:27017"},{_id: 1, host: "config1:27017"},{_id: 2, host: "config2:27017"}]
}})

步骤二:启动查询路由器(Mongos)

查询路由器(Mongos)是客户端与分片集群之间的入口点,它负责将请求路由到正确的分片。

启动Mongos

在一台或多台机器上启动Mongos实例,指向配置服务器集群:

mongos --configdb configReplSet/config0:27017,config1:27017,config2:27017

步骤三:添加分片

将现有的MongoDB实例或副本集添加到分片集群中,作为分片服务器。

添加分片
// 连接到Mongos
mongo// 添加分片
sh.addShard("shard0/shard0a:27017,shard0b:27017,shard0c:27017")

步骤四:数据分片

为了使数据能够在分片集群中分布,需要为集合启用分片。这通常涉及到选择一个分片键(Shard Key),用于确定数据的分布。

启用分片
// 选择分片键
sh.enableSharding("myDB")// 为集合启用分片
sh.shardCollection("myDB.myColl", { userId: 1 })

实战案例:构建MongoDB分片集群

场景描述

假设我们要为一个全球性的在线游戏平台构建一个可扩展的MongoDB存储系统,该平台需要支持全球数百万玩家的数据存储和高并发读写操作。

集群架构
  • 配置服务器:一个包含3个实例的副本集。
  • 分片服务器:多个分片,每个分片也是一个包含3个实例的副本集。
  • 查询路由器:多个Mongos实例,提供高可用性。
分片键选择

为了确保数据均匀分布,我们选择玩家ID作为分片键,因为它具有良好的分布性和唯一性。

配置与启动
  1. 配置服务器集群:初始化配置服务器副本集。
  2. 启动查询路由器:启动多个Mongos实例,连接到配置服务器。
  3. 添加分片:将多个分片添加到集群中。
  4. 数据分片:为玩家数据集合启用分片,使用玩家ID作为分片键。
数据操作

现在,客户端可以通过Mongos对分片集群进行读写操作。Mongos负责将请求路由到正确的分片,并将结果合并返回给客户端。

结论

MongoDB分片是实现数据库水平扩展的关键技术,通过将数据分布到多个分片上,不仅解决了单一实例的性能瓶颈,还提供了高可用性和数据冗余。通过本文的深入解析和实战案例,读者应能掌握构建和管理MongoDB分片集群的技能。对于任何面临数据增长和性能挑战的应用场景,MongoDB分片提供了一个强有力的解决方案。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【MongoDB系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

MongoDB相关文章索引文章链接
MongoDB教程(一):Linux系统安装mongoDB详细教程MongoDB教程(一):Linux系统安装mongoDB详细教程
MongoDB教程(二):mongoDB引用shellMongoDB教程(二):mongoDB引用shell
MongoDB教程(三):mongoDB用户管理MongoDB教程(三):mongoDB用户管理
MongoDB教程(四):mongoDB索引MongoDB教程(四):mongoDB索引
MongoDB教程(五):mongoDB聚合框架MongoDB教程(五):mongoDB聚合框架
MongoDB教程(六):mongoDB复制副本集MongoDB教程(六):mongoDB复制副本集

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

书生大模型第三关-Git基础

1.任务1: 破冰活动:自我介绍 目标: 每位参与者提交一份自我介绍。 提交地址:https://github.com/InternLM/Tutorial 的 camp3 分支~ 行动: 首先Fork项目到自己Repo中,然后git clone在本地上 然后创建一个…

【所谓生活】马太效应

简介 马太效应又称马太定律或两级分化现象。该效应描述的是在社会生活中,强者因为优势而获得更多机会,而弱者因劣势而失去机会,最终导致强者愈强、弱者愈弱的现象。这一概念最早由美国社会学家罗伯特莫顿于1968年提出,其名字来源…

【Android】活动之间的穿梭

引入 在活动的初学建立了一个简单的活动,但只有一个活动不是过于简单,在你使用手机的时候按下一个按钮可能会跳转到下一个界面,此时就是活动之间的穿梭:使用Intent在活动之间穿梭 Intent:是android程序中各组件之间进…

Android Media3 技术应用详解

1、音视频基础 一个简单的音视频链路如下: 1)采集,音视频经过采集后分别生成音频流和视频帧,音频是流式的物理上没有帧的概念,但为了数据处理的方便实际数据处理中引入了音频帧的概念,一般中间插入静音数据…

模拟考题目总结

嘤嘤的子串权值和 考虑枚举左端点跑 d p dp dp,状态 [ i , j ] [i,j] [i,j] 表示当前在字符串第 i i i 位匹配到第 j j j 位。 发现转移方程跟左端点无关,当右端点为 x x x 时,可选的左端点有 x x x 个,当 s i a s_ia s…

《学会 SpringBoot · 定制 SpringMVC》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,如需交流&#xff…

元宇宙深入解析

元宇宙(Metaverse)是一个新兴的概念,它激发了技术专家、艺术家和商业领袖的无限想象。它代表着数字互动的新前沿,提供了一个平行的数字宇宙,用户可以在其中实时互动,超越物理世界的限制。 元宇宙是什么&am…

一五六、Node+Vue 使用七牛上传图片,并配置个人域名

1. 七牛云ak/sk获取 点击注册🔗开通七牛开发者帐号如果已有账号,直接登录七牛开发者后台,点击这里🔗查看 Access Key 和 Secret Key 2. Node.js获取七牛token 安装qiniu npm install qiniu创建空间 Node获取token const qi…

美国INSTRUMENTS的L2/L6/L10/L20/L50线性放大器与ATA-L水声放大器

一、企业背景: Aigtek是一家来自中国的专业从事测量仪器研发、生产和销售的高科技企业。公司主要研发和生产功率放大器、功率放大器模块、功率信号源、计量校准源等产品。核心团队主要是来自西安交通大学及西北工业大学的专家教授等联合组成研发团队,目前…

QT开发笔记:信号和槽

乱码问题: 出现乱码问题原因只有一个:就是编码方式不匹配!!! 中文常见汉字4K,算上各种生僻字差不多六万字 仍然使用一个大表格,给每个汉字,分配一个整数即可。 字符集~~表示汉字的字符集&#…

python 语法学习 day 7

错题反思 1.九九乘法表 第一次提交的答案是:先把所有输入值放在列表里面 EOF,输入后产生异常-->>捕获异常,结束输入 3. 题意:统计单词的种类以及数量(忽略大小写),最终以降序输出(出现次数相同的单词根据单词的…

板级调试小助手(4)基于C语言的自定义脚本解析器

一、前言 在之前的文章中介绍了板级调试小助手的结构、DDS外设以及如何使用PYNQ驱动OLED显示视频,在小助手结构的文章中提到,小助手具有自定义脚本功能,这个功能是使用C语言编写的,本质上来说就是一个字典树通过读取脚本的关键词进…

Laravel表单验证的艺术:精细控制数据的入口

Laravel表单验证的艺术:精细控制数据的入口 在Web应用开发中,表单请求验证是确保接收到的数据满足特定条件的重要环节。Laravel框架提供了一套强大且易于使用的验证系统,允许开发者定义复杂的验证规则并轻松地应用到表单请求上。本文将深入探…

Go 语言中的互斥锁 Mutex

Mutex 是一种互斥锁,名称来自 mutual exclusion,是一种用于控制多线程对共享资源的竞争访问的同步机制。在有的编程语言中,也将其称为锁(lock)。当一个线程获取互斥锁时,它将阻止其他线程对该资源的访问,直到该线程释放锁。这可以防止多个线程对共享资源进行冲突访问,从而…

FPGA实训报告DAY 1(Verilog HDL)

实习日志与总结 日期:2024 年 7 月 10 日 星期三 姓名:XXX 一、实习日志 上午 9:00 - 9:30 按时到达工位,参加部门早会,了解了今天的实习任务和目标,即初步学习 FPGA 简介和 Verilog 基础语法知识。 9:30 - 10:30…

LeetCode-随机链表的复制

. - 力扣(LeetCode) 本题思路: 首先注意到随机链表含有random的指针,这个random指针指向是随机的;先一个一个节点的拷贝,并且把拷贝的节点放在拷贝对象的后面,再让拷贝节点的next指向原链表拷贝…

免分助手神器-交管12123学法减分模拟考试题目及答案 #经验分享#其他

“驾照学法减分”为驾驶人提供了一种积极参与交通安全事业、减缓驾驶证扣分的方式,有益于促进驾驶人形成遵守交通规则、规范驾驶行为的良好习惯,提高道路交通安全意识和素养。然而,持有人仍需严格遵守道路交通安全法律法规,减少交…

1.MQ介绍

MQ 消息队列,本质是一个队列,先进先出,只不过队列中存放的内容是message而已。 为啥学习MQ 1.流量消峰 如果一个订单系统最多每秒能处理一万次订单,正常情况下我们下单1秒后就能返回结果。但是在高峰期,如果有两万…

服务端正常启动了,但是客户端请求不到

服务端正常启动了,但是客户端请求不到有哪些原因?如何排查? 如果客户端请求的接口没有响应,排查的方式: 检查接口IP地址是否正确,ping一下接口地址。 检查被测接口端口号是否正确,可以在本机Telnet接口的IP和端口号…

VsCode远程ssh连接失败:Could not establish connection to XXX

一、问题描述 在VsCode中按下"F1",选择Remote-SSH:Connect to Host 选择一个已经配置好的SSH主机,比如我选择的是192.168.0.104: 结果提示:Could not establish connection to XXX 二、解决方法 观察VsCode的输出信息…