MongoDB写入语义

简介: 【7月更文挑战第1天】**MongoDB的Write Concern**(写入语义)关乎数据的**性能、可用性和可靠性**。通过w(多数、数字或自定义策略),j(磁盘写入确认)和wtimeout(超时设置)参数调整。w设为`majority`确保强可用性但影响性能;数字`N`平衡性能与风险;`j=true`保证数据到磁盘,而wtimeout设定超时后可能仍写入成功。面试中可讨论MongoDB在业务中的角色、选择原因、分片策略、数据规模、并发及部署架构,并对比其他中间件。

写入语义

和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的面试过程中,注意和不同的中间件进行对比,凸显在这方面的积累

目录
相关文章
|
前端开发 Go 网络安全
Go语言:xterm.js-websocket Web终端堡垒机
1.前言 因为公司业务需要在自己的私有云服务器上添加添加WebSsh终端,同时提供输入命令审计功能. 从google上可以了解到xterm.js是一个非常出色的web终端库,包括VSCode很多成熟的产品都使用这个前端库.
7619 0
|
12月前
|
Python
Python高效字符串格式化:f-strings的魅力
Python高效字符串格式化:f-strings的魅力
382 80
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
761 13
|
存储 弹性计算 监控
从外到内:阿里云弹性与资源交付效率的全景透视
本文介绍了弹性服务的概念及其在云计算中的重要性。弹性服务通过动态调整云资源,帮助用户应对流量波动,降低成本并提高自动化水平。文中详细探讨了如何从“使用弹性”迈向“善用弹性”,包括定时任务、报警任务和目标追踪等伸缩模式的应用。同时,文章还介绍了阿里云在ECS弹性能力方面的建设成果,如每分钟交付万台实例的能力,并分享了汇量科技和Auto MQ两个客户案例的成功实践。最后,展望了未来在弹性计算领域的技术创新和发展方向,强调了持续优化和提升弹性能力的重要性。
|
JavaScript 前端开发 IDE
TypeScript中的声明文件(.d.ts):扩展类型系统
TypeScript的`.d.ts`声明文件为JS库提供类型信息,增强IDE支持,如自动完成和类型检查。通过声明合并,可在全局作用域定义类型。示例包括为`my-library`创建声明模块,导出函数和接口。声明文件通常存于`@types`或指定`typeRoots`。用于旧JS代码的类型注解,如`myGlobalObject`。学习更多,参阅TypeScript官方文档。分享你的TS声明文件经验!
682 1
|
Web App开发 小程序 安全
支付宝小程序性能概述
支付宝小程序性能概述
458 11
|
Oracle JavaScript Cloud Native
【JVM深层系列】「云原生时代的Java虚拟机」针对于GraalVM的技术知识脉络的重塑和探究
【JVM深层系列】「云原生时代的Java虚拟机」针对于GraalVM的技术知识脉络的重塑和探究
738 1
【JVM深层系列】「云原生时代的Java虚拟机」针对于GraalVM的技术知识脉络的重塑和探究
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @EnumValue:优雅处理枚举值映射
在数据库操作中,枚举类型的值往往需要与数据库表中的某个字段进行映射,以便在操作中能够进行相应的转换。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@EnumValue`,使开发者能够更加灵活地处理枚举值与数据库字段的映射关系,从而减少了繁琐的转换逻辑。本文将详细介绍 `@EnumValue` 注解的用法及其在持久层开发中的应用。
6562 0
外行人都能看懂的WebFlux,错过了血亏(一)
这篇文章主要讲解什么是WebFlux,带领大家入个门,希望对大家有所帮助(至少看完这篇文章,知道WebFlux是干嘛用的)
4716 0
外行人都能看懂的WebFlux,错过了血亏(一)
|
存储 算法 程序员
计算机组成原理<五>——存储系统(二)
计算机组成原理<五>——存储系统
计算机组成原理<五>——存储系统(二)

热门文章

最新文章