MongoDB的In-Memory存储引擎

太阳1年前技术文章519


   在企业版 3.2.6版本开始,MongoDB开始有In-Memory存储引擎,除了一些元数据和诊断数据外,In-Memory存储引擎不会存储任何数据到磁盘,包括配置数据、索引、用户凭证等。


   因为避免了磁盘IO,所以In-Memory存储引擎在操作的延迟会更小。


一、In-Memory存储引擎基本概念


1、需要在MongoDB启动时候指定 --storageEngine,或者配置文件中指定storage.engine。


2、需要指定--dbpath,In-Memory存储引擎会在磁盘存储一些元数据和诊断数据、以及创建大索引时使用到的临时文件。


3、In-Memory存储引擎在进程关闭后将不再保存数据。


4、In-Memory存储引擎支持文档级并发。


5、In-Memory存储引擎要求所有的数据、包括索引以及oplog等使用的内存都要限制在inMemorySizeGB参数内,默认情况下In-Memory存储引擎对内存的使用为50%物理内存-1G,当一个写操作导致超出当前的内存限制,MongoDB会直接报错。


6、In-Memory存储引擎不支持多文档事务。


二、In-Memory数据持久性


1)In-Memory存储引擎是不持久的,也不会将数据写入到一个持久化的存储引擎。


2)In-Memorey对数据、索引、用户权限、复制集信息等都不具有持久性。


3)在In-Memory存储引擎下,通过journal等待数据达到持久化是不存在的。


4)在副本集中,任何vote>0的节点如果使用In-Memory存储引擎,需要将该节点的writeConcernMajorityJournalDefault设置为false。


5)在In-Memory存储引擎下,一个指定write concern的写操作,journal认证后会立即被返回。当MongoDB实例关闭或者意外宕机后,是无法恢复内存中的这些数据的。


三、常见部署体系结构


1)两个节点使用In-Memory存储引擎;


2)一个节点使用WiredTiger存储引擎,且设置该节点的priority=0,hidden=true;


3)这样部署保证In-Memory存储引擎的节点为primary节点,且客户端仅可以连接到In-Memory存储引擎的节点。即使副本集提供业务节点出现宕机,也可以通过WiredTiger存储引擎的节点来sync进行数据恢复。


四、journaling


1)因为In-Memory存储引擎将所有数据保存在内存,包括journal也在内存中,当操作指定j:true,会立刻会返回。


2)In-Memory存储引擎的副本集节点必须设置writeConcernMajorityJournalDefault为false。


3)当writeConcernMajorityJournalDefault设置为false,MongoDB将不会等待w:“majority”在写入jounal file后完成ack。因此该参数可能有roll back的风险。


相关文章

ACOS无数据告警实践

ACOS无数据告警实践

1.说明在实现数据监控的过程中告警能力无疑是重中之重,无数据告警亦是告警能力中重要的场景,这里我们聊聊关于无数据一些场景和实践方法。2.无数据可能场景对于运维监控平台来说无数据是一个比较复杂的情况,从...

HDP部署Tez UI

首先部署tomcat在官网下载apache-tomcat-9.0.22.tar.gz[root@hdp02 opt]# wget https://archive.apache.org/dist/tom...

基于Jenkins和Kubernetes的CI/CD

基于Jenkins和Kubernetes的CI/CD

jenkins安装安装helm CRD编辑好yaml文件后直接安装即可k3s kubectl apply -f jenkins-crd.yaml查看我们安装好的helmchart crdk3s kub...

基于Gitlab和Kubernetes的CI/CD

基于Gitlab和Kubernetes的CI/CD

此套CI/CD流程仅依赖gitlab。runner等组件安装在kubernetes集群中,尽量减少其他依赖,便于维护。依赖介绍gitlab runnergitlab runner用来运行我们的作业并将...

Elasticsearch查询优化

1 使用更快的硬件查询性能大部分场景下更多的在于IO能力,很多时候查询速度受限于磁盘IO能力,使用SSD会比旋转类存储介质好得多。如果查询类型属于计算比较多的,则可以考虑使用更快的CPU。2 为文件系...

Shell中单引号和双引号区别

1)在/home/atguigu/bin创建一个test.sh文件[atguigu@hadoop102 bin]$ vim test.sh在文件中添加如下内容#!/bin/bashdo_date=$1...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。