Atualizando
O MongoDB 1.8 é uma versão de produção incremental padrão e funciona como uma substituição opcional do MongoDB 1.6, exceto:
Os membros do conjunto de réplicas devem ser atualizados em uma ordem específica, conforme descrito em Atualização de um conjunto de réplicas.
O comando
mapReducefoi alterado em 1.8, causando incompatibilidade com versões anteriores.mapReducenão gera mais collections temporárias (portanto,keepTempfoi removido). Agora, você deve sempre fornecer um valor paraout. Consulte as opções de campooutno documentomapReduce. Se você utilizar o MapReduce, isso provavelmente também significa que você precisa de uma versão recente do driver do cliente.
Preparação
Leia todas as notas de versão antes de atualizar e garanta que nenhuma alteração afete seu sistema.
Atualizando um autônomo mongod
Baixe o v1.8.x binários da página de download do MongoDB.
Desligue sua instância do
mongod.Substitua o binário existente pelo 1.8.x
mongodbinário.Reinicie o MongoDB.
Atualizando um conjunto de réplicas
1.8.x os secundários podem replicar a partir de 1.6.x primários.
1.6.x os secundários não podem replicar a partir de 1.8.x primários.
Portanto, para atualizar um conjunto de réplicas, você deve primeiro substituir todos os secundários e, em seguida, o primário.
Por exemplo, suponha que você tenha um conjunto de réplicas com um primário, um árbitro e vários secundários. Para atualizar o conjunto, faça o seguinte:
Para o árbitro:
Desligue o arbiter.
Reinicie-o com 1.8.x binário na página de download do MongoDB.
Altere sua configuração (opcional) para evitar a eleição de uma nova primária.
É possível que, quando você começar a desligar os membros do conjunto, uma nova primária seja eleita. Para evitar isso, você pode dar a todos os secundários uma prioridade de
0antes de atualizar e, em seguida, alterá-los novamente. Para fazer isso:Registre sua configuração atual. Execute
rs.config()e cole os resultados em um arquivo de texto.Atualize sua configuração para que todos os secundários tenham prioridade
0. Por exemplo:config = rs.conf() { "_id" : "foo", "version" : 3, "members" : [ { "_id" : 0, "host" : "ubuntu:27017" }, { "_id" : 1, "host" : "ubuntu:27018" }, { "_id" : 2, "host" : "ubuntu:27019", "arbiterOnly" : true } { "_id" : 3, "host" : "ubuntu:27020" }, { "_id" : 4, "host" : "ubuntu:27021" }, ] } config.version++ 3 rs.isMaster() { "setName" : "foo", "ismaster" : false, "secondary" : true, "hosts" : [ "ubuntu:27017", "ubuntu:27018" ], "arbiters" : [ "ubuntu:27019" ], "primary" : "ubuntu:27018", "ok" : 1 } // for each secondary config.members[0].priority = 0 config.members[3].priority = 0 config.members[4].priority = 0 rs.reconfig(config)
Para cada secundário:
Desative o secundário.
Reinicie-o com 1.8.x binário na página de download do MongoDB.
Se você alterou a configuração, altere-a de volta ao estado original:
config = rs.conf() config.version++ config.members[0].priority = 1 config.members[3].priority = 1 config.members[4].priority = 1 rs.reconfig(config) Desligue o primary (o servidor 1.6 final) e reinicie-o com o 1.8.x binário na página de download do MongoDB.
Atualizando um cluster fragmentado
Desligue o balanceador:
mongo <a_mongos_hostname> use config db.settings.update({_id:"balancer"},{$set : {stopped:true}}, true) Para cada fragmento:
Se o shard for um conjunto de réplicas, siga as instruções acima para Atualizar um conjunto de réplicas.
Se o shard for um único
mongodprocesso, desligue-o e reinicie-o com o 1.8.x binário na página de download do MongoDB.
Para cada
mongos:Encerre o processo
mongos.Reinicie-o com 1.8.x binário na página de download do MongoDB.
Para cada servidor de configuração:
Desligue o processo do servidor de configuração .
Reinicie-o com 1.8.x binário na página de download do MongoDB.
Ligue o balanceador:
use config db.settings.update({_id:"balancer"},{$set : {stopped:false}})
Retornando ao 1.6
Se, por algum motivo, você precisar voltar para 1.6, siga as etapas acima na ordem inversa. Tenha cuidado para não inserir nenhum documento maior que 4MB enquanto executava em 1.8 (onde o tamanho máximo aumentou para 16MB). Se tiver, você receberá erros quando o servidor tentar ler esses documentos.
Registro no diário
Retornando ao 1.6 após usar o 1.8 O registro no diário funciona bem, pois o registro no diário não muda nada no formato do arquivo de dados. Suponha que você esteja executando 1.8.x com o registro no diário ativado e decida voltar para 1.6. Existem dois cenários:
Se você desligar de forma limpa com 1.8.x, apenas reinicie com o binário mongod 1.6 .
Se 1.8.x desligue-o de forma impura, inicie 1.8.x novamente e deixe os arquivos do diário serem executados para corrigir qualquer problema (gravações incompletas) que possam ter existido no momento da falha. Em seguida, desligue 1.8.x de forma limpa e reinicie com o binário mongod 1.6 .
Mudanças
Registro no diário
O MongoDB agora oferece suporte ao registro no diário com gravação para facilitar a rápida recuperação de falhas e a durabilidade no storage engine. Com o registro no diário ativado, um mongod pode ser reiniciado rapidamente após uma falha sem a necessidade de reparar as coleções. Um pipeline de agregação torna possível fazer agregação.
Índices esparsos e cobertos
Índices esparsos são índices que incluem apenas documentos que contêm os campos especificados no índice. Os documentos que não possuem o campo não aparecerão no índice. Isso pode reduzir significativamente o tamanho do índice para índices de campos que contêm apenas um subconjunto de documentos em uma collection.
Os índices cobertos permitem que o MongoDB responda às queries inteiramente a partir do índice quando a query seleciona apenas os campos que o índice contém.
Suporte incremental para redução de mapa
O comando mapReduce suporta novas opções que permitem atualizar incrementalmente coleções existentes. Anteriormente, um tarefa de MapReduce poderia gerar saída para uma collection temporária ou para uma collection permanente nomeada, que seria substituída por novos dados.
Agora você tem várias opções para a saída de seus trabalhos do MapReduce:
Você pode mesclar a saída do MapReduce em uma coleção existente. O resultado da fase Reduzir substituirá as chaves existentes na collection de saída, se ela já existir. Outras chaves permanecerão na coleção.
Agora você pode reduzir novamente sua saída com o conteúdo de uma coleção existente. Cada saída chave pela fase de redução será reduzida com o documento existente na coleta de saída.
Você pode substituir a coleta de saída existente pelos novos resultados do tarefa do MapReduce (equivalente à configuração de uma coleta de saída permanente em versões anteriores)
Você pode calcular o MapReduce in-line e retornar resultados ao chamador sem persistir os resultados do tarefa. Isso é semelhante às collections temporárias geradas em versões anteriores, exceto que os resultados são limitados a 8MB.
Para obter mais informações, consulte as opções de campo out no documento mapReduce .
Alterações e aprimoramentos adicionais
1.8.1
Correção de migração de fragmentação ao mover blocos maiores.
Correção de durabilidade com indexação em segundo plano.
Corrigiu o problema de simultaneidade do mongos com muitas conexões de entrada.
1.8.0
Todas as alterações de 1.7.x série.
1.7.6
Correções de erros.
1.7.5
Melhorias na alocação de extensão.
Conectividade aprimorada do conjunto de réplicas para
mongos.getLastErrormelhorias na fragmentação.
1.7.4
mongosroteiaslaveOkqueries para secundários em conjuntos de réplicas.Novas opções de saída
mapReduce.
1.7.3
Suporte inicial do índice coberto .
Distinct pode usar dados de índices quando possível.
mapReducepode mesclar ou reduzir resultados em uma coleção existente.mongodrastreia e omongostatexibe o uso da rede. Consulte mongostat.Melhorias na estabilidade da fragmentação.
1.7.2
$renameoperador permite renomear campos em um documento.db.eval()para não bloquear.Queries geográficas com fragmentação.
mongostat --discoveropçãoAprimoramentos da divisão de chunks.
A réplica define aprimoramentos de rede para servidores por trás de um nat.
1.7.1
Muitas melhorias de desempenho de fragmentação.
Melhor suporte para
$elemMatchem primitivos em arrays incorporados.Aprimoramentos do otimizador de query em queries de intervalo.
Melhorias no serviço do Windows.
Melhorias na configuração do conjunto de réplicas.
$pullfunciona com primitivos em arrays.
1.7.0
Melhorias no desempenho de fragmentação para cargas de inserção pesadas.
Suporte de atraso secundário para conjuntos de réplicas.
local.system.replset.settings.getLastErrorDefaultspara conjuntos de réplicas.Conclusão automática no shell.
Distância esférica para pesquisa geográfica.
Todas as correções de 1.6.1 e 1.6.2.