Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Mecanismo de armazenamento na memória

Nesta página

  • Especificar mecanismo de armazenamento in-memory
  • Concurrency
  • Uso da Memória
  • Durabilidade
  • Transações
  • Arquiteturas de implantação

Alterado na versão 3,2,6.

A partir da versão 3.2.6 do MongoDB Enterprise, o mecanismo de armazenamento em memória faz parte da disponibilidade geral (GA) nas versões de 64 bits. 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.

Para selecionar o mecanismo de armazenamento na memória, especifique:

  • inMemory para a opção --storageEngine ou a configuração storage.engine se estiver usando um arquivo de configuração.

  • --dbpathou storage.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.

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.

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>

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 omecanismo 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.

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.

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.

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 e priority: 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ânciasmongodque 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.

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ó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 e priority: 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.

← Alterar Cluster fragmentado para WiredTiger