MongoDB分片 sharding

【MongoDB】Sharding分片概念及原理 面对海量的数据,如何提升数据读写效率?了解过DB的应该都知道数据库的分区,分区是主要提升数据查询的效率。面对海量数据的IO能力限制以及扩展性,Sharding是一个利器,我们不用关心具体的实现,从而实现性能的提升。Sharding不是一门技术,而是一个理念,解决数据的水平扩展,突破单节点的IO限制。很多成熟的NoSQL以及NewSQL就自带了sharding实现,使用者直接指定需要分片的字段,集群... 阅读详情

分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。

MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。应用程序不必知道哪片对应哪些数据,甚至不需要知道数据已经被拆分了,所以在分片之前要运行一个路由进程,该进程名为mongos。这个路由器知道所有数据的存放位置,所以应用可以连接它来正常发送请求。对应用来说,它仅知道连接了一个普通的mongod。路由器知道数据和片的对应关系,能够转发请求道正确的片上。如果请求有了回应,路由器将其收集起来回送给应用。

设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key)。

用个例子来说明这个过程:假设有个文档集合表示的是人员。如果选择名字("name")作为片键,第一片可能会存放名字以A~F开头的文档,第二片存的G~P的名字,第三片存的Q~Z的名字。随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。

mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在“config服务器”上。

mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。

1、创建三个目录,分别存放两个mongod服务的数据文件和config服务的数据文件

[wj@localhost data]$ sudo mkdir 20 21 22

启动两台实例服务器:

[wj@localhost data]$ sudo ./mongod --port 27020 --dbpath /usr/local/mongodb/data/20 --smallfiles --fork --logpath /usr/local/mongodb/logs/mongo20.log

[wj@localhost bin]$ sudo ./mongod --port 27021 --dbpath /usr/local/mongodb/data/21 --smallfiles --fork --logpath /usr/local/mongodb/logs/mongo21.log

准备configsvr

[wj@localhost bin]$ sudo ./mongod --port 27022 --dbpath /usr/local/mongodb/data/22 --configsvr --fork --logpath /usr/local/mongodb/logs/mongo22.log

准备mongos路由 configdb后面是configsvr的ip及端口

[wj@localhost bin]$ sudo ./mongos --port 30000 --configdb 192.168.125.128:27022 --fork --logpath /usr/local/mongodb/logs/mongo30.log

连接mongos路由

[wj@localhost bin]$ ./mongo --port 30000

添加分片shard

mongos> sh.addShard("192.168.125.128:27020");
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("192.168.125.128:27021");
{ "shardAdded" : "shard0001", "ok" : 1 }

查看分片状态

mongos> sh.status()

选择库分片

mongos> sh.enableSharding("shop");

指定分片的库的collection的片键

mongos> sh.shardCollection('shop.goods',{goods_id:1});

mongos> use shop

添加测试数据

mongos> for(var i=1;i<=30000;i++){db.goods.insert({goods_id:i,goods_name:'hello world afdjfdkfdjjfajdlfdsfdf'})}

mongos> db.goods.find().count();

mongos> use config

mongos> db.settings.find();

设置chuckSize大小为1M

mongos> db.settings.save({_id:'chunksize',value:1})

mongodb不是从单篇文档的级别,绝对平均的散落在各个片上,

而是N篇文档,形成一个块"chunk",

优先放在某个片上,

当这片上的chunk,比另一个片的chunk,区别比较大时, (>=3) ,会把本片上的chunk,移到另一个片上, 以chunk为单位,

维护片之间的数据均衡

问: 为什么插入了10万条数据,才2个chunk?

答: 说明chunk比较大(默认是64M)

在config数据库中,修改chunksize的值.

问: 既然优先往某个片上插入,当chunk失衡时,再移动chunk,

自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象,这将带来什么问题?

答: 服务器之间IO的增加,

接上问: 能否我定义一个规则, 某N条数据形成1个块,预告分配M个chunk,

M个chunk预告分配在不同片上.

以后的数据直接入各自预分配好的chunk,不再来回移动?

答: 能, 手动预先分片!

以shop.user表为例

1: sh.shardCollection(‘shop.user’,{userid:1}); //user表用userid做shard key

2: for(var i=1;i<=40;i++) { sh.splitAt('shop.user',{userid:i*1000}) } // 预先在1K 2K...40K这样的界限切好chunk(虽然chunk是空的), 这些chunk将会均匀移动到各片上.

3: 通过mongos添加user数据. 数据会添加到预先分配好的chunk上, chunk就不会来回移动了.

添加片后都需要手动分下片吗?configsvr和mongos单点安全可靠吗?replicaSet和sharding时主挂掉后会自动切换吗?

单机环境下构建和管理 MongoDB sharding 分片集步骤 MongoDB Sharding分片简介 MongoDB sharding是一种讲海量的数据水平扩展到数据库集群系统,数据分别存储在sharding的各个节点上,使用者通简单的配置就可以很方便地构建一个分布式MongoDB集群。 MongoDB的数据分块称为 chunk 。每个chunk都是collection中一段连续的数据记录,通常最大尺寸是200MB,超出则生成新的数 阅读详情

相关推荐

MongoDB Sharding 分片技术

1、概述

残缺的孤独 9124

手把手教你搭建MongoDB分片式部署集群+实战

MongoDB分片式集群部署实战,构建一个MongoDB的分片集群,需要三个重要组件,分别是分片服务器(Shard Server)、配置服务器(Config Server)、路由服务器(Router Server)。

Executing_的博客 8188

从传统扫描到SSN:Tessent数据包技术如何减少90%测试时间

本文深入探讨了Tessent流式扫描网络(SSN)如何通过其核心的数据包技术,彻底改变芯片测试范式。该技术将测试数据封装成标准化数据包,在共享总线上进行智能路由与分发,实现了动态带宽分配与核心独立测试,从而将复杂SoC(如AI芯片)的总体测试时间大幅削减90%,并显著提升测试灵活性与可扩展性。

meat5的博客 492

mongodb分片(sharding)搭建、应用及管理

1.启动shard server # mkdir -p /data/shard/s0 # mkdir -p /data/shard/s1 # mkdir -p /data/shard/log # cd /usr/local/mongodb/bin # ./mongod --shardsvr --port 20000 --dbpath /data/shard/s0 --fork --logpath...

数据库生态圈(RDB & NoSQL & Bigdata)——专注于关系库应用与研究(Oracle & Mysql & Postgresql & SQL Server ) 744

银河麒麟V10ARM架构服务器离线安装docker\nacos【附安装包】

本文分享了在银河麒麟ARM64操作系统上安装Docker和Nacos的完整过程。首先提供了Docker的自动化安装脚本,包含服务配置、存储路径设置等关键步骤,并给出了常用维护命令。接着详细介绍了通过Docker-compose部署Nacos的方法,包括镜像导入、配置文件修改、鉴权设置等注意事项,特别强调了密钥长度必须超过32个字符的要求。文章还提供了Nacos初次登录的注意事项,并预告了后续可能推出的Redis、Nginx等安装教程。所有配置文件和脚本均可直接下载使用,适合内网环境下国产操作系统的部署

weixin_39054697的博客 2344

利用VS2019编写安卓APP的步骤和所遇问题的解决办法

遇到了代码错误,这个可以将鼠标箭头置于错误代码处,这样VS2019给你解决办法,给的方法不能解决,并且读了程序都没有问题,那么你应该重启软件,这样还是不能解决,你尝试重新生成解决方案,还是不能解决有可能是运用的代码与当前版本不相符和、过时了,这个时候应当运用相应版本的代码。注:VS2019编写APP的空间不是很稳定,当你写的代码没有问题,但是出现了报错,可能是空间崩溃了,这个时候可以重启软件。点击“+”号,创建密钥存储,输入“别名”、“密码”、以及下面中的任意一项,直至红色框消失后。

youbestcando的博客 7813

MongoDB分片(Sharding)技术

C/C++Linux服务器开发/后台架构师知识体系整理 分片(sharding)是 MongoDB 用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但 MongoDB 分片完全又是另一回事。 和 MySQL 分区方案相比,MongoDB 的最大区别在于它几乎能自动完成所有事情,只要告诉 MongoDB 要分配数据,它就能自动维护数据在不同服务器之间的均衡。 1. MongoDB分片介绍 1.1 分片的目的 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力

C/C++Linux、音视频、DPDK 5924

《二、企业级监控系统之Prometheus监控node_exporter》

文章目录一、部署node_exporter服务二、部署prometheus服务2.1、部署node_exporter服务三、grafana之添加数据源四、grafana之导入监控模板五、grafana之修改模板变量六、grafana之修改仪表板变量总结 > 这里是引用 一、部署node_exporter服务 docker run -d --restart=always --name node_exporter --net=“host” --pid=“host” -v “/:/host:ro,

东城绝神 1万+

Mongodb-sharding

Practical MongoDB Aggregations Book 概述 分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。 MongoDB分片群集包含以下组件: 分片(存储):每个分片包含分片数据的子集。 每个分片都可以部署为副本集。 mongos(路由):mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口 config servers(“调度”的配置):配置服务器存储群集的元数据和配置设置。 从MongoD

weixin_43394724的博客 2306

YOLOv11的嗅觉传感器数据关联-(特殊场景下的气味-视觉联合分析)

摘要 本文探讨了YOLOv11与嗅觉传感器融合的多模态感知技术。通过分析YOLOv11的架构特性与嗅觉传感器的数据特点,提出了三种融合策略:数据级、特征级和决策级融合。系统采用硬件同步方案实现时空对齐,包含视觉采集模块、嗅觉传感模块和边缘计算单元。环境配置基于Python 3.9和PyTorch 2.0,支持实时多模态数据处理。该技术可应用于环境监测、工业检测等场景,突破单一视觉感知的局限性。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 626

Windows 11 - 打开操作安全中心提示 “需要使用新应用以打开此 Windowsdefender 链接“ 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开)

Windows 11 - 打开操作安全中心提示 "需要使用新应用以打开此 Windowsdefender 链接" 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开),当您点击任务栏上要关闭安全中心防护设置时,这种情况打不开怎么解决,怎么办,Windows安全中心,病毒和威胁保护,账户保护,防火墙和网络保护,设备安全性。

🏆 前端领域优质创作者 1万+

T-sql之创建表以及其他简单功能

create table [table] ( --      自动增长(种子,增量) cId int identity(1,1) primary key,  --主键 cName nvarchar(10) not null, cDescription nvarchar(200) )   use  databasename   切换数据库操作   decimal(18,0)

chaojishuaigeli的专栏 459

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 330

MongoDB Sharding Cluster 分片集群

将MongoDB的分片和复制功能结合使用,在确保数据分片到多台服务器的同时,也确保了每份数据都有相应的备份,这样就可以确保有服务器坏掉时,其他的从库可以立即接替坏掉的部分继续工作。mongos就是掌握统一路口的路由器,其会将客户端发来的请求准确无误的路由到集群中的一个或者一组服务器上,同时会把接收到的响应拼装起来发回到客户端。哈希索引适合单调变化的字段,例如自增值,时间值等(因为可以将单调的字段通过hash函数映射到不同的块上去,从而分散写入压力,例如下图,虽然数据连续,但是写入了不同的数据块中)

2402_88627342的博客 900

Linux ARM平台开发系列讲解(网络篇)1.3 MDIO总线设备device和设备driver匹配

在设备和驱动都载入内核后,设备和驱动是如何匹配起来的呢?其实他们就是通过的唯一标识phyID进行匹配phy_dev和phy_drv是通过phy_bus_match函数进行匹配,匹配成功后会建立链表链接,具体流程如下图: 返回总目录......

DSMGUOGUO的博客 1098

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mongodb 集群shard_MongoDB之分片集群(Sharding)

MongoDB之分片集群(Sharding)一、基本概念分片(sharding)是一个通过多台机器分配数据的方法。MongoDB使用分片支持大数据集和高吞吐量的操作。大数据集和高吞吐量的数据库系统挑战着单一服务的性能。例如:高查询率将耗尽CPU的性能。大于系统RAM的工作集将给磁盘的IO很大的压力。应对系统的增长有两个方法:垂直扩展和水平扩展。垂直扩展的方法是提升单一服务的性能,例如:使用一个更强...

weixin_39792472的博客 255

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MongoDB sharding分片

有了副本集为什么要用分片? 分片(一个数据 存放在三个地方 共同存储为一个整体 类似于raid0的存储方式) 1、副本集利用率不高 2、主库的读写压力大 优点:资源利用率高了 读写压力负载均衡 横向水平扩展 缺点: 理想状态下需要的机器比较多 配置和运维都变的及其复杂 一定要提前规划好,一旦建立后再想改变架构就变得困难了 分片的原理 1、用户mongos(访问代理),提供一个统一的入口,本身没有数据目录,不存放数据;只是做了一个逻辑整合(类似于mycat);但是mongos容易出现单节点故障,解决方法:

热气球 626

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MongoDB分片(Sharding)全面解析:从原理到实战

MongoDB分片技术解析:实现PB级数据水平扩展 摘要:MongoDB分片技术通过水平分割数据到多个服务器集群,解决了单机存储和性能瓶颈问题。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 8119

mongodb 集群shard_mongodb sharding cluster(分片集群)

MongoDB的auto-sharding功能是指mongodb通过mongos自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。通过把Sharding和Replica Sets相结合,可以搭建一个分布式的,高可用性,自动水平扩展的集群。要构建MongoDB Sharding Cluster,需要三种角色:Shard Server: mongod 实例, 使用 ...

weixin_39602967的博客 202

MongoDB之——Sharding 分片

转载请注明出处:https://blog.youkuaiyun.com/l1028386804/article/details/80016926这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在 sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式 MongoDB 集群。MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的...

冰河的专栏 1570

MongoDB sharding 集合不分片性能更高?

最近云上用户用户遇到一个 sharding 集群性能问题的疑惑,比较有代表性,简单分享一下 测试配置 mongos x 2、shard x 3 测试1:集合不开启分片,批量 insert 导入数据,每个 batch 100 个文档 测试2:集合开启分片,随机生成 shardKey,chunk 已提前 split 好,能确保写入均分到3个shard 测试结果 测试1:单个 shard cp...

数据库技术 342

MongoDB---Sharding分片

sharding分片技术,是mongodb对海量存储的

Python专栏 1192

MongoDB管理与开发精要《红丸出品》22.6 Sharding分片之管理维护

22.6 管理维护Sharding 22.6.1列出所有的Shard Server > db.runCommand({ listshards: 1 })        --列出所有的Shard Server {         "shards" : [                 {                         "_id" : "shard000

红丸的专栏 739

MongoDB Sharding Cluster 分片集群【MSC】

文章目录接上一篇博文整理---》7. MongoDB Sharding Cluster 分片集群7.1 规划7.2 Shard节点配置过程7.2.1 目录创建:7.2.2 修改配置文件:第一组复制集搭建:21-23(1主 1从 1Arb)第二组节点:24-26(1主1从1Arb)7.2.3 启动所有节点,并搭建复制集7.3 config节点配置7.3.1 目录创建7.3.2修改配置文件:7.3.3...

Kason_iWiki 598
上一篇: MongoDB index
下一篇: mongo副本集replicaset
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值