Mongodb集群中的分布式读写

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

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

复制集中的数据读取

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

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

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

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

复制集中的数据写入

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

分片集中数据读取

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

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

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

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

分片集中数据的写入

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百元蓝牙耳机推荐2024,百元蓝牙耳机排行榜盘点

在2024年面对琳琅满目的蓝牙耳机选项,消费者往往难以抉择,特别是在预算有限的情况下,如何在众多产品中挑选出既满足质量又符合预算的耳机成为了一个不小的挑战。 为了帮助大家在繁多的选择中找到真正物有所值的百元蓝牙耳机,我们…

vue响应式原理细节分享

在讲解之前,我们先了解一下数据响应式是什么?所谓数据响应式就是建立响应式数据与依赖(调用了响应式数据的操作)之间的关系,当响应式数据发生变化时,可以通知那些使用了这些响应式数据的依赖操作进行相关更…

【JavaEE】JVM

文章目录 一、JVM 简介二、JVM 运行流程三、JVM 运行时数据区1、堆(线程共享)2、Java虚拟机栈(线程私有)3、本地方法栈(线程私有)4、程序计数器(线程私有)5、方法区(线程…

# 音频处理4_傅里叶变换

1.离散傅里叶变换 对于离散时域信号 x[n]使用离散傅里叶变换(Discrete Fourier Transform, DFT)进行频域分析。 DFT 将离散信号 x[n] 变换为其频谱表示 X[k],定义如下: X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N X[k]…

.NET 漏洞情报 | 某整合管理平台SQL注入

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

揭秘Wish自养号秘诀:新手卖家如何快速出单?

对于卖家来说,如果想要提升店铺的转化率和销量,有几个关键策略是必不可少的: 一、精心挑选热销产品 成功的第一步在于选品。选择热销产品如同掌握了成功的钥匙。卖家需要深入分析平台用户群体,了解他们的需求和偏好。例如&#…

Tampermonkey 油猴脚本使用教程

Tampermonkey 油猴脚本使用教程 一、Tampermonkey 油猴脚本简介 Tampermonkey 是一款流行的浏览器扩展,它允许用户通过用户脚本增强网页功能或改变网页的外观。它支持包括 Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox 在内的多种浏览器。Tampermonkey…

【C++ 初阶路】--- C++内存管理

目录 一、C/C内存分布二、C内存管理方式2.1 new/delete操作内置类型2.2 new和delete操作自定义类型 三、operator new与operator delete函数四、new和delete的实现原理4.1 内置类型4.2 自定义类型 一、C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Tes…

大模型+多模态合规分析平台,筑牢金融服务安全屏障

随着金融市场的快速发展,金融产品和服务日趋多样化,消费者面临的风险也逐渐增加。 为保护消费者权益,促进金融市场长期健康稳定发展,国家监管机构不断加强金融监管,出台了一系列法律法规和政策文件。对于金融从业机构…

代码托管服务:GitHub、GitLab、Gitee

目录 引言GitHub:全球最大的代码托管平台概述功能特点适用场景 GitLab:一体化的开发平台概述功能特点适用场景 Gitee(码云):中国本土化的代码托管服务概述功能特点适用场景 功能对比结论 引言 在现代软件开发中&#…

Pickle, SafeTensor, GGML和GGUF

如今,大型语言模型的使用方式有以下几种: 作为 OpenAI、Anthropic 或主要云提供商托管的专有模型的 API 端点作为从 HuggingFace 的模型中心下载的模型工件和/或使用 HuggingFace 库进行训练/微调并托管在本地存储中作为针对本地推理优化的格式的模型工…

机器学习 中数据是如何处理的?

数据处理是将数据从给定形式转换为更可用和更理想的形式的任务,即使其更有意义、信息更丰富。使用机器学习算法、数学建模和统计知识,整个过程可以自动化。这个完整过程的输出可以是任何所需的形式,如图形、视频、图表、表格、图像等等&#…

Linux基础篇——目录结构

基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在根目录下再创建其他的目录 在Linux中,有一句经典的话:在Linux世界里,一切皆文件 Linux中根目录下的目录 具体的…

PHP留守儿童关爱之家网站-计算机毕业设计源码11079

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3 论文结构与章节安排 2 留守儿童关爱之家网站系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程和逻辑 2.5本章小结 3 留守儿童关爱之家网站总体设计 3.1系统结构设计 3.2系统功能模块设计 3.2 数…

基于SSM网上拍卖系统

设计技术: 开发语言:Java数据库:MySQL技术:SpringMybatisSpringMvc 工具:IDEA、Maven、Navicat 主要功能 管理员功能有个人中心,用户管理,卖家管理,商品类型管理,拍卖…

EDA 虚拟机 Synopsys Sentaurus TCAD 2017.09 下载

下载地址(制作不易,下载使用需付费,不能接受的请勿下载): 链接:https://pan.baidu.com/s/1327I58gvV1usWSqSrG7KXw?pwdo03i 提取码:o03i

AI网络爬虫001:用kimichat自动批量提取网页内容

文章目录 一、准备工作二、输入内容三、输出内容一、准备工作 在网页中按下F12键,查看定位网页元素 二、输入内容 在kimi中输入提示词: 你是一个Python编程专家,要完成一个爬取网页内容的Python脚本,具体步骤如下:在F盘新建一个Excel文件:提示词.xlsx打开网页:https:…

http.cookiejar.LoadError: Cookies file must be Netscape formatted,not JSON.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Linux】线程周边002之线程安全

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.Linux线程互斥 1…

Java实现日志全链路追踪.精确到一次请求的全部流程

广大程序员在排除线上问题时,会经常遇见各种BUG.处理这些BUG的时候日志就格外的重要.只有完善的日志才能快速有效的定位问题.为了提高BUG处理效率.我决定在日志上面优化.实现每次请求有统一的id.通过id能获取当前接口的全链路流程走向. 实现效果如下: 一次查询即可找到所有关…