MongoDB存储引擎

1、前言

存储引擎是数据库的组成部分,负责管理数据存储。

MongoDB支持的以下存储引擎:

存储引擎

描述

WiredTiger存储引擎

从MongoDB 3.2开始默认的存储引擎,新的版本MongoDB推荐使用WiredTiger存储引擎。

MMAPv1存储引擎

MMAPv1是MongoDB 3.2之前版本默认的存储引擎。

In-Memory存储引擎

MongoDB企业版支持In-Memory存储引擎。

2、WiredTiger存储引擎

从MongoDB 3.2开始,MongoDB默认的存储引擎为WiredTiger存储引擎。WiredTiger存储引擎提供文档级的并发模型,检查点、压缩、加密等多项功能。基于这些功能,WiredTiger存储引擎提供最全面的性能和存储效率。

存储引擎可以通过--storageEngine启动项或在配置文件中storage.engine中设置。

2.1 WiredTiger存储引擎的优势:

·最大化可用缓存

WiredTiger最大限度地使用可用的内存作为缓存来减少I/O瓶颈。有两个缓存被使用:WiredTiger缓存和文件系统缓存。WiredTiger缓存存储未压缩的数据和提供的内存性能。操作系统的文件系统缓存存储压缩数据。当数据不在WiredTiger缓存中找到时,WiredTiger将在文件系统缓存查找数据。

·WiredTiger缓存大小默认为50%RAM

没有了文件系统缓存,最小的可用内存为20%,这对于任何较低的操作系统来说都可能受到资源的限制。而WiredTiger缓存大小默认为50%的RAM,将缓解资源限制的问题。

·高吞吐量

WiredTiger使用“写时复制”,在文件更新时,WiredTiger将创建一个新的文档副本,确定返回给用户的是最新版本。这种方法允许多个客户端同时修改集合中的不同文档,从而提高并发和吞吐量。当使用多核服务器,多个线程正在写入不同的文档时,就实现了最佳的写入性能。

·降低存储空间和提高磁盘IOPS

WiredTiger使用压缩算法来减少存储在磁盘上的数据空间。不仅降低存储压力,而且提高磁盘读写效率。文本文件是高度可压缩的,而二进制数据可能不可压缩,因为它可能已经被编码和压缩。WiredTiger在压缩时会消耗额外的CPU,但用户可以配置压缩方案优化CPU的开销与压缩比。Snappy是默认的压缩引擎,提供了较低的CPU开销高压缩比之间的良好平衡。Zlib压缩引擎可以实现更高的压缩比,但会增加额外的CPU。

·压缩索引和日志

索引可以在内存中压缩,也可以在磁盘上压缩。WiredTiger利用前缀压缩索引,节约内存的使用以及释放存储的IOPS。日志是默认Snappy压缩。

·多核的可扩展性

WiredTiger在多核架构提供的可扩展性下,利用风险指针、无锁算法、快速锁存等技术减少了线程间的争用。线程可以在不阻塞彼此的情况下执行操作,从而减少线程争用、提供更好的并发性和更高的吞吐量。

·文档级并发

WiredTiger使用文档级并发控制写操作。使多个客户端可以同时修改集合的不同的文档。

对于大多数的读写操作,WiredTiger只使用数据库和集合级的意向锁。

一些全局操作,通常是涉及多个数据库的短时间操作,仍然需要全局锁(即实例范围)。某些其他操作,如删除集合,则需要独占数据库锁。

2.2 WiredTiger存储引擎的配置

WiredTiger存储引擎可以通过--storageEngine启动项或在配置文件中storage.engine中设置。

例如:

mongod--storageEngine wiredTiger --dbpath <WiredTigerDBPath>

或,在配置文件设置如下:

storage:
wiredTiger:engineConfig:cacheSizeGB:<number>journalCompressor: <string>directoryForIndexes:<boolean>collectionConfig:blockCompressor: <string>indexConfig:prefixCompression: <boolean>

复制

cacheSizeGB:从MongoDB 3.4开始,值取值范围为256MB至10TB,默认情况下,cacheSizeGB值为50%的RAM减去1GB或是256MB。

journalCompressor:WiredTiger采用预写事务日志联合检查站,保证数据的持久性。日志压缩算法默认为snappy。其他可选值有none或zlib。

directoryForIndexes:默认为false。当为true时,mongod会分别单独以索引命名的子目录存储索引和以集合命令的子目录存储集合数据。

blockCompressor:默认值为snappy,用于压缩集合数据的压缩的默认类型。其他可选值为none或zlib。

prefixCompression:默认为true,即使用前缀压缩索引数据。

3、In-Memory存储引擎

在MongoDB企业版3.2.6开始,In-Memory存储引擎作为通用性部分。除了一些元数据和诊断数据外,In-Memory存储引擎只在内存中维护数据,包括配置数据、索引、用户凭据等。

由于通过避免磁盘I/O,In-Memory存储引擎的数据库操作延迟更低。

3.1 In-Memory存储引擎优势

·低延迟

·应用可以将单独的缓存和数据库层合并成——所有的访问和管理都使用相同的API、操作工具和安全控件。

3.2 In-Memory存储引擎配置

mongod--storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>

或,在配置文件中如下:

storage:
engine: inMemorydbPath: <path>
inMemory:engineConfig:inMemorySizeGB:<newSize>

复制

inMemorySizeGB: 类型float,表示In-Memory存储引擎使用内存大小,默认是50%的物理RAM减去1GB,在3.4版本中,值范围在256MB到10TB内。

4、MMAPv1存储引擎

MMAPv1存储引擎是3.2版本之前的默认存储引擎。它利用集合级并发性和内存映射文件访问底层数据存储。内存管理委托给操作系统。MMAPv1不支持大端架构如s390x(IBM System z系列大型机硬件平台)。

4.1 MMAPv1存储引擎优势

·大容量插入、读取和更新

4.2 MMAPv1存储引擎配置

mongod--storageEngine mmapv1 --dbpath <path>

或,在配置文件做如下配置:

storage:
mmapv1:preallocDataFiles: <boolean>nsSize: <int>quota:enforced: <boolean>maxFilesPerDB: <int>smallFiles: <boolean>journal:debugFlags: <int>commitIntervalMs: <num>

复制

preallocDataFiles:默认为True,表示预分配数据文件。

nsSize:默认为16,命名空间文件的默认大小,这些文件是以ns结尾的文件。每个集合和索引都算作名称空间。此设置控制新创建的命名空间文件的大小。此项对现有文件没有影响。命名空间文件的最大大小为2047MB。默认值为16MB,提供大约24000个名称空间。

enforced: 默认为false,表示禁止对每个数据库拥有的数据文件的最大限制。MongoDB每个数据库最多有8个数据文件,可以通过maxFilesPerDB调整配额。

maxFilesPerDB: 默认为8,表示每个数据库的数据文件数量的限制。需要设置enforced选项。

smallFiles: 默认为false,如果为true,MongoDB使用一个较小的默认文件大小。

debugFlags: 作用是提供功能性测试,在系统发生异常关闭时,影响的数据文件的完整性。

commitIntervalMs: 默认值100,表示MongoDB写入日志文件时间,单位毫秒。

5、MongoDB存储引擎性能对比

WiredTIger存储引擎

In-Memory存储引擎

MMAPv1存储引擎

写性能

文档级并发控制

文档级并发控制

集合级并发控制

读性能

低延迟

支持磁盘压缩

MongoDB查询语言支持

二级索引支持

副本集支持

分片支持

安全控制

大数据集的RAM

 

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

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

相关文章

Go语言MinGW的安装

Go语言MinGW的安装 相比在 Linux 平台上安装 GCC 编译环境&#xff0c;在 Windows 平台上安装 MinGW 是比较简单的&#xff0c;只需经历以下几个过 程。 1、MINGW32位安装 1、打开 [MinGW 官网] https://osdn.net/projects/mingw/&#xff0c;下载 MinGW 安装包。 点击即可…

Linux 信号

文章目录 1. 信号1.1 前言1.2 信号的位置1.3 接口1.3.1 sigset_t1.3.2 信号集操作接口1.3.3 signal1.3.4 sigprocmask1.3.5 sigpending 2. 信号的处理2.1 内核态和用户态2.2 信号的监测和处理 1. 信号 1.1 前言 在 Linux 中&#xff0c;信号是一种用于进程之间的通信机制&…

MapstructPlus的快速集成

https://www.mapstruct.plus/https://www.mapstruct.plus/ # 博主技术栈如下 springboot:2.4.5 lombok:1.8.20 mapstruct-plus:1.3.4 knife4j:4.0.0目录 一、添加依赖&#xff08;谨防依赖冲突&#xff09; 二、如果依赖下不下来&#xff0c;要在maven的setting文件中加入腾讯…

Vue面试题整理

vue修饰符&适用场景 vue修饰符大致分为5类&#xff1a;表单修饰符&#xff0c;事件修饰符&#xff0c;鼠标修饰符&#xff0c;键盘修饰符&#xff0c;v-bind修饰符 路由守卫 全局路由守卫&#xff1a;beforeEach&#xff08;全局前置守卫&#xff09;&#xff0c;afterEa…

wsl子系统Ubuntu18.04,cuDNN安装

如果觉得本篇文章对您的学习起到帮助作用&#xff0c;请 点赞 关注 评论 &#xff0c;留下您的足迹&#x1f4aa;&#x1f4aa;&#x1f4aa; 本文主要wls子系统Ubuntu18.04安装cuDNN&#xff0c;安装cudnn坑巨多&#xff0c;因此记录以备日后查看&#xff0c;同时&#xff0…

PC市场寒冬,大众还需要PC吗?

PC市场寒冬&#xff0c;大众还需要PC吗&#xff1f; PC&#xff08;个人电脑&#xff09;市场从2016年智能手机兴起之时便进入下滑态势&#xff0c;到2020年疫情发生后&#xff0c;居家办公、在线教育等需求曾给PC市场带来连续六个季度的增长。⁴ 好景不长&#xff0c;进入202…

A Survey on Multimodal Large Language Models

本文是LLM系列的文章之一&#xff0c;主要是讲解多模态的LLM。针对《A Survey on Multimodal Large Language Models》的翻译。 多模态大语言模型的综述 摘要1 引言2 概述3 方法3.1 多模态指令调整3.1.1 引言3.1.2 前言3.1.3 模态对齐3.1.4 数据3.1.5 模态桥接3.1.6 评估 3.2 …

Android Studio实现内容丰富的安卓美食管理发布平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号079 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

【网络进阶】Posix API与网络协议栈(三)

文章目录 1. 网络攻击和POSIX API与网络协议栈的关系1.1 网络攻击的基本概念和它们对协议栈的影响1.2 分布式拒绝服务&#xff08;DDoS&#xff09;攻击和网络协议栈1.3 地址解析协议&#xff08;ARP&#xff09;欺骗和POSIX API 2. 网络协议栈的理解和划分2.1 OSI七层模型2.2 …

PostgreSQL使用localhost可以连接,使用IP无法连接

问题描述&#xff1a;PostgreSQL使用localhost可以连接&#xff0c;使用IP无法连接 默认情况下&#xff0c;刚安装完成的 postgresSQL12 无法使用 数据库连接工具&#xff08;如postman&#xff09;连接。需要为其修改配置&#xff0c;开放连接权限。 修改pg_hba.conf 增加…

B063-基础环境-后端环境 Lombok Restful postman swagger

目录 项目介绍需求分析项目架构项目技术架构前后端分离前后端分离开发模式前后端分离优缺点 后端项目搭建-部门模块项目端口规划创建SpringBoot项目流程整合SSM引用属性传值 LombokRestful风格Postman接口测试swagger接口规范其他 项目介绍 本项目是一个&#xff08;Online To…

蓝奥声开发高性价比智能wifi插座进军智能家居

关键词&#xff1a;智能家居、家用插座、WiFi插座、高性价比插座 智能硬件的大潮袭来让智能家居这一并不新鲜的概念再次火热起来&#xff0c;关于智能家居的各种场景的描述给了我们很大的想象空间&#xff0c;然而落到实处真正开始走进生活时却又显得那么骨感&#xff0c;一时间…