在版本3.2.6中更改。
从MongoDB Enterprise 3.2.6版开始,内存存储引擎是64位版本中通用可用性(GA)的一部分。除了某些元数据和诊断数据之外,内存存储引擎不维护任何磁盘数据,包括配置数据,索引,用户凭据等。
通过避免磁盘I / O,内存中存储引擎允许更可预测的数据库操作延迟。
要选择内存存储引擎,请指定:
inMemory
对于--storageEngine
选项,或者
storage.engine
如果使用配置文件的设置。--dbpath
,或者storage.dbPath
使用配置文件。尽管内存存储引擎不会将数据写入文件系统,但它会在--dbpath
小型元数据文件和诊断数据以及用于建立大型索引的临时文件中维护。例如,从命令行:
或者,如果使用YAML配置文件格式:
有关特定于此存储引擎的配置选项,请参阅“ 内存选项 ”。mongod
除与数据持久性相关的那些选项(例如日志记录或静态配置加密)外,大多数配置选项可用于内存存储引擎。
警告
进程关闭后,内存中存储引擎不会保留数据。
内存存储引擎将文档级并发控制用于写入操作。结果,多个客户端可以同时修改集合的不同文档。
内存存储引擎要求的所有数据(包括索引,如果OPLOG mongod
实例是副本集的一部分,等等)必须适合指定的--inMemorySizeGB
命令行选项或storage.inMemory.engineConfig.inMemorySizeGB
中设置YAML配置文件。
默认情况下,内存存储引擎使用50%的物理RAM减去1 GB。
如果写操作将导致数据超过指定的内存大小,则MongoDB返回错误:
要指定新大小,请使用YAML配置文件格式的
storage.inMemory.engineConfig.inMemorySizeGB
设置
:
或使用命令行选项--inMemorySizeGB
:
内存中存储引擎是非持久性的,不会将数据写入持久性存储。非持久数据包括应用程序数据和系统数据,例如用户,权限,索引,副本集配置,分片群集配置等。
如果副本集的任何有投票权的成员使用内存存储引擎,则必须设置
writeConcernMajorityJournalDefault
为false
。
注意
从版本4.2(以及4.0.13和3.6.14)开始,如果副本集成员使用内存中的存储引擎
(投票或不投票),但副本集已
writeConcernMajorityJournalDefault
设置为true,则副本集成员记录启动情况警告。
随着writeConcernMajorityJournalDefault
设置为false
,MongoDB的不等待
写入承认写之前被写入到磁盘上的日志。这样,在给定副本集中的大多数节点发生瞬时丢失(例如崩溃和重新启动)的情况下,写操作可能会回滚。w: "majority"
majority
指定写关注点的写操作将journaled
立即得到确认。当mongod
实例关闭(由于shutdown
命令结果或由于系统错误)时,无法恢复内存中的数据。
从MongoDB 4.2开始,副本集和分片群集上支持事务:
在MongoDB 4.0中,仅使用WiredTiger存储引擎的副本集支持事务。
注意
您不能在具有writeConcernMajorityJournalDefault
设置为的分片的分片
集群上运行事务false
,例如具有使用内存存储引擎的具有投票成员的
分片。
除了独立运行外mongod
,使用内存存储引擎的实例还可以作为副本集的一部分或分片群集的一部分运行。
您可以将mongod
使用内存中存储引擎的实例部署为副本集的一部分。例如,作为三人副本集的一部分,您可能需要:
mongod
实例与内存存储引擎一起运行。mongod
实例与WiredTiger存储引擎一起运行。将WiredTiger成员配置为隐藏成员(即
和)。hidden: true
priority: 0
使用此部署模型,只有mongod
使用内存存储引擎运行的实例才能成为主要实例。客户端仅连接到内存中的存储引擎mongod
实例。即使两个mongod
在内存中运行的实例都崩溃并重新启动,它们也可以从运行WiredTiger的成员进行同步。mongod
与WiredTiger一起运行的隐藏实例会将数据持久保存到磁盘,包括用户数据,索引和复制配置信息。
注意
内存存储引擎要求其所有数据(包括oplog(如果它mongod
是副本集的一部分,则包括oplog 等))都应放入指定的--inMemorySizeGB
命令行选项或
storage.inMemory.engineConfig.inMemorySizeGB
设置中。请参阅
内存使用。
您可以将mongod
使用内存存储引擎的实例部署为分片群集的一部分。例如,在分片群集中,您可以拥有一个由以下副本集组成的分片:
mongod
实例与内存存储引擎一起运行mongod
实例与WiredTiger存储引擎一起运行。将WiredTiger成员配置为隐藏成员(即
和)。hidden: true
priority: 0
在此分片上,添加。例如,如果此分片具有名称,请连接到
并运行。tag
inmem
shardC
mongos
sh.addShardTag()
例如,
在其他分片上,添加一个单独的标签persisted
。
对于应该驻留在分片上的每个分片集合inmem
,
使用标签
:assign to the entire chunk range
inmem
对于应该驻留在各个分persisted
片上的每个分片集合,
标记为
:assign to the entire chunk range
persisted
对于分片inmem
,创建数据库或移动数据库。