MongoDB教程(七):mongoDB分片

news2024/11/15 15:42:20

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

文章目录

      • 引言
      • 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.coloradmin.cn/o/1932148.html

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

相关文章

Mysql数据库的概念及sql语法和规范+数据库的用户管理

一、数据库的概念 1.数据库:组织、管理、存储数据的仓库 2.数据库的管理系统(DBMS):实现对数据有效组织,管理和存储的系统软件。 3.关系型数据库和非关系性数据库: 关系型数据库:mysql or…

神经网络概述

目录 1. 前馈神经网络(Feedforward Neural Networks, FNNs) 2. 卷积神经网络(Convolutional Neural Networks, CNNs) 3. 循环神经网络(Recurrent Neural Networks, RNNs) 4. 长短期记忆网络(Long Short-Term Memory, LSTM) 5. 门控循环单元(Gated Recurrent Unit…

MSPM0G3507——时钟主频拉到80MHZ

先点开使用时钟树 在配置时钟界面这样配置

【送书活动十期】从零开始node.js制作CLI工具

这篇博客的由来是源于工作中一个java项目的配置项是加密后的私钥,私钥是由其他项目中调用web3生成随机账号得到的,而加密方法只是简单在java项目中执行代码得到。这便导致两步操作有点割裂,需要有一个脚本来完成生成私钥和加密私钥&#xff0…

[Tensor学习]你不得不知道的知识点-切点-反转

wait...突然发现了一个错误: 在tensor里面只有size相同才允许相加, 如果想要相连接: PS: 如果tensor是多维的,比如说 a Tensor([1,2,3], [4,5,6]) 那么有 a[ : , :] a a[0,0] 1 a[ 第一维 ,第二维] ...…

乘积量化pq:将高维向量压缩 97%

向量相似性搜索在处理大规模数据集时,往往面临着内存消耗的挑战。例如,即使是一个包含100万个密集向量的小数据集,其索引也可能需要数GB的内存。随着数据集规模的增长,尤其是高维数据,内存使用量会迅速增加&#xff0c…

MAC地址电脑的“身份证”

在电脑的世界里,每个设备都有一个独一无二的标识,就像我们的身份证号码一样。 这个标识被称为MAC地址(Media Access Control Address),它是网络设备硬件的唯一识别码。 MAC地址由12个十六进制数字组成,通…

区块链资料

Quantstamp - Public Security Assessments smart-contract-sanctuary-bsc/contracts/mainnet at master tintinweb/smart-contract-sanctuary-bsc GitHub https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide/blob/main/README_CN.md sFuzz: 高效自适应的智…

ArkUI组件——循环控制/List

循环控制 class Item{name: stringprice:number}private items:Array<Item> [new Item("A0",2399),new Item("BE",1999),new Item("Ro",2799)] ForEach(this.items,(item:Item) > {})List组件 列表List是一种复杂的容器&#xff0c;…

小程序里面使用vant ui中的vant-field组件,如何使得输入框自动获取焦点

//.wxml <van-fieldmodel:value"{{ userName }}"placeholder"请输入学号"focus"{{focusUserName}}"/>// .js this.setData({focusUserName: true});vant-field

postgresql删除用户

背景 **角色与用户**&#xff1a;在 PostgreSQL 中&#xff0c;用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限&#xff08;在这种情况下&#xff0c;它们通常被称为“用户”&#xff09;&#xff0c;也可以没有&#xff08;在这种情况下&#xff0c;它们通常用…

网络请求之代理proxy

为什么要用代理呢&#xff1f;这个就涉及到安全问题了&#xff0c;你要是用一个IP频繁的访问人家网站&#xff0c;这不就是在搞事情么&#xff0c;人家网站肯定得把你的IP禁掉。所以我们爬虫的时候就得经常换IP&#xff0c;就是拿别人的IP不同人的IP访问网站去爬取数据。 我们…

AQS源码解析(ReentrantLock)

什么是AQS:Juc中的大多数同步器都是围绕着一些相同的基础行为&#xff0c;比如等待队列&#xff0c;条件队列&#xff0c;共享&#xff0c;独占获取变量这些行为&#xff0c;抽象出来就是基于AQS&#xff08;AbstractQueuedSynchronizer&#xff09;实现的。所以可以把AQS看成这…

昇思学习打卡-18-LLM原理与实践/MindNLP ChatGLM-6B StreamChat

文章目录 模型介绍技术特点运行效果 模型介绍 ChatGLM-6B模型是一个开源的、支持中英双语的对话语言模型&#xff0c;由清华大学和智谱AI联合研发。 技术特点 模型量化技术&#xff1a;ChatGLM-6B结合了模型量化技术&#xff0c;使得用户可以在消费级的显卡上进行本地部署。…

C++动态内存的管理

今天来分享C动态内存管理相关知识&#xff0c;闲言勿谈&#xff0c;直接上干货。 1. 动态内存的开辟和销毁(new和delete) (1)前置知识&#xff1a;我们知道c语言有malloc和calloc和realloc三个函数可以进行动态的开辟内存&#xff0c;那么它们有什么区别呢&#xff1f;首先是…

Module2 DRC Basics

材料链接 calibre_rule_writing_2007 - 道客巴巴https://www.doc88.com/p-330763936895.html Calibre DRC介绍 Calibre nmDRC流程 找寻,查看,纠正DRC冲突的一个完整的过程: 从Layout输入,加上svrf文件,一起输入进nmDRC软件; 输出DRC result数据,summary report,tr…

【经验分享】关于静态分析工具排查 Bug 的方法

文章目录 编译器的静态分析cppcheck安装 cppcheck运行 cppcheck 程序员的日常工作&#xff0c;不是摸鱼扯皮&#xff0c;就是在写 Bug。虽然这是一个梗&#xff0c;但也可以看出&#xff0c;程序员的日常一定绕不开 Bug。而花更少的时间修复软件中的 Bug&#xff0c;且不引入新…

第4章 Express路由的深入理解(二)

4 路由分组 路由分组用于将相关的路由组织在一起&#xff0c;使代码更具模块化和可维护性。可以通过使用 express.Router 创建路由组。 示例&#xff1a; const express require(express); const app express(); const apiRouter express.Router(); const userRouter ex…

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xf…

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包&#xff0c;离线进行安装 &#xff0c;用于软件封装。 测试下载一个gcc和依赖环境&#xff0c;关闭默认在线源&#xff0c;测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…