Mecanismo de armazenamento in-memory para implantações autogerenciadas
Nesta página
O mecanismo de armazenamento na memória faz parte da disponibilidade geral (GA) em builds de 64bits. Além de alguns metadados e dados de diagnóstico, o mecanismo de armazenamento na memória não mantém nenhum dado no disco, incluindo dados de configuração, índices, credenciais de usuário etc.
Ao evitar a E/S de disco, o mecanismo de armazenamento in-memory permite latência mais previsível das operações de banco de dados.
Especificar mecanismo de armazenamento in-memory
Para selecionar o mecanismo de armazenamento na memória, especifique:
inMemory
para a--storageEngine
a opção ou a configuraçãostorage.engine
se estiver usando um arquivo de configuração.--dbpath
oustorage.dbPath
se estiver usando um arquivo de configuração. Embora o mecanismo de armazenamento na memória não grave dados no sistema de arquivos, ele mantém nos pequenos arquivos de metadados--dbpath
e dados de diagnóstico, bem como arquivos temporários para construir índices grandes.
Por exemplo, a partir da linha de comando:
mongod --storageEngine inMemory --dbpath <path>
Ou, se estiver usando o formato de arquivo de configuração YAML:
storage: engine: inMemory dbPath: <path>
Consulte Opções de inMemory para obter opções de configuração específicas para este mecanismo de armazenamento. A maioria das opções de configuração mongod
está disponível para uso com o mecanismo de armazenamento na memória, exceto aquelas opções relacionadas à persistência de dados, como registro no diário ou criptografia em configuração em repouso.
Aviso
O mecanismo de armazenamento na memória não mantém os dados após o desligamento do processo.
Concurrency
O mecanismo de armazenamento na memória usa controle de simultaneidade em nível de documento para operações de gravação. Com isso, vários clientes podem modificar documentos diferentes de uma collection ao mesmo tempo.
Uso da Memória
O mecanismo de armazenamento na memória exige que todos os seus dados (incluindo índices, oplog se a instância mongod
fizer parte de um conjunto de réplicas etc.) caibam na --inMemorySizeGB
especificada ou na storage.inMemory.engineConfig.inMemorySizeGB
no arquivo de configuração YAML.
Por padrão, o mecanismo de armazenamento na memória usa 50% da RAM física menos 1 GB.
Se uma operação de escrita fizer com que os dados excedam o tamanho de memória especificado, o MongoDB retornará com o erro:
"WT_CACHE_FULL: operation would overflow cache"
Para especificar um novo tamanho, use a configuração storage.inMemory.engineConfig.inMemorySizeGB
no formato de arquivo de configuração YAML:
storage: engine: inMemory dbPath: <path> inMemory: engineConfig: inMemorySizeGB: <newSize>
Ou use a opção de linha de comando --inMemorySizeGB
:
mongod --storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>
Durabilidade
O mecanismo de armazenamento in-memory não é persistente e não escreve dados em um armazenamento persistente. Os dados não persistentes incluem application data e system data, como usuários, permissões, índices, configuração do conjunto de réplicas, configuração do cluster fragmentado, etc.
Dessa forma, o conceito de diário ou de espera para que os dados se tornem duráveis não se aplica ao mecanismo de armazenamento na memória.
Se algum membro votante de um conjunto de réplicas usar o mecanismo de armazenamento na memória , você deverá definir writeConcernMajorityJournalDefault
como false
.
Observação
A partir da versão 4.2 (e 4.0.13 e 3.6.14 ), se um membro do conjunto de réplicas usar o storage engine na memória (com ou sem votação), mas o conjunto de réplicas tiver writeConcernMajorityJournalDefault
definido como verdadeiro, o membro do conjunto de réplicas registrará um aviso de inicialização.
Com writeConcernMajorityJournalDefault
definido como false
, o MongoDB não espera que w: "majority"
gravações sejam gravadas no registro em disco antes de reconhecer as gravações. Dessa forma, as operações de gravações "majority"
poderiam ser revertidas no caso de uma perda transitória (por exemplo. falha e reinicialização) da maioria dos nós em determinado conjunto de réplicas.
As operações de gravação que especificam uma write concern journaled
são reconhecidas imediatamente. Quando uma instância mongod
é encerrada, seja como resultado do comando shutdown
ou devido a um erro do sistema, a recuperação dos dados na memória é impossível.
Transações
As transações são suportadas em conjuntos de réplicas e clusters fragmentados onde:
o primary usa o mecanismo de armazenamento WiredTiger e
os membros secundários usam o mecanismo de armazenamento WiredTiger ou os mecanismos de armazenamento na memória .
Observação
Você não pode executar transação em um cluster fragmentado que tenha um shard com writeConcernMajorityJournalDefault
definido como false
, como um shard com um nó votante que usa o storage engine na memória.
Arquiteturas de implantação
Além de funcionarem de forma independente, as mongod
instâncias que utilizam o mecanismo de armazenamento em memória podem funcionar como parte de um conjunto de réplicas ou de um cluster fragmentado.
Conjunto de réplicas
Você pode implantar instâncias do mongod
que utilizam o mecanismo de armazenamento na memória como parte de um conjunto de réplica. Por exemplo, como parte de um conjunto de réplicas de três membros, você poderia ter:
duas
mongod
instâncias são executadas com o mecanismo de armazenamento na memória.uma instância do
mongod
é executada com o mecanismo de armazenamento WiredTiger. Configure o membro WiredTiger como um membro oculto (i.e.hidden: true
epriority: 0
).
Com esse modelo de implantação, somente as instânciasmongod
executadas com o mecanismo de armazenamento na memória podem se tornar primary. Os clientes se conectam somente às instâncias do mecanismo de armazenamento na memória mongod
. Mesmo que ambas as instânciasmongod
que executam o mecanismo de armazenamento na memória falhem e reiniciem, elas podem ser sincronizadas a partir do membro que executa o WiredTiger. A instância ocultamongod
em execução com o WiredTiger mantém os dados em disco, incluindo os dados do usuário, índices e informações de configuração de replicação.
Observação
O mecanismo de armazenamento na memória exige que todos os seus dados (inclusive oplog se mongod
fizer parte do conjunto de réplicas etc.) caibam na opção de linha de comando --inMemorySizeGB
ou na configuração storage.inMemory.engineConfig.inMemorySizeGB
especificada. Consulte uso de memória.
Cluster fragmentado
Você pode implantar instâncias do mongod
que utilizam um mecanismo de armazenamento na memória como parte de um cluster fragmentado. O mecanismo de armazenamento na memória evita a E/S de disco para permitir uma latência de operação do banco de dados mais previsível. Em um cluster fragmentado, um fragmento pode consistir em uma única instância mongod
ou em um conjunto de réplicas. Por exemplo, você pode ter um fragmento que consiste no seguinte conjunto de réplicas:
duas instâncias
mongod
são executadas com o mecanismo de armazenamento na memóriauma instância do
mongod
é executada com o mecanismo de armazenamento WiredTiger. Configure o membro WiredTiger como um membro oculto (i.e.hidden: true
epriority: 0
).
A esse fragmento, adicione tag
inmem
. Por exemplo, se esse fragmento tiver o nome shardC
, conecte-se ao mongos
e execute sh.addShardTag()
.
Por exemplo,
sh.addShardTag("shardC", "inmem")
Para os outros fragmentos, adicione uma marcação separada persisted
.
sh.addShardTag("shardA", "persisted") sh.addShardTag("shardB", "persisted")
Para cada collection fragmentada que deve residir no fragmento inmem
, assign to the entire chunk range
a tag inmem
:
sh.addTagRange("test.analytics", { shardKey: MinKey }, { shardKey: MaxKey }, "inmem")
Para cada coleção fragmentada que deve residir nos fragmentos persisted
, assign to the entire chunk range
a tag persisted
:
sh.addTagRange("salesdb.orders", { shardKey: MinKey }, { shardKey: MaxKey }, "persisted")
Para o fragmento inmem
, crie um banco de dados ou mova o banco de dados.
Observação
Ler nível de preocupação "snapshot"
não é oficialmente suportado com o mecanismo de armazenamento na memória.