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

幸狐RV1106开发板运行Yolo8示例

rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。

qq_42730522的博客 3224

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

FPGA远程升级避坑指南:用AXI Quad SPI IP读写N25Q128 Flash的完整流程

本文详细介绍了FPGA远程升级过程中使用AXI Quad SPI IP读写N25Q128 Flash的完整流程,包括IP核配置、Flash操作指令集、双镜像备份设计及生产级远程升级协议。通过最佳实践和避坑策略,帮助开发者实现可靠的镜像更新方案,提升系统可靠性和可维护性。

weixin_30542079的博客 673

华为ITR流程实战指南:从设计到落地的全流程解析(附完整方案下载)

本文深度解析华为ITR流程从设计到落地的全流程实战指南。ITR不仅是高效处理客户问题的“救火”系统,更是驱动产品改进、预防问题的企业“免疫系统”。文章详细拆解了流程设计的四步走策略、三层技术支持体系的组织保障、以闭环改进为核心的考核激励,并探讨了如何借鉴其精髓,优化自身问题管理,实现从被动响应到主动服务的跨越。

y2z3a4b5c的博客 379

MongoDB分片(Sharding)技术

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

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

FastAPI + LLM 实战:5分钟搞定本地模型API服务部署(含避坑指南)

本文详细介绍了如何使用FastAPI和LLM(大语言模型)快速部署本地API服务,涵盖环境准备、模型集成、性能优化及避坑指南。通过实战示例,帮助开发者在5分钟内完成从零到生产的部署过程,提升AI应用开发效率。

weixin_29062963的博客 104

Mongodb-sharding

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

weixin_43394724的博客 2306

DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

DDR的Controller、Channel、Chip、Bank、Rank、Row、Column、Sided、Dimm

张飞online博客 2万+

Camunda 7.x 系列【62】启动流程实例源码解析

为了更好的了解Camunda,接下来我们简单分析下启动流程实例相关源码

记录知识、锤炼自我 1174

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

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1712

MongoDB Sharding Cluster 分片集群

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

2402_88627342的博客 900

如何调试10G/25G以太网IP自协商/Link Training

如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

qq_43416206的博客 1509

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

weixin_39792472的博客 255

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MongoDB sharding分片

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

热气球 626

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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、付费专栏及课程。

余额充值