1.简介
分片(分区),是指将数据拆分,将其分散存在不同的机器上的过程。
将数据分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多地数据,处理更大的负载。
2.MongoDB的自动分片
MongoDB分片的基本思想是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。
应用程序不必知道拿片对应哪些数据,甚至不需要知道数据已经被拆分,应用通过连接一个路由进程mongos来正常发送请求。mongos知道所有数据的存放位置。
1)何时分片
--机器的磁盘不够用了
--单个mongod已经不能满足写数据的性能需要了
--想将大量数据放在内存中提高性能
一般来说,先要从不分片开始,然后在需要时将其转换成分片的
3.实现
1)片键
设置分片时,需要从集合里选一个键,用该键的值作为数据拆分的依据,这个键就叫片键。
2)分片的组成部分
--片:保存子集合数据的容器。
--mongos:路由器进程。路由所有请求,然后将结果聚合。本身不存储数据或者配置信息(但会缓存配置服务器的信息)。
--配置服务器:存储集群的配置信息(数据和片的对应关系)。
3)配置
//启动配置服务器 mongod --dbpath D:\mongoDB\shard-cfg --logpath D:\mongoDB\shard-cfg-log\log.log --port 10001 //启动分片shard1 mongod --dbpath D:\mongoDB\shard1 --logpath D:\mongoDB\shard1-log\log.log --port 30003 //启动分片shard2 mongod --dbpath D:\mongoDB\shard2 --logpath D:\mongoDB\shard2-log\log.log --port 40004 //启动mongos mongos --configdb localhost:10001 --port 20002 //在mongos中配置分片 use admin; db.runCommand({"addshard": "localhost:30003", "allowLocal": true}); db.runCommand({"addshard": "localhost:40004", "allowLocal": true}); //插入数据 use test; db.user.insert({"name": "路人甲0"}); //name键上必须要有索引,否则无法分片 db.user.ensuredIndex({"name": 1}); use test1; db.user1.insert({"name": "路人甲0"}); //开启数据库的分片功能 use admin; db.runCommand({"enablesharding": "test"}); //对集合进行分片 db.runCommand({"shardcollection": "test.user", "key": {"name": 1}}); //插入大量数据 use test; for (var i = 1; i <= 10000; i++) { db.user.insert({"name": i + "路人甲"}); } use test1; for (var i = 1; i <= 10000; i++) { db.user1.insert({"name": "路人甲" + i}); } //查看分片信息 use config; db.shards.find(); //查看数据库 db.databases.find(); //查看块信息 db.chunks.find(); //查看上述集合的概要信息 db.printShardingStatus(); //移除分片--mongos会把给定片上的所有块都移到其他片上 use admin; db.runCommand({"removeShard": "localhost:30003"}); //当移动的片是数据库的大本营时,需先手动移动该数据库到别的片上 db.runCommand({"moveprimary": "test", "to": "localhost:40004"});
4.生产实现
1)多个配置服务器
2)多个mongos服务器
3)每个片都是副本集
4)正确设置w
相关推荐
以下是对MongoDB分片的详细说明: 1. **启动相关进程** - **Shard Server**: 在分片服务器上,需要启动`mongod`进程,并添加`--shardsvr`参数。如果是主从模式,还需使用`--pairwith`指定其伙伴节点。 - **Config...
k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...
本文将详细介绍MongoDB的分片备份以及复制集的备份方法。 **1. 分片备份** MongoDB 分片是将大数据集分散到多个物理节点上,以提高查询性能和存储容量。分片备份主要涉及配置服务器(Config Server)的备份。配置...
### 实验五 MongoDB分片部署与启动 #### 实验综述 本次实验旨在深入学习MongoDB的分片机制,理解并掌握如何部署一个基于多服务器的MongoDB分片集群。分片是MongoDB的一项重要特性,它允许将数据分散存储在多个物理...
MongoDB分片集群是一种分布式数据存储结构,可以实现水平扩展。分片集群由三部分组成:mongos路由服务器、config配置服务器和多个分片节点。mongos作为路由服务器,负责接收客户端请求并将其转发到正确的分片。...
MongoDB分片设计是针对大数据量的存储和处理提出的解决方案。在大数据环境下,单个数据库服务器往往难以满足高性能和高可用性的需求。MongoDB通过分片(Sharding)技术来解决这个问题。分片是一种将数据分散存储在多...
MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置
13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
MongoDB的分片技术是一种用于处理大数据量的分布式数据库策略,它通过将数据水平分割并分布在多个服务器上,以提高存储容量和数据处理性能。在MongoDB中,分片(Sharding)是解决大规模数据存储和高并发访问的有效...
MongoDB 分片是大型数据库系统中用于横向扩展存储能力的关键技术。在 CentOS 7 上部署 MongoDB 分片集群是一项复杂但必要的任务,特别是当处理大量数据并需要高效读写性能时。以下是一个详细的步骤指南,涵盖了从...
一、MongoDB分片概念 1. 分片集群:由多个MongoDB服务器组成的系统,包括分片服务器、路由进程(Mongos)和配置服务器(Config Server)。路由进程负责处理客户端请求,确定数据应存储或检索的位置,并将请求转发到...
MongoDB的分片技术是为了解决大数据存储和高性能需求而设计的一种分布式数据库解决方案。...通过深入了解和熟练掌握这些概念,可以更好地管理和优化MongoDB分片集群,以应对大规模数据处理的挑战。
### MongoDB分片技术详解 #### 一、MongoDB分片概念 MongoDB 分片是一种将数据分布在网络中的多个服务器上的方法。它通过水平分割数据来提高可伸缩性和性能,适用于处理大量数据和高并发访问场景。分片的核心组件...
MongoDB 是一个高性能、分布式、开源的文档型数据库,它支持分片(sharding)和副本集(replica sets)来实现水平扩展和高可用性。分片是将数据分散到多个物理节点上,以处理大数据量和高并发场景;副本集则是为了...
首先,我们需要了解MongoDB分片的概念。在MongoDB中,分片(Sharding)是指将数据分布在多个物理节点上,以实现水平扩展,即增加存储容量和处理能力。每个分片可以看作是数据库的一部分,它们共同承载整个数据库的...
内容概要:本文提供了详细的MongoDB分片集群的搭建指导,涵盖了从环境准备、配置文件编写、副本集的建立、主节点的选择、配置服务器和数据分片服务器的配置到最后的路由节点的搭建与操作整个流程,以及对数据库的...
MongoDB分片副本集集群搭建的知识点包含了以下几个方面: 1. MongoDB分片架构的基本组成:MongoDB分片架构由mongos(路由服务器)、config-server(配置服务器)和shard(分片服务器)三部分组成。mongos负责作为...
MongoDB分片集群由以下组件组成: - **分片服务器(Shard)**:实际存储数据的MongoDB实例。 - **路由进程(Mongos)**:客户端与数据库之间的中间层,负责查询路由和数据分发。 - **配置服务器(Config Server...
以下是对MongoDB分片实例的详细说明: 1. **MongoDB 分片结构** - **客户端(Client)**:应用程序与MongoDB交互的接口。 - **mongos(路由服务器)**:作为客户端与数据存储之间的中间层,负责数据的路由和分发...