Mongodb集群中的分布式读写

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第81篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

本文简单介绍Mongodb的分布式操作。mongodb支持复制集和分片集合,本文结合官方文档,整理介绍复制集和分片结合的数据读取。

复制集中的数据读取

默认情况下,应用链接到复制集后,从复制集的主节点承担了客户端或应用的数据读写操作。mongodb允许用于指定参数readpreferences来通过复制集中的其他节点来读取数据。

同样用户可以设置readpreferences参数,将读取操作转移到从节点或与主节点最近的节点来实现下面的操作目的

  • 减少多数据中心数据同步的延迟
  • 将大量的读取操作分配的主节点以外的节点,从而提高读取数据吞吐量
  • 在从节点做数据备份
  • 当主节点切换时,直到新的主节点选出来以后才可以读取数据。

在复制集从节点读取数据时,因为数据变更从主节点同步到从节点需要时间和过程,因此读取数据的状态可能不是最新的状态。同样因为数据同步的延迟,在从节点中读取到的数据可能不是单调连续的。客户端可以使用数据一致性的session设置,保证数据读取的正确性。当然,使用从节点读取数据时,客户端可以按照数据库连接或操作来设置。用户可以参考相关的文档来设定不同的参数。

复制集中的数据写入

在复制集中,所有的写入操作都是发生在主节点。主节点执行写入操作,同时将操作记录在主节点的操作日志当中。操作日志是一个可重现的顺序操作的集合。从节点持续的将操作日志同步到自己的节点,并依据操作日志当中记录下来的事件,将数据变更同步写入到自己节点的数据集中。用户可以指定mongodb主节点通知用户数据变更完成的方式。比如,当主节点数据写入完成后,就返回写入结果给客户,或者在最近的一个从节点完成后,将数据变更结果返回给客户。

分片集中数据读取

分片集允许用户将数据分成不同的数据块,保存到分片集的不同节点当中。这种方式对应用和数据库客户端来说是透明的。数据分块保存发生在数据库集群当中。在复制集当中,用户的操作是针对集群中的一个mongos服务实例的。mongos服务实例,依据数据分块时产生的元数据,将请求派发到不同的节点。

当用户指定具体的数据分片时,mongodb分片集无需再次确认到哪个节点中读取数据,这样读取操作会变得很高效。针对分片集群的查询应该带上分片键。带有分片键的查询,mongos可以用过分片元数据将查询分配到具体的分片节点当中。

对于没有分片键的查询,mongodb分片集群不得不查询集群中所有的节点。这样从每个分片节点收集数据,会变得很低效。在大型分片集群当中,这种分散收集的方式是不可行的。

与复制集类似,分片集在从节点中读取到的数据可能无法反应数据最新的状态。在从节点中读取的数据,也无法保证是单调一致的。用户可以使用一致性会话,保证数据读取的一致性。

分片集中数据的写入

在分片集合中,mongos直接将应用或客户端发过来的数据写到对应的数据分片中。mongos通过元数据配置库,找到数据应该写入的节点,将写入数据的操作派发到该节点。

Mongodb依据用户指定的分片键,将数据分成不同的数据块。然后将这些数据块保存到不同的分片节点中。分片键决定了数据块写入的节点。mongodb分片集写入数据时,会影响集群的性能。

mongodb数据更新单个文档数据时,必须要包含分片键或主键。多文档数据的更新时,带有分片键在某些情况下会提高效率。多文档数据更新也有可能被发到每一个分片服务上。

如果分片键的值每个插入操作都增加或减少,那么所有的这些插入操作会产生一个新的数据分片。这样来说,单个插入操作的容量,就会被限制为分片的容量。

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

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

相关文章

Java进阶学习|Day3.Java集合类(容器),Stream的使用,哈希初接触

java集合类(容器) Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现类&#xf…

Powershell 简易爬虫,提取种子网站的磁力链接

目录 一. 需求二. 分析2.1 思路分析2.2 技术点 三. 代码四. 效果 一. 需求 ⏹有网站如下所示,先要求从按照关键词搜索到的网页中,提取出所有的磁力链接。 二. 分析 2.1 思路分析 打开网页之后,从网页中先提取出所有的标题相关的url然后再打…

linux驱动部分内容整理

文章目录 Linux驱动概念应用程序调用驱动程序流程驱动模块的加载linux设备号加载和卸载注册新字符设备注册设备节点自动创建设备节点编译编译驱动程序编译应用程序 地址映射ioctrl命令码的解析 并发与竞争原子操作自旋锁信号量互斥体 linux中断DMA映射其它printkmemcpyvolatile…

RocketMQ常用基本操作

文章中的rabbitmq使用的是rocketmq-all-5.1.3-bin-release版本,需要安装包的可自行下载 RockerMQ启动停止命令 启动命令 nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n localhost:9876 --enable-proxy & 查看日志 tail -f ~/logs/rocketmqlogs/…

明星中药企业系列洞察(九)一手好牌打的稀烂!近500年老字号锁定退市,太安堂为何“塌房”了?

近日,太安堂发布公告称,公司已收到深交所下发的《关于广东太安堂药业股份有限公司股票终止上市的决定》,深交所决定终止公司股票上市,预计其最后交易日期为7月4日。太安堂曾作为国内知名的中成药上市公司之一,是国家级…

matlab仿真 通信信号和系统分析(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第三章内容,有兴趣的读者请阅读原书) 一、求离散信号卷积和 主要还是使用卷积函数conv,值得注意的是,得到的卷积和长度结果为81&#xff0…

node.js+uniapp(vue),阿里云短信验证码

reg.vue: 思路是&#xff1a;前端调用获取验证码的接口 > 后端生成验证码返回给前端 > 前端渲染验证码 <template> <div> <input class"sl-input" v-model"phone" type"tel" maxlength"11" placeholder"手…

微信小程序毕业设计-微信食堂线上订餐系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【在线评论】不同视角下在线评论对客户满意度和推荐度的影响—推文分析—2024-07-01

今天的推文主题是【在线评论】&#xff0c;重点关注可以关注第四篇&#xff0c;很全面地分析了在线评论的信息多维性。 第一篇从客户的在线评论入手&#xff0c;将客户消费的动机为功利、享受、社会满足&#xff1b;第二篇是关于在线评论对消费者再次选择同一家酒店的机制探索…

MySQL之主从同步、分库分表

1、主从同步的原理 MySQL主从复制的核心是二进制日志 二进制日志&#xff08;binlog&#xff09;记录了所有DDL语句和DML语句&#xff0c;但不包括数据查询&#xff08;select、show&#xff09;语句。 1.1、复制分三步 master主库在事务提交时&#xff0c;会把数据变更记录…

电子战学习笔记01:电子战概论

0、写在文前 本人在学习电子战相关理论知识时&#xff0c;一直感觉无从下手&#xff0c;之后在老师的推荐下购买了《EW101&#xff1a;电子战基础》纸质书籍学习&#xff0c;所以将自己的学习笔记在CSDN上记录一下&#xff0c;也供有需要的同学参考。 1、电子战定义 电子战&…

全网最详细的 gin框架请求数据绑定Bind 源码解析 -- 帮助你全面了解gin框架的请求数据绑定原理和方法

在gin框架中&#xff0c;我们可以将多种请求数据&#xff08;json, form,uri&#xff0c;header等&#xff09;直接绑定到我们定义的结构体&#xff0c;底层是通过反射方式获取我们定义在结构体上面的tag来实现请求数据到我们的结构体数据的绑定的。 在gin的底层有2大体系的数据…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后&#xff0c;常常会通过pip install命令安装第三方模块&#xff0c;大多数模块可以直接安装&#xff0c;但许多新同学仍会遇见某些模块需要实时编译后才能安装&#xff0c;如报错信息大概是缺乏C编译环境&#xff0c;本文则…

【Elasticsearch】Elasticsearch索引创建与管理详解

文章目录 &#x1f4d1;引言一、Elasticsearch 索引的基础概念二、创建索引2.1 使用默认设置创建索引2.2 自定义设置创建索引2.3 创建索引并设置映射 三、索引模板3.1 创建索引模板3.2 使用索引模板创建索引 四、管理索引4.1 查看索引4.2 更新索引设置4.3 删除索引 五、索引别名…

Go-知识测试-性能测试

Go-知识测试-性能测试 1. 定义2. 例子3. testing.common 测试基础数据4. testing.TB 接口5. 关键函数5.1 testing.runBenchmarks5.2 testing.B.runN5.3 testing.B.StartTimer5.4 testing.B.StopTimer5.5 testing.B.ResetTimer5.6 testing.B.Run5.7 testing.B.run15.8 testing.B…

监听蓝牙对话的BlueSpy技术复现

本文是之前文章的BlueSpy技术的复现过程&#xff1a;https://mp.weixin.qq.com/s/iCeImLLPAwwKH1avLmqEpA 2个月前&#xff0c;网络安全和情报公司Tarlogic在西班牙安全大会RootedCon 2024上提出了一项利用蓝牙漏洞的BlueSpy技术&#xff0c;并在之后发布了一个名为BlueSpy的概…

git 提交代码忽略eslint代码检测

在暂存代码的时候会出现以上情况因为在提交代码的时候会默认运行代码进行检测&#xff0c;如果不符合代码规范就会进行报错 解决&#xff1a; 使用 git commit --no-verify -m xxx 忽略eslint的检测

Laravel 谨慎使用Storage::append()

在 driver 为 local 时&#xff0c;Storage::append()在高并发下&#xff0c;会存在丢失数据问题&#xff0c;文件被覆写&#xff0c;而非尾部添加&#xff0c;如果明确是本地文件操作&#xff0c;像日志写入&#xff0c;建议使用 Illuminate\Filesystem\Filesystem或者php原生…

邀请函 | 极限科技全新搜索引擎 INFINI Pizza 亮相 2024 可信数据库发展大会!

过去一年&#xff0c;在全球 AI 浪潮和国家数据局成立的推动下&#xff0c;数据库产业变革不断、热闹非凡。2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;“2024 可信数据库发展大会” 将于 2024 年 7 月 16-17 日在北京悠唐皇冠…

肆拾玖坊的商业模式,49坊新零售奖金制度体系,众筹众创+会员制

肆拾玖坊之所以能够在短时间内成为白酒行业的“现象级”企业,,不仅是依靠独特商业模式,同时也依靠的是坚持用户为核心,围绕用户需求,让用户与产品直接产生连接理念。 坐标&#xff1a;厦门&#xff0c;我是易创客肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工…