Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Mecanismo de armazenamento na memória

Nesta página

  • Especificar mecanismo de armazenamento in-memory
  • Simultaneidade de transação (leitura e gravação)
  • Simultaneidade em Nível de Documento
  • 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.

A partir da versão 7.0, o MongoDB usa um algoritmo padrão para ajustar dinamicamente o número máximo de transações simultâneas do mecanismo de armazenamento (tickets de leitura e gravação). O algoritmo de transação do mecanismo de armazenamento simultâneo dinâmico otimiza a taxa de transferência do banco de dados durante a sobrecarga de cluster. O número máximo de transações simultâneas do mecanismo de armazenamento (tickets de leitura e gravação) nunca excede 128 tíquetes de leitura e 128 tíquetes de gravação e pode diferir entre nós em um cluster. O número máximo de tíquetes de leitura e tíquetes de gravação em um único nó é sempre igual.

Para especificar um número máximo de transações de leitura e escrita (tickets de leitura e escrita) que o máximo dinâmico não pode exceder, use storageEngineConcurrentReadTransactions e storageEngineConcurrentWriteTransactions.

Se quiser desabilitar o algoritmo de transações do mecanismo de armazenamento dinâmico simultâneo, registre uma solicitação de suporte para trabalhar com um engenheiro de serviços técnicos do MongoDB.

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 utilizar o mecanismo de armazenamento in-memory (votação ou não), mas o conjunto de réplicas tiver writeConcernMajorityJournalDefault definido como verdadeiro, o membro do conjunto de réplicas registra 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

Não é possível executar transações em um cluster fragmentado que tenha um fragmento com writeConcernMajorityJournalDefault definido para false, como um fragmento com um membro com direito ao voto que usa o mecanismo de armazenamento 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