MongoDB实战(11)Sharding 分片(上)

这是一种将海量的数据水平扩展的数据库集群系统数据分表存储在sharding的各个节点上使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。MongoDB的数

这是一种将海量的数据水平扩展的数据库集群系统数据分表存储在sharding 的各个节点
上使用者通过简单的配置就可以很方便地构建一个分布式mongodb 集群。

 

MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录通
常最大尺寸是 200MB超出则生成新的数据块。

要构建一个 MongoDB Sharding Cluster需要三种角色

1、 Shard Server

即存储实际数据的分片每个Shard 可以是一个mongod 实例也可以是一组mongod 实例
构成的Replica Set。为了实现每个Shard 内部的auto-failoverMongoDB 官方建议每个Shard
为一组Replica Set。

2、 Config Server

为了将一个特定的collection 存储在多个shard 中需要为该collection 指定一个shard key
例如{age: 1} shard key 可以决定该条记录属于哪个chunk。Config Servers 就是用来存储
所有shard 节点的配置信息、每个chunk 的shard key 范围、chunk 在各shard 的分布情况、
该集群中所有DB 和collection 的sharding 配置信息。

 3、Route Process

这是一个前端路由客户端由此接入然后询问Config Servers 需要到哪个Shard 上查询或
保存记录再连接相应的Shard 进行操作最后将结果返回给客户端。客户端只需要将原本
发给mongod 的查询或更新请求原封不动地发给Routing Process而不必关心所操作的记录
存储在哪个Shard 上。

下面我们在同一台物理机器上构建一个简单的 Sharding Cluster
架构图如下

Cutout老照片上色 Cutout老照片上色

Cutout.Pro推出的黑白图片上色

Cutout老照片上色 20 查看详情 Cutout老照片上色

122705926.png

创建数据目录和日志目录

124012876.png

启动Shard Server 实例1和实例2

124222845.png

124254225.png

启动Config Server

124742286.png

启动Route Process

125115112.png

mongos 启动参数中chunkSize 这一项是用来指定chunk 的大小的单位是MB默认大小
为200MB为了方便测试Sharding 效果我们把chunkSize 指定为 1MB。

 

配置Sharding

接下来我们使用MongoDB Shell 登录到mongos添加Shard 节点

130030357.png

 

验证Sharding正常工作

我们已经对test.users 表进行了分片的设置下面我们们插入一些数据看一下结果

130727533.png

130939540.png

我们看一下磁盘上的物理文件情况

131340955.png

看上述结果表明test.users 集合已经被分片处理了但是通过mongos 路由我们并感觉
不到是数据存放在哪个shard 的chunk 上的这就是MongoDB 用户体验上的一个优势即
对用户是透明的。

 

 

 

 

本文出自 “phper-每天一点点~” 博客,请务必保留此出处

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/536106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 12:52:37
下一篇 2025年11月9日 12:53:38

相关推荐

  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • 使用HTML表单GET方法创建带查询参数的动态搜索链接

    本教程详细阐述了如何在网页中,通过简单地将HTML表单的提交方法从`POST`更改为`GET`,来自动生成包含用户选择搜索条件的动态URL查询参数。这使得搜索结果页面的链接可分享、可收藏,并简化了%ignore_a_1%生成复杂URL的逻辑,后端可直接从URL中解析查询参数进行数据检索。 引言:动态…

    2025年12月23日
    000
  • Web表单提交:如何利用GET方法构建动态查询链接

    本文将指导您如何利用html表单的get方法,根据用户输入的搜索条件动态生成带有查询参数的url。当用户在表单中输入数据并提交时,get方法会自动将表单字段及其值附加到url作为查询字符串,从而创建如`/search?param1=value1&param2=value2`的链接。这对于实现…

    2025年12月23日
    000
  • Node.js中多字段多文件上传与MongoDB路径存储:Multer实践指南

    本教程详细讲解如何在node.js中使用multer处理html表单中的多字段文件上传,并将文件保存到服务器指定目录。核心内容包括multer配置,express路由集成,以及如何在控制器中正确获取上传文件信息并将其存储路径而非文件本身的数据存入mongodb,优化数据库性能和可维护性。 在现代We…

    2025年12月23日
    000
  • Node.js 多字段图片上传与 MongoDB 路径存储实践教程

    本教程详细阐述了如何在 Node.js 环境下,利用 Multer 中间件处理来自 HTML 表单的多个文件字段上传,并将图片分别存储到服务器的不同目录。更重要的是,教程纠正了直接将图片二进制数据存入 MongoDB 的常见误区,转而采用最佳实践——仅在数据库中存储图片的文件路径,从而优化数据库性能…

    2025年12月23日
    000
  • MongoDB/Mongoose中从数组中按ID删除子文档的教程

    本教程详细阐述了如何在mongodb/mongoose环境中,从一个文档的嵌套数组中,根据子文档的_id删除特定对象。我们将利用mongoose自动生成的_id字段和mongodb的$pull操作符,通过构建后端api路由,实现对特定子文档的精确、高效删除,并提供前端集成示例。 在构建复杂的应用程序…

    2025年12月23日
    000
  • 在MongoDB中通过子文档ID删除数组中的对象

    在MongoDB中处理复杂的数据结构时,我们经常会遇到需要在文档内部的数组中存储一系列子文档(或称内嵌文档)的场景。例如,在一个电影数据库中,一部电影文档可能包含一个`references`数组,其中每个元素都是一个描述电影引用的独立对象。当需要删除某个特定引用而非整个电影文档时,就需要一种精确的方…

    2025年12月23日
    000
  • MongoDB中通过子文档ID从数组删除对象的教程

    本教程详细介绍了如何在%ignore_a_1%中,利用mongoose框架从父文档的数组字段中删除特定的子文档。我们将探讨mongodb的`$pull`操作符,并提供完整的服务器端(node.js/express)和客户端(ejs)代码示例,指导你如何通过子文档的`_id`高效地移除数组中的元素,确…

    2025年12月23日
    000
  • 从MongoDB数组中按ID删除内嵌文档的教程

    本教程详细介绍了如何在mongodb中使用mongoose和`$pull`操作符,从一个文档的数组字段中删除特定的内嵌文档。我们将通过一个电影参考数据库的示例,演示如何根据内嵌文档的唯一id(`_id`)来精准定位并移除数组中的元素,确保数据管理的精确性和效率。 在构建数据库应用程序时,经常会遇到需…

    2025年12月23日
    000
  • HTML数据如何实现数据智能 HTML数据智能分析的技术架构

    实现HTML数据智能分析需构建包含采集、解析、存储、分析与可视化的闭环系统,首先通过爬虫技术获取网页数据并进行清洗标准化,接着利用DOM树分析与NLP技术提取结构化信息,随后将数据存入合适数据库或数据仓库并建立元数据管理机制,进而应用AI模型开展分类、情感分析、趋势预测与知识图谱构建等智能分析,最终…

    2025年12月23日
    000
  • HTML数据如何构建数据市场 HTML数据市场平台的架构设计

    答案是构建HTML数据市场需整合采集、管理、交易与合规体系,通过爬虫或上传获取网页数据,利用解析引擎将HTML转为结构化信息并标注元数据,依托分布式存储与版本控制保障数据可用性,建立索引分类和质量评估机制提升检索效率,通过商品发布、搜索推荐、API服务和计费系统实现数据流通,同时遵守法律规范,实施身…

    2025年12月23日
    000
  • HTML数据如何构建数据生态 HTML数据生态系统的建设思路

    HTML数据本身是网页内容的载体,但要将其转化为可用的数据资产并构建完整的数据生态系统,需要系统化的采集、处理、整合与应用流程。关键在于将静态的HTML内容动态化、结构化,并与其他数据源打通,形成可持续更新和高效利用的数据闭环。 1. 数据采集:从HTML中提取有效信息 构建HTML数据生态的第一步…

    2025年12月23日
    000
  • HTML数据如何实现分布式采集 HTML数据分布式爬虫的架构设计

    答案:构建分布式HTML采集系统需整合任务调度、去重、存储与监控模块,以Redis为核心协调任务分发与去重,通过消息队列实现负载均衡,结合布隆过滤器减少重复抓取,利用无状态工作节点支持弹性扩展,依托ZooKeeper保障高可用,并集成反爬适配与请求控制机制,确保系统稳定高效运行。 要实现HTML数据…

    好文分享 2025年12月23日
    000
  • HTML5在线如何添加实时编辑功能 HTML5在线协作工具的集成方案

    实现实时编辑需结合WebSocket与协同算法,核心是内容同步和冲突解决。2. 使用WebSocket实现低延迟通信,用户操作实时发送至服务器并广播给其他客户端。3. 冲突处理推荐CRDT或OT算法,CRDT因逻辑简单、天然无冲突更适用于现代系统。4. 集成Y%ignore_a_1%等成熟库可快速搭…

    好文分享 2025年12月23日
    000
  • 如何实现HTML在线编辑功能_HTML在线编辑功能实现方法与技术选型指南

    答案:实现HTML在线编辑需选型富文本编辑器如TinyMCE、Quill或CKEditor,通过前端获取HTML字符串并经AJAX提交,后端存储至数据库,同时使用DOMPurify防范XSS攻击,结合实时预览与样式隔离提升体验,并可扩展图片上传、代码高亮等功能。 要实现HTML在线编辑功能,核心是提…

    2025年12月23日
    000
  • 如何实现HTML在线协作编辑_HTML在线协作编辑实现技术与实时同步方案

    实现HTML在线协作编辑需选型合适编辑器并构建实时同步体系。推荐Tiptap + Yjs组合,基于CRDT模型实现无冲突数据合并,通过WebSocket或Socket.IO建立低延迟通信,配合Y-WebRTC/Y-Socket.IO完成多端状态同步,后端可用Node.js搭建中继服务器,必要时结合M…

    2025年12月23日
    000
  • Node.js中基于JWT和Cookie实现持久化登录状态管理与免登录访问

    本文详细阐述了如何在node.js应用中,利用jwt(json web tokens)和cookie实现持久化的用户登录状态管理,从而避免用户在每次访问时重复登录。通过引入一个认证中间件,我们能够有效地检查用户是否已通过有效令牌进行身份验证,并据此控制页面访问权限,实现无缝的用户体验,同时提供了登出…

    2025年12月23日
    000
  • 使用FastAPI实现POST请求后文件下载的教程

    本文详细介绍了在fastapi中处理post请求后下载文件的两种主要方法。第一种是直接使用`fileresponse`返回文件,适用于简单场景,通过设置`content-disposition`头部实现强制下载,并探讨了内存加载和流式传输大文件的替代方案。第二种是异步下载模式,通过post请求生成文…

    2025年12月23日
    000
  • Spring Boot中将特定字段映射到HTML页面:DTO与视图渲染实践

    本文将深入探讨如何在Spring Boot应用中,从后端实体中选择性地提取特定字段,并将其高效且安全地渲染到HTML页面。我们将重点介绍数据传输对象(DTO)作为最佳实践,结合Spring MVC控制器和模板引擎(如Thymeleaf),实现数据展示层与业务逻辑的解耦,并讨论其他序列化控制策略。 1…

    2025年12月22日
    000
  • Spring Boot中将后端数据特定字段映射到HTML页面教程

    本教程详细阐述了如何在Spring Boot应用中,利用Thymeleaf模板引擎将后端服务获取的数据,仅提取并展示其特定字段(如标题和描述)到前端HTML页面。通过重构控制器方法并设计相应的HTML模板,实现数据与视图的有效分离与定制化渲染,同时辨析了@JsonIgnore注解的适用场景。 问题背…

    2025年12月22日
    000

发表回复

登录后才能评论
关注微信