MongoDB的In-Memory存储引擎

太阳8个月前技术文章232


   在企业版 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的风险。


相关文章

Datanode节点坏卷处理

Datanode节点坏卷处理

1、告知客户故障信息,确定是否有备用磁盘更换2、停止故障节点的所有角色服务3、卸载故障磁盘umount -vl /data64、等待硬件厂商更换好磁盘5、对新磁盘分区和格式化#1.磁盘分区 mkfs...

CDH实操--客户端安装

CDH实操--客户端安装

概述安装CDH客户端,主要是方便在CDH部署节点以外,通过客户端的方式连接CDH上的hdfs,hive和hbase服务1、安装jdk(适配CDH即可,一般1.8)2、获取安装包3、部署安装包把安装包解...

A集群导入B集群中的高可用版rancher

A集群导入B集群中的高可用版rancher

问题现象:已知在B集群中采用helm方式部署了一个高可用版本的rancher,该rancher中已经配置导入了三套集群,并且三套集群状态在rancher控制台处均显示正常,日常可借助该rancher管...

Pod终止-preStop

由于 Pod 所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地 终止一般不应武断地使用 KILL 信号终止它们设计的目标是令你能够请求删除进程,并且知道进程何时被终止,同时也能够确...

clickhouse对接集群hdfs(二)

clickhouse对接集群hdfs(二)

前提:集群中已经部署了hadoop集群和clickhouse集群,clickhouse集群进行对接hdfs1、调整配置文件将集群中的hdfs-site.xml文件同步到ck集群节点的/etc/clic...

Kubernetes源码解读(五)--Reflector源码分析

Reflector 的任务就是向 apiserver watch 特定类型的资源,拿到变更通知后将其丢到 DeltaFIFO 队列中。1、Reflector的启动过程Reflector定义在k8s.i...

发表评论    

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