当前位置: 首页 > news >正文

【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备

MongoDB的配置服务器

引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。
在这里插入图片描述
MongoDB的配置服务器有一个很大的优点,就是主节点崩溃了,它也可以继续提供读服务
大多数中间件的主从结构都是在主节点崩溃之后完全不可用,直到选举出了一个新的主节点。
但是不管怎么说,配置服务器在MongoDB里是一个非常关键的组件,如果一旦配置服务器有问题,哪怕只是轻微地性能抖动一下,对整个MongoDB集群的影响都很大。

MongoDB的复制机制(主从机制)

MongoDB的副本也是MongoDB实例,它们和主实例持有一样的数据。在MongoDB里,用Primary来代表主实例,用Secondary来代表副本实例。主从实例合并在一起,也叫做一个复制集(Replica Set)
在这里插入图片描述
类似于数据库的读写分离机制,可以在MongoDB上进行读写分离。读从Secondary0实例读,写入Primary实例,同时Secondary0和Secondary1从Primary实例里同步数据
在这里插入图片描述
在MongoDB里,主从之间的数据同步是通过所谓的oplog来实现的,类似MySQL的binlog。但是oplog会有一些缺点:

  1. 在一些特定的操作里,oplog可能会超乎想象地大。这主要是因为oplog是幂等的,所以任何操作都比要转化为幂等操作。简单来说,任何对MongoDB里数据的操作,最后都会被转化成一个set操作。所以可以预计的是,就是只更新了数据的一小部分,但是生成的oplpg还是set整个数据。
  2. oplog是有期限的,即MongoDB限制了oplog的大小。当oplog占据了太多的磁盘之后,就会被删除。就算某个从节点来不及同步,oplog也是会被删除的。这个时候,这个从节点只能重新发起一次全量的数据同步

写入语义

和Kafka的写入语义非常像,可以通过参数来控制写入数据究竟写到哪里,写入语义对性能、可用性和数据可靠性有显著的影响。
在MongoDB里,写入语义也叫Write Concern,它由w、j和wtimeout三个参数控制。

w参数

它的取值如下:

  1. majority:要求写操作已经同步给大部分节点,默认取值,可用性强,但是写入性能差
  2. 数字N:如果N=1,要求必须写入主节点;如果N大于1,那么就必须写入主节点,而且写入N-1个从节点;如果N=0,那么就不用等任何节点写入。性能很好,但是虽然客户端收到了成功的响应,数据也有可能丢失。
  3. 自定义写入节点策略:可以给一些节点打上标签,然后要求写入的时候一定要写入带有这些标签的节点,实践中用的较少

j参数

控制数据有没有被写到磁盘上,对于j来说它的取值就是true或false

wtimeout参数

写入的超时时间,只会在w>1的时候生效。
在超时之后MongoDB就直接返回一个错误,但是这种情况下,MongoDB可能还是写入数据成功了

面试准备

  • 负责的业务或公司有没有使用MongoDB,主要用来做什么
  • 为什么要用MongoDB,用MySQL可以吗
  • 用MongoDB的时候,文档支持分片吗?如果支持的话,按什么来分片的?
  • 业务有多少数据量,并发有多高?
  • MongoDB怎么部署的,主从节点有多少?有没有多数据中心的部署方案?
  • MongoDB的写入语义,即w和j这两个参数的取值

面试话题引导

  • Kafka的acks机制,可以引申到MongoDB的写入语义上
  • 其他中间件的对等结构,或主从结构,可以引导到MongoDB的分片和主从机制上
  • Kafka的元数据,可以结合MongoDB的元数据一起回答
  • MongoDB数据不丢失的问题,可以结合写入语义来回答,参考Kafka分析的思路。

在整个MongoDB的面试过程中,注意和不同的中间件进行对比,凸显在这方面的积累

相关文章:

【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备

MongoDB的配置服务器 引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…...

视频监控汇聚平台LntonCVS视频监控业务平台具体有哪些功能?

LntonCVS视频监控平台是一款基于H5技术开发的专业安防视频监控产品,旨在为安防视频监控行业提供全面的解决方案。以下是平台的主要功能和特点: 1. 统一接入管理: - 支持国内外各种品牌、协议和设备类型的监控产品统一接入管理。 - 提供标准的…...

我不小心把生产的数据改错了!同事帮我用MySQL的BinLog挽回了罚款

之前在生产做修改数据的时候不小心改错了一行数据,本来以为会被通报批评,但是同事利用binlog日志查看到了之前的旧数据,并且帮我回滚了,学到了,所以写了一篇binlog的文章分享给大家。 MySQL的Binary Log(简…...

Windows系统安装NVM,实现Node.js多版本管理

目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…...

k8s部署单节点redis

一、configmap # cat redis-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-single-confignamespace: redis data:redis.conf: |daemonize nobind 0.0.0.0port 6379tcp-backlog 511timeout 0tcp-keepalive 300pidfile /data/redis-server.pidlogfile /d…...

云微客矩阵系统:如何利用智能策略引领营销新时代?

近些年,短视频行业的风头一时无二,大量的商家和企业进驻短视频赛道,都或多或少的实现了实体门店的流量增长。虽然说现在短视频的门槛在逐步降低,但是迄今为止依旧有很多人在短视频剪辑面前望而却步。 最近在短视频营销领域&#x…...

嵌入式Linux系统编程 — 6.3 kill、raise、alarm、pause函数向进程发送信号

目录 1 kill函数 1.1 kill函数介绍 1.2 示例程序 2 raise函数 2.1 raise函数介绍 2.2 示例程序 3 alarm函数 3.1 alarm函数介绍 3.2 示例程序 4 pause函数 4.1 pause函数介绍 4.2 示例程序 与 kill 命令相类似, Linux 系统提供了 kill()系统调用&#…...

Swoole实践:如何使用协程构建高性能爬虫

随着互联网的普及,web爬虫已经成为了一个非常重要的工具,它可以帮助我们快速地抓取所需要的数据,从而降低数据获取成本。在爬虫的实现中,性能一直是一个重要的考虑因素。swoole是一款基于php的协程框架,它可以帮助我们…...

基于人脸68特征点识别的美颜算法(一) 大眼算法 C++

1、加载一张原图&#xff0c;并识别人脸的68个特征点 cv::Mat img cv::imread("5.jpg");// 人脸68特征点的识别函数vector<Point2f> points_vec dectectFace68(img);// 大眼效果函数Mat dst0 on_BigEye(800, img, points_vec);2、函数 vector<Point2f&g…...

算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 在算法模型构建中&#xff0c;我们经常需要计算样本之间的相似度&#xff0c;通常的做法是计算样本之间的距…...

项目实战--Spring Boot大数据量报表Excel优化

一、项目场景 项目中要实现交易报表&#xff0c;处理大规模数据导出时&#xff0c;出现单个Excel文件过大导致性能下降的问题&#xff0c;需求是导出大概四千万条数据到Excel文件&#xff0c;不影响正式环境的其他查询。 二、方案 1.使用读写分离&#xff0c;查询操作由从库…...

C#编程技术指南:从入门到精通的全面教程

无论你是编程新手&#xff0c;还是想要深化.NET技能的开发者&#xff0c;本文都将为你提供一条清晰的学习路径&#xff0c;从C#基础到高级特性&#xff0c;每一站都配有详尽解析和实用示例&#xff0c;旨在帮助你建立坚实的知识体系&#xff0c;并激发你对C#及.NET生态的热情。…...

Redis+定式任务实现简易版消息队列

Redis是一个开源的内存中数据结构存储系统&#xff0c;通常被用作数据库、缓存和消息中间件。 Redis主要将数据存储在内存中&#xff0c;因此读写速度非常快。 支持不同的持久化方式&#xff0c;可以将内存中的数据定期写入磁盘&#xff0c;保证数据持久性。 redis本身就有自己…...

学习在 C# 中使用 Lambda 运算符

在 C# 中&#xff0c;lambda 运算符 > 同时用于 lambda 表达式和表达式体成员。 1. Lambda 表达式 Lambda 表达式是一种简洁的表示匿名方法&#xff08;没有名称的方法&#xff09;的方法。它使用 lambda 运算符 >&#xff0c;可以读作“转到”。运算符的左侧指定输入参…...

数据结构和算法,单链表的实现(kotlin版)

文章目录 数据结构和算法&#xff0c;单链表的实现(kotlin版)b站视频链接1.定义接口&#xff0c;我们需要实现的方法2.定义节点&#xff0c;表示每个链表节点。3.push(e: E)&#xff0c;链表尾部新增一个节点4.size(): Int&#xff0c;返回链表的长度5.getValue(index: Int): E…...

Jdk17是否有可能代替 Jdk8

JDK发展历史和开源 2006年SUN公司开源JDK&#xff0c;成立OpenJDK组织。2009年Oracle收购SUN&#xff0c;加快JDK发布周期。Oracle JDK与OpenJDK功能基本一致&#xff0c;但Oracle JDK提供更长时间的更新支持。 JDK版本特性 JDK11是长期支持版本&#xff08;LTS&#xff09;…...

oca和 ocp有什么区别

OCA&#xff08;Oracle Certified Associate&#xff09;和OCP&#xff08;Oracle Certified Professional&#xff09;在Oracle的认证体系中是两种不同级别的认证&#xff0c;它们之间存在明显的区别。以下是对两者区别的详细解释&#xff1a; 认证级别&#xff1a; OCA&…...

煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答

煤矿安全大模型————矿途智护者 使用煤矿历史事故案例,事故处理报告、安全规程规章制度、技术文档、煤矿从业人员入职考试题库等数据,微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答。 本项目简介: 近年来,国家对煤矿安全生产的重视程度不断提升。为了确…...

C++中的C++中的虚析构函数的作用和重要性

在C中&#xff0c;虚析构函数&#xff08;virtual destructor&#xff09;的作用和重要性主要体现在多态和继承的上下文中。了解这一点之前&#xff0c;我们先简要回顾一下多态和继承的基本概念。 继承与多态 继承&#xff1a;允许我们定义一个基类&#xff08;也称为父类或超…...

机器学习 - 文本特征处理之 TF 和 IDF

TF&#xff08;Term Frequency&#xff0c;词频&#xff09;和IDF&#xff08;Inverse Document Frequency&#xff0c;逆文档频率&#xff09;是文本处理和信息检索中的两个重要概念&#xff0c;常用于计算一个词在文档中的重要性。下面是详细解释&#xff1a; TF&#xff08…...

开源网页监控工具changedetection.io:实时追踪网页变化的全方位解决方案

开源网页监控工具changedetection.io&#xff1a;实时追踪网页变化的全方位解决方案 【免费下载链接】changedetection.io The best and simplest free open source website change detection, website watcher, restock monitor and notification service. Restock Monitor, c…...

别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程)

别再手动录单了&#xff01;手把手教你用U9C OpenAPI打通钉钉审批流&#xff08;含完整配置流程&#xff09; 当财务部的张经理第17次因为手工录入错误被审计部门退回单据时&#xff0c;他摔掉键盘的冲动都有了。这场景在很多企业司空见惯——U9C系统承载着核心业务数据&#…...

Qt 串口编程实战:keySight 34401A 万用表数据采集与存储

1. 项目背景与硬件准备 keySight 34401A 数字万用表是实验室常见的六位半高精度测量设备&#xff0c;支持GPIB和RS-232两种通信接口。在实际工业测量场景中&#xff0c;RS-232串口连接因其布线简单、成本低廉的特点&#xff0c;成为许多开发者的首选方案。我最近接手的一个电池…...

Phi-3-vision-128k-instruct创意编程:用JavaScript构建交互式图像故事生成器

Phi-3-vision-128k-instruct创意编程&#xff1a;用JavaScript构建交互式图像故事生成器 1. 引言&#xff1a;当AI创意遇上前端交互 想象这样一个场景&#xff1a;用户上传一张随手拍的照片&#xff0c;通过简单的滑块调整和风格选择&#xff0c;几秒钟后就能获得一个与图片内…...

开源固件解锁戴森电池:3步拯救你的“32次红灯“报废吸尘器

开源固件解锁戴森电池&#xff1a;3步拯救你的"32次红灯"报废吸尘器 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 你的戴森吸…...

C++ 编译器优化选项详解

C 编译器优化选项详解 在C开发中&#xff0c;编译器优化是提升程序性能的关键手段之一。通过合理配置优化选项&#xff0c;开发者可以在不修改代码逻辑的情况下&#xff0c;显著提高程序的运行效率&#xff0c;减少资源消耗。本文将深入探讨C编译器的优化选项&#xff0c;帮助…...

OpenClaw性能优化:降低Qwen3-VL:30B多模态任务的Token消耗

OpenClaw性能优化&#xff1a;降低Qwen3-VL:30B多模态任务的Token消耗 1. 问题背景&#xff1a;多模态任务的高Token消耗困境 上周我在飞书群里测试OpenClaw对接Qwen3-VL:30B模型时&#xff0c;遇到了一个典型问题&#xff1a;当同事上传一张产品设计图要求分析时&#xff0c…...

毫米波雷达(AWR1864)二、从零到一:SDK配置与固件刷写实战

1. 毫米波雷达开发环境搭建全攻略 第一次接触AWR1864毫米波雷达开发板时&#xff0c;最让人头疼的就是软件环境的配置。记得我刚开始用这块板子的时候&#xff0c;光是为了让开发板识别出来就折腾了大半天。这里给大家分享一个Windows系统下的完整配置方案&#xff0c;帮你避开…...

彻底清理C盘自带软件方法:2026最新版强力卸载预装软件工具教程

电脑用着用着C盘就满了&#xff0c;开机小助手总提醒“磁盘空间不足”。点进控制面板一看&#xff0c;全是买电脑时自带的那些从未用过的软件&#xff0c;想卸载又怕卸不干净&#xff0c;甚至担心把系统搞崩溃。其实&#xff0c;彻底清理这些自带软件有章可循&#xff0c;关键是…...

PyTorch/TensorFlow张量加速实战:3个被90%工程师忽略的底层CUDA内核调优技巧

第一章&#xff1a;PyTorch/TensorFlow张量加速实战&#xff1a;3个被90%工程师忽略的底层CUDA内核调优技巧CUDA流与默认流解耦&#xff1a;避免隐式同步瓶颈 PyTorch 和 TensorFlow 默认将所有 CUDA 操作提交至默认流&#xff08;null stream&#xff09;&#xff0c;导致跨 k…...