Buscar

BANCO DE DADOS APLICADO A BIG DATA - UNIDADE 04

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 1/61
BANCO DE DADOS APLICADO ABANCO DE DADOS APLICADO A
BIG DATABIG DATA
TÓPICOS AVANÇADOS EMTÓPICOS AVANÇADOS EM
BANCOS DE DADOS NÃOBANCOS DE DADOS NÃO
RELACIONAIS (NOSQL)RELACIONAIS (NOSQL)
Autor: PhD Everton Gomede
Reviso r : I sa be l Cr ist in a S iqu e ira da S i lva
INICIAR
1.00
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 2/61
Introdução
A continuidade dos serviços baseados em uso massivo de dados,
principalmente fornecidos por bancos NoSQL, apresenta alguns desa�os. Para
isso, vamos estudar como superar tais desa�os com o MongoDB e entender
como o monitoramento de bancos de dados não relacionais pode ser feito,
quais ferramentas podemos utilizar e quais são os benefícios disso. Depois,
veremos quais seriam as estratégias para recuperação de desastres, e os
backups e as formas de recuperação do MongoDB. Além disso, estudaremos
estratégias para garantir a segurança e a disponibilidade, pois elas impactam
diretamente a continuidade dos serviços. Por �m, aprenderemos sobre os
conceitos de continuidade de bancos de dados não relacionais, de forma geral.
Isso servirá como base para de�nições de estratégias no geral.
introdução
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 3/61
Depois de implantar o MongoDB em produção, você vai querer �car de olho
nele. E se o desempenho está se degradando lentamente ou se as falhas estão
ocorrendo com frequência, você vai querer ser informado sobre isso. É aí que
entra o monitoramento. Vamos começar com o tipo mais simples de
monitoramento: logging. Então, vamos explorar os comandos integrados que
fornecem o máximo de informações sobre o MongoDB em execução no
servidor – esses comandos são a base do utilitário mongostat e do console web,
que descreveremos em breve. Em seguida, veremos o monitoramento de MMS
fornecido pela empresa MongoDB, bem como algumas recomendações sobre
ferramentas de monitoramento externo e dois utilitários de diagnóstico:
bsondump e mongosniff.
Logging
Monitoramento deMonitoramento de
Bancos de DadosBancos de Dados
não relacionaisnão relacionais
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 4/61
Log é o primeiro nível de monitoramento; como tal, você deve planejar manter
registros para todas as suas implantações (DOURADO, 2013). Isso geralmente
não é um problema, porque o MongoDB requer que você especi�que a opção -
-logpath ao executá-lo em segundo plano. Mas existem algumas con�gurações
extras para estar ciente. Para habilitar o registro detalhado, inicie o processo
mongod com a opção -vvvvv (quanto mais v, mais detalhada a saída). Isso é útil
se, por exemplo, você precisar depurar algum código e desejar registrar todas
as consultas. Mas esteja atento: esse registro detalhado tornará seus logs muito
grandes e pode afetar o desempenho do servidor.
Se seus registros se tornarem muito pesados, lembre-se de que você sempre
pode armazenar seus registros em uma partição diferente. Em seguida, pode
iniciar o mongod com a opção --logappend. Isso irá anexá-lo a um registro
existente, em vez de movê-lo, e anexá um carimbo de data/hora ao nome do
arquivo, que é o comportamento-padrão. Finalmente, se você tiver um
processo MongoDB de longa duração, pode querer escrever um script que
rotaciona periodicamente os arquivos de log. MongoDB fornece o comando
logrotate para este propósito. Veja como executá-lo a partir do shell:
use admin
db.runCommand({logrotate: 1}) 
O envio do sinal SIGUSR1 para o processo também executa o comando
logrotate. Veja como enviar esse sinal para o número de processo 12345:
$ kill -SIGUSR1 12345 
Você pode encontrar o ID do processo para o qual deseja enviar o sinal usando
o comando ps, assim:
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 5/61
$ ps –ef | grep mongo 
Observe que o comando kill nem sempre é tão terrível quanto parece. Ele
apenas envia um sinal para um processo em execução, mas foi nomeado nos
dias em que a maioria dos sinais (ou todos) encerrou o processo (DOURADO,
2013). Mas executar kill com a opção de linha de comando -9 encerrará um
processo de forma abrupta, e isso deve ser evitado tanto quanto possível em
sistemas de produção.
Comandos de diagnóstico do MongoDB
O MongoDB tem vários comandos de banco de dados usados para relatar o
estado interno, que são a base de todos os aplicativos de monitoramento do
MongoDB. Aqui está uma referência rápida para alguns dos comandos que
você pode achar úteis:
 
a. Estatísticas globais do servidor: db.serverStatus() 
b. Estatísticas para a operação em execução: db.currentOp() 
c. Incluir estatísticas para operações de sistema ocioso: db.currentOp(true) 
d. Por contadores de banco de dados e estatísticas de atividade:
db.runCommand({top: 1}) 
e. Estatísticas de uso de memória e disco: db.stats()
A saída de todos esses comandos se aperfeiçoa a cada versão do MongoDB;
portanto, documentar em um meio semipermanente como este estudo nem
sempre é útil (CAMPELLO; CALDEIRA, 2014). Consulte a documentação de sua
versão do MongoDB para descobrir o que cada campo apresenta como saída.
Ferramentas de diagnóstico MongoDB
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 6/61
Além dos comandos de diagnóstico listados anteriormente, o MongoDB vem
com algumas ferramentas úteis. A maioria delas é construída nos comandos
anteriores, e elas podem ser facilmente implementadas usando-se um driver ou
o shell. Aqui está uma introdução rápida ao que cobrimos nesta seção:
a. mongostat – estatísticas globais do sistema. 
b. mongotop – estatísticas de operação global. 
c. mongosniff – tráfego de rede MongoDB. 
d. bsondump – exibe arquivos BSON como JSON.
MONGOSTAT
O método db.currentOp() mostra apenas as operações en�leiradas ou em
andamento em um momento particular no tempo. Da mesma forma, o
comando serverStatus fornece um ponto instantâneo de vários campos e
contadores do sistema. Mas às vezes você precisa de uma visão da atividade
em tempo real do sistema, e é aí que entra o mongostat. Modelado após iostat e
outras ferramentas semelhantes, mongostat pesquisa o servidor em um intervalo
�xo e exibe uma série de estatísticas, desde o número de inserções por
segundo até a quantidade de residentes na memória, para a frequência de
perdas de página da árvore B. Você pode invocar o comando mongostat no
localhost, e a votação ocorrerá uma vez por segundo:
$ mongostat 
Ele também é altamente con�gurável, e você pode iniciá-lo com --help para ver
todas as opções. Por exemplo, pode usar a opção –-host para se conectar a um
host e à porta além do padrão de localhost: 27017. Um dos recursos mais
notáveis é a descoberta de cluster; quando você inicia o mongostat com a
opção --discover, pode usar a opção –host para apontá-lo para um único nó, e ele
descobrirá os nós restantes em um conjunto de réplicas ou em um cluster
fragmentado. Em seguida, exibe todas as estatísticas do cluster agregadas.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 7/61
MONGOTOP
Semelhante à forma como mongostat é a ferramenta externa para o db.currentOp()
e server-status, mongotop é a ferramenta externa para o comando superior. Você
pode correr isso exatamente da mesma maneira que mongostat, supondo que
você tenha um servidor em execução na máquina local e ouvindo na porta-
padrão:
$ mongotopTal como acontece com mongostat, você pode executar este comando com –help
para ver uma série de opções úteis de con�guração.
MONGOSNIFF
O comando mongosniff identi�ca pacotes de um cliente para o servidor
MongoDB e os imprime de forma inteligível (DOURADO, 2013). Se estiver
escrevendo um driver ou depurando uma conexão errônea, esta é a sua
ferramenta. Você pode iniciar com o seguinte comando para escutar a interface
de rede local na porta-padrão:
sudo mongosniff --source NET I0 
Então, quando se conectar com qualquer cliente – digamos, o shell do
MongoDB –, você obterá um �uxo da conversa da rede:
127.0.0.1:58022 -->> 127.0.0.1:27017 test.$cmd 61 bytes
id:89ac9c1d
2309790749 query: { isMaster: 1.0 } ntoreturn: -1
127.0.0.1:27017 <<-- 127.0.0.1:58022 87 bytes
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 8/61
reply n:1 cursorId: 0 { ismaster: true, ok: 1.0 } 
Aqui, você pode ver um cliente executando o comando isMaster, que é
representado como um consulta para {isMaster: 1.0} contra a coleção especial de
teste $cmd. Você também pode ver que o documento de resposta contém
ismaster: true, indicando que o nó ao qual este comando foi enviado era de fato o
principal. Você pode ver todos os mongosniff opções executando-o com --help.
BSONDUMP
Outro comando útil é o bsondump, que permite examinar arquivos BSON brutos.
Os arquivos BSON são gerados pelo comando mongodump e por rollbacks de
conjunto de réplicas (CAMPELLO; CALDEIRA, 2014). Por exemplo, digamos que
você tenha alocado uma coleção com um único documento. Se essa coleção
acabar em um arquivo chamado users.bson, então pode examinar o conteúdo
facilmente:
$ bsondump users.bson
{"_id": ObjectId ("4d82836dc3efdb9915012b91"), "nome":
"Kyle"} 
Como pode ver, o bsondump mostra o BSON como JSON por padrão. Se estiver
trabalhando com depuração, você vai querer ver a composição real dos tipos e
tamanhos de BSON. Por isso, execute o comando no modo de depuração:
$ bsondump --type = debug users.bson 
Isso lhe dá o tamanho total do objeto, os tipos dos dois campos (7 e 2) e os
tamanhos desses campos.
O web console
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 9/61
Finalmente, o MongoDB fornece algum acesso às estatísticas por meio de uma
interface da web e um REST servidor. A partir da v3.0, esses sistemas são
antigos e estão em desenvolvimento ativo (CAMPELLO; CALDEIRA, 2014). Além
disso, eles relatam as mesmas informações disponíveis por meio de outras
ferramentas ou comandos de banco de dados apresentados anteriormente. Se
quiser usar esses sistemas, certi�que-se de olhar a documentação atual e
considere cuidadosamente as implicações de segurança.
Serviço de monitoramento MongoDB
MongoDB, Inc. fornece monitoramento de MMS gratuitamente, o que não só
permite que você visualize painéis para ajudá-lo a entender seu sistema, mas
também fornece uma maneira fácil de compartilhar as informações do seu
sistema com suporte MongoDB, que é indispensável caso precise de ajuda com
seu sistema. O monitoramento de MMS também pode ser licenciado como
uma versão auto-hospedada para grandes empresas, com contratos pagos.
Para começar, tudo que você precisa fazer é criar uma conta no site de
monitoramento de MMS em https://mms.mongodb.com. Então, verá instruções
para orientá-lo no processo de con�guração MMS, mas não as abordaremos
aqui.
Aplicativos de monitoramento externo
A maioria das implantações sérias exigirá um aplicativo de monitoramento
externo. Nagios e Munin são dois sistemas populares de monitoramento de
código aberto usados para �car de olho em muitas implementações do
MongoDB. Você pode usar cada um deles com o MongoDB instalando um
simples plug-in de código aberto. Escrever um plug-in para qualquer aplicativo
de monitoramento arbitrário não é difícil; envolve, principalmente, a execução
de vários comandos de estatísticas em um banco de dados MongoDB ativo. Os
comandos serverStatus, dbstats e collstats geralmente fornecem todas as
informações necessárias, e você pode obter todos eles diretamente da interface
HTTP REST, evitando a necessidade de um driver (DOURADO, 2013). Finalmente,
não se esqueça da riqueza de ferramentas disponíveis para monitoramento de
https://mms.mongodb.com/
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 10/61
sistemas de baixo nível. Por exemplo, o comando iostat pode ser útil para
diagnosticar o desempenho de problemas do MongoDB. A maioria dos
problemas de desempenho em implantações MongoDB pode ser rastreada por
uma única fonte: o disco rígido. No exemplo a seguir, usamos a opção -x para
mostrar estatísticas estendidas; especi�que 2 para exibir essas estatísticas em
intervalos de dois segundos:
$ iostat -x 2 
Para uma descrição detalhada de cada um desses campos ou para detalhes
sobre sua versão especí�ca de iostat, consulte as páginas de manual do seu
sistema (BAHGA; MADISETTI, 2016). Para um diagnóstico rápido, concentre-se
em duas das colunas mostradas:
a. A coluna de espera indica o tempo médio em milissegundos para
servir o I/O das solicitações de HTTP. Esta média inclui o tempo gasto
na �la de I/O e o tempo gasto realmente atendendo às solicitações de
I/O.
b. % útil é a porcentagem da CPU durante a qual as solicitações de I/O
foram emitidas para o dispositivo, que essencialmente se traduz no
uso de largura de banda do dispositivo.
O iostat mostra o uso moderado do disco (BAHGA; MADISETTI, 2016). O tempo
médio de espera em I/O é cerca de 100 ms (dica: isso é muito!), e a utilização é
de cerca de 30%. Se você fosse investigar os logs do MongoDB nesta máquina,
provavelmente veria várias operações (consultas, inserções ou outros). Na
verdade, são essas operações lentas que inicialmente o alertariam sobre um
problema potencial. A saída iostat pode ajudá-lo a con�rmar o problema.
Cobrimos muitas maneiras de diagnosticar e monitorar um sistema em
execução para mantê-lo funcionando sem problemas, mas agora vamos entrar
em um aspecto inevitável de uma implantação de produção: backups.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 11/61
Ferramentas de diagnóstico MongoDB
A instalação do MongoDB também possibilita que uma ferramenta seja
instalada (BAHGA; MADISETTI, 2016). A MongoDB Compass é uma ferramenta
que permite o gerenciamento de bancos, coleções, documentos, importação e
monitoramento. Ela é ideal para que o gerenciamento seja feito de forma visual
e que sua equipe de NOC (network operations center, em inglês, centro de
operações de rede) possa acompanhar, em tempo real, como o servidor do
MongoDB está operando. A �gura a seguir mostra um exemplo da ferramenta
#PraCegoVer: a imagem apresenta um exemplo de monitoramento do banco de
dados MongoDB fornecido pela ferramenta MongoDB Compass. Existem quatro
grá�cos de linha apresentando IOPS, processamento, memória e rede.
Como podemos ver na Figura 4.1, existem diversas informações que são
coletadas, processadas, agrupadas e exibidas em tempo real. Isso é de grande
importância para a equipe de infraestrutura, que geralmente utiliza grandes
Figura 4.1 - Exemplo de monitoramento fornecido pela ferramenta MongoDB
Compass 
Fonte: Adaptada de Mongo DB Compass (2020).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 12/61
painéis de monitoramento para acompanhar todos os elementos presentes na
entrega dos serviços.
Outro ponto interessante da ferramenta é a possibilidade de monitorar planos
de execução. Um plano de execução é o caminho escolhido pelo MongoDB
para localizar os dados de acordo com os predicados da consulta.Dessa forma,
podemos acompanhar quais índices são utilizados e monitorar o desempenho
da consulta, para identi�car eventuais gargalos e pontos de melhoria. A Figura
4.2 exibe um exemplo de plano de execução para uma das coleções.
#PraCegoVer: a imagem apresenta um exemplo de análise de índices fornecido
pela ferramenta MongoDB Compass. A imagem contém três elementos principais:
um �ltro para escolha dos parâmetros de análise, uma imagem com um resumo
dos índices e, por �m, os detalhes do índice selecionado.
De forma adicional, podemos monitorar o que está sendo armazenado nas
coleções. Isso é importante para entender a qualidade dos dados e,
consequentemente, monitorar se poderemos ter surpresas por conta de erros
Figura 4.2 - Exemplo de análise de índices fornecido pela ferramenta MongoDB
Compass 
Fonte: Adaptada de Mongo DB Compass (2020).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 13/61
na coleta dos documentos. A Figura 4.3. exibe um exemplo de análise de dados
para os documentos coletados na coleção chamada catalog.books.
#PraCegoVer: a imagem apresenta um exemplo da ferramenta MongoDB Compass
para análise de dados dentro de uma coleção. Existe a análise de três
características, sendo elas pageCount, publishedDate e shortedDescription.  Esta
coleção está contida no banco de dados Catalog.
Portanto, a ferramenta MongoDB Compass pode ser uma grande aliada para a
equipe de NOC e também para o pessoal de desenvolvimento, pois permite
monitorar uma miríade de informações para facilitar a construção de
aplicações de big data que fazem uso intensivo de bancos de dados NoSQL,
como é o caso do MongoDB. Além disso, tal ferramenta pode ser um ponto de
partida para a resolução dos mais variados problemas que se possa encontrar
em operação.
Figura 4.3 - Exemplo de análise dos dados de uma coleção feita pelo MongoDB
Compass 
Fonte: Adaptada de Mongo DB Compass (2020).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 14/61
praticarVamos Praticar
O primeiro passo para um bom diagnóstico envolve obter bons dados. O banco de
dados MongoDB apresenta uma série de ferramentas para realizar um
monitoramento efetivo. Além disso, existe a possibilidade de combinar tais
ferramentas, como é o caso do MongoDB Compass. Assinale a alternativa que indique
corretamente qual é a ferramenta que podemos utilizar para veri�car como a
interface de rede lo está sendo utilizada:
BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications, 2016.
a) mongostat.
Feedback: alternativa incorreta, pois a ferramenta mongostat obtém as
estatísticas globais do sistema. Tal ferramenta possibilita a obtenção das
estatísticas do banco e não estatísticas da interface de rede que seria
necessária para monitorar a interface lo.
b) mongosniff.
Feedback: alternativa correta, pois a ferramenta bsondump exibe o tráfego
de rede MongoDB. Isso pode ser aplicado a qualquer uma das interfaces e
permite o monitoramento tanto da entrada quanto da saída do �uxo de bits
do banco de dados MongoDB
c) mongotop.
Feedback: alternativa incorreta, pois a ferramenta mongotop obtém as
estatísticas de operação global. Tal ferramenta possibilita a obtenção das
estatísticas do processamento atual do banco de dados, e não estatísticas da
interface de rede que seriam necessárias para monitorar a interface lo.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 15/61
d) bsondump.
Feedback: alternativa incorreta, pois a ferramenta bsondump exibe arquivos
BSON como JSON. Tal ferramenta possibilita a obtenção dos dados do banco
em um formato legível para os desenvolvedores, e não estatísticas da
interface de rede que seriam necessárias para monitorar a interface lo.
e) iostat.
Feedback: alternativa incorreta, pois a ferramenta iostat permite o
monitoramento do que está acontecendo com o disco do banco de dados. Tal
ferramenta possibilita a obtenção das estatísticas do atual estado do disco do
banco de dados, e não estatísticas da interface de rede que seriam
necessárias para monitorar a interface lo.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 16/61
Parte da implantação de banco de dados em produção envolve deixá-lo
preparado para desastres. Os backups desempenham um papel importante
nisso. Quando ocorre um desastre, um bom backup pode salvar o dia, e, nesses
casos, você nunca se arrependerá de ter investido tempo e diligência em uma
política de backup (DOURADO, 2013). Mesmo assim, alguns usuários ainda
decidem que podem viver sem backups; neste caso, eles são os únicos
culpados quando não conseguem recuperar seus bancos de dados (CORONEL;
MORRIS, 2015). Não seja um desses usuários!
Três estratégias gerais para fazer backup de um banco de dados MongoDB são
as seguintes:
a. Usando mongodump e mongorestore. 
b. Copiando os arquivos de dados brutos. 
c. Usando backups de MMS.
Estratégias paraEstratégias para
recuperação derecuperação de
DesastresDesastres
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 17/61
Examinaremos cada uma destas estratégias nas próximas cinco seções. São
elas: mongodump e mongorestore; restauração dos arquivos BSON; backups
baseados em arquivos de dados; cópia de arquivos de dados e backups de
MMS.
mongodump e mongorestore
O mongodump grava o conteúdo de um banco de dados como arquivos BSON.
Por sua vez, o mongorestore lê estes arquivos e os restaura (BANKER et al., 2016).
Essas ferramentas são úteis para fazer backup de coleções individuais e bancos
de dados completos, bem como, eventualmente, de todo o servidor. Eles
podem ser executados em um servidor ativo (que você não precisa bloquear ou
desligar) ou você pode direcioná-los para um conjunto de arquivos de dados,
mas apenas quando o servidor está bloqueado ou desligado. A maneira mais
simples de executar o mongodump é assim:
$ mongodump -h localhost --port 27017 
Isso armazenará cada banco de dados e coleção do servidor em localhost para
um diretório chamado dump. O diretório dump incluirá todos os documentos
de cada coleção, até mesmo as coleções do sistema que de�nem usuários e
índices. Mas os próprios índices não serão incluídos no armazenamento. Isso
signi�ca que, quando você restaurar, todos os índices terão que ser
reconstruídos. Se você tiver um conjunto de dados especialmente grande ou
um grande número de índices, isso vai demorar.
Restaurando arquivos BSON
Para restaurar arquivos BSON, execute mongorestore e aponte-o para a pasta de
armazenamento:
$ mongorestore -h localhost --port 27017 dump 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 18/61
Observe que, ao restaurar, mongorestore não descarta dados por padrão, então,
se você estiver restaurando para um banco de dados existente, certi�que-se de
executar com o sinalizador --drop.
Backups baseados em arquivos de dados
A maioria dos usuários opta por um backup baseado em arquivo; nele, os
arquivos de dados brutos são copiados para uma nova localização. Esta
abordagem é geralmente mais rápida do que o mongodump, porque os backups
e as restaurações não requerem nenhuma transformação dos dados
(CAMPELLO; CALDEIRA, 2014). O único problema potencial com um backup
baseado em arquivo é que ele requer o bloqueio do banco de dados, mas
geralmente você bloqueará um nó secundário e, portanto, deve ser capaz de
manter seu aplicativo on-line durante o backup.
Copiando os arquivos de dados
Os usuários frequentemente cometem o erro de copiar os arquivos dedados
sem primeiro bloquear a base de dados (CORONEL; MORRIS, 2015). Mesmo se o
registro no diário estiver ativado, isso resultará na corrupção do arquivo
copiado arquivos. Esta seção ensinará a tornar consistentes os arquivos de
dados, bloqueando o banco de dados para permitir backups seguros.
Para copiar os arquivos de dados com segurança, primeiro você precisa se
certi�car de que eles estão em um mesmo estado; então, tem que desligar o
banco de dados ou bloqueá-lo. Desligar o banco de dados pode envolver
algumas implantações, e a maioria dos usuários opta pelo bloqueio de
aproximação. Este é o comando para sincronizar e bloquear: 
use admin
db.fsyncLock() 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 19/61
Neste ponto, o banco de dados está bloqueado contra gravação, e os arquivos
de dados são sincronizados com disco. Isso signi�ca que agora é seguro copiar
os arquivos de dados. Se você estiver executando um sistema de arquivos ou
sistema de armazenamento que suporte instantâneo, é melhor tirar um
instantâneo e copiar os dados mais tarde. Isso permite que você desbloqueie o
banco de dados rapidamente (BANKER et al., 2016).
Se não puder executar um instantâneo, terá que manter o banco de dados
bloqueado enquanto copia os arquivos de dados. Se estiver copiando arquivos
de dados de um nó secundário, certi�que-se de que o nó está atualizado com o
primário e tem oplog su�ciente para permanecer o�-line durante todo o tempo
do backup. Depois de terminar de fazer um instantâneo ou backup, você pode
desbloquear o banco de dados. O comando de desbloqueio pode ser feito
assim:
db.fsyncUnlock() 
Observe que esta é apenas uma solicitação para desbloquear; o banco de
dados pode não desbloquear imediatamente. Execute o método db.currentOp()
para veri�car se ele não está mais bloqueado.
Backups de MMS
Mais uma vez, a equipe de MMS do MongoDB tem uma solução para esse
problema. Ao fazer backups de MMS use o oplog de replicação para fornecer
backups point-in-time a todo o cluster. Isso funciona para conjuntos de réplicas
independentes, bem como para todo o cluster fragmentado (CORONEL; MORRIS,
2015). Como mencionamos anteriormente, a equipe de MMS está
constantemente adicionando novos recursos; portanto, veri�que a
documentação atualizada para detalhes.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 20/61
praticarVamos Praticar
Backup é um dos pontos fundamentais para uma estratégia de continuidade de
negócios. O MongoDB possibilita diversas formas de realizar tais cópias de
segurança, bem como diversas maneiras para restaurá-las. Imagine-se como o
projetista do banco de dados que queira realizar uma cópia de segurança do banco
de dados no ip 127.0.0.1 para o diretório bkp. Neste caso, assinale a alternativa que
indica corretamente qual comando utilizar:
BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications, 2016.
a) mongod --bind_ip 127.0.0.1,10.4.1.55
Feedback: alternativa incorreta, pois o  comando mongod --bind_ip permite
que exista uma tradução do endereço de rede 127.0.0.1 para o endereço
10.4.1.55. Isso não faz uma cópia de segurança.
b) $ sudo tcpdump -i lo -X
Feedback: alternativa incorreta, pois o comando tcpdump permite que os
dados que estão sendo trafegados na interface de rede do servidor MongoDB
sejam armazenados. Mas estes não são os dados do banco.
c) $ mongodump -h localhost --port 27017
Feedback: alternativa incorreta, pois o mongorestore permite a criação de
uma cópia do banco de dados. Os parâmetros -h --port fornecem o servidor e
a porta, respectivamente. O parâmetro bkp, que indica o local a ser
armazenado, está ausente.
d) $ mongorestore -h localhost --port 27017 bkp
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 21/61
Feedback: alternativa correta, pois o mongorestore permite a criação de uma
cópia do banco de dados. Os parâmetros -h --port fornecem o servidor e a
porta, respectivamente. O parâmetro bkp indica o local a ser armazenado.
e) db.fsyncLock()
Feedback: alternativa incorreta, pois o comando db.fsyncLock() está
relacionado à sincronização dos dados em um conjunto de réplicas. Apesar de
realizar uma espécie de cópia, não se trata de um backup.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 22/61
A maioria dos mecanismos de segurança depende da troca de chaves para
manter a disponibilidade. Certi�que-se de manter suas chaves seguras (e
armazenadas usando as permissões adequadas) e não as compartilhe entre os
servidores, exceto quando necessário. Como um exemplo extremo, se você
usar a mesma chave em todas as máquinas, tudo o que um invasor tem que
fazer é comprometer essa única chave para ler todo o tráfego em sua rede.
Vamos estudar tais aspectos a seguir.
Segurança
A segurança é um aspecto extremamente importante e muitas vezes esquecido
da implantação em produção de uma base de dados. Nesta seção,
abordaremos os principais tipos de segurança, incluindo ambientes seguros,
criptogra�a de rede, autenticação e autorização. Terminaremos com uma breve
Estratégias paraEstratégias para
garantir Segurançagarantir Segurança
e Disponibilidadee Disponibilidade
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 23/61
discussão sobre quais recursos de segurança estão disponíveis apenas na
edição empresarial do MongoDB.
Talvez mais do que em qualquer outro tópico, é vital permanecer atualizado
com as ferramentas de segurança e práticas recomendadas. Portanto, esta
seção apresenta uma visão geral do que considerar ao pensar em segurança,
porém consulte a documentação  ao colocá-la em produção.
Ambientes Seguros
O MongoDB, como todos os bancos de dados, deve ser executado em um
ambiente seguro. Usuários de produção do MongoDB devem tirar proveito dos
recursos de segurança dos sistemas operacionais modernos para garantir a
saibamaisSaiba mais
A documentação do MongoDB está sendo
permanentemente atualizada. Para obter as
informações mais precisas, é importante
sempre acessar a documentação o�cial antes
de considerar colocar o banco de dados em
operação.
Fonte: Banker et al. (2016), Security (2008, on-
line).
ACESSAR
https://docs.mongodb.org/manual/security
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 24/61
segurança de seus dados. Provavelmente, o mais importante desses recursos é
o �rewall (CORONEL; MORRIS, 2015). A única di�culdade potencial em usar um
�rewall com MongoDB é saber qual das máquinas precisam se comunicar
umas com as outras. Felizmente, as regras de comunicação são simples:
a. Com um conjunto de réplicas, cada nó deve ser capaz de alcançar
todos os outros nós.
b. Todos os clientes de banco de dados devem ser capazes de se
conectar a cada nó do conjunto de réplicas.
c. Todas as comunicações são feitas usando o protocolo TCP.
d. Para um nó ser alcançável, signi�ca que ele pode ser alcançado na
porta em que estava con�gurado para ouvir. Por exemplo, mongod
escuta na porta TCP 27017 por padrão, portanto, para ser alcançável,
deve estar acessível nessa porta.
Um cluster de shard consiste em partes de conjuntos de réplicas. Todas as
regras do conjunto de réplicas se aplicam; o cliente, no caso de fragmentação,
é o roteador mongos. Além disso:
a. Todos os shards devem ser capazes de se comunicar diretamente uns
com os outros.
b. Os shards e os roteadores mongos devem ser capazes de se
comunicar com os servidores de con�guração.
A Figura 4.4 mostra uma visualização simpli�cada dessasregras de
conectividade. Além disso, qualquer seta conectada a um conjunto de réplicas
em caixa ou conjunto de servidores de con�guração signi�ca que o requisito de
conectividade se aplica a cada servidor individual dentro da caixa. 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 25/61
#PraCegoVer: a imagem apresenta um exemplo simpli�cado de como o MongoDB
depende do hardware e sistema operacional. Existem três tipos de con�gurações:
con�guração do MongoDB (MongoDB server, MongoDB read/write locks, MongoDB
data �les); con�guração do hardware (CPU, RAM, DISK); e con�guração do sistema
operacional (NTP, Filesystem). A pilha inicia, de baixo para cima, com os elementos
MongoDB data �les (journal on separate disk, directoryperdb ), Filesystem (ext4 or
xfs with noatime and correct ulimits set) e Disk (RAID 10 using LVM). Depois disso,
segue com MongoDB server, CPU (64 bit, little endian), RAM (>working set),
MongoDB read/write locks,Accurate system time (NTP) em paralelo.
Na maior parte das vezes, executar o MongoDB em um ambiente seguro é um
tópico completo por si só (CAMPELLO; CALDEIRA, 2014). Mas uma opção, --
bind_ip, é relevante aqui. Por padrão, o MongoDB ouvirá em todos os endereços
da máquina B, mas você pode querer que o MongoDB escute em um ou mais
endereços especí�cos. Por isso você pode iniciar mongod e mongos com a
opção --bind_ip, que pega uma lista de um ou mais endereços IP separados por
Figura 4.4 - Exemplo simpli�cado da visualização de como MongoDB depende
do sistema operacional e hardware 
Fonte: Banker et al. (2016, p. 379).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 26/61
vírgula. Por exemplo, para ouvir na interface de loopback, bem como no
endereço IP interno 10.4.1.55, você iniciaria o mongod assim:
mongod --bind_ip 127.0.0.1,10.4.1.55 
Observe que os dados entre as máquinas serão enviados com clareza, a menos
que tenha SSL ativado, o que abordaremos na próxima seção.
Criptogra�ia de Rede
Talvez o aspecto mais fundamental de proteger seu sistema seja garantir que o
tráfego em sua rede seja criptografado (DOURADO, 2013). A menos que seu
sistema esteja completamente isolado e ninguém possa ver seu tráfego (por
exemplo, se todo o seu tráfego já é criptografado em uma rede privada virtual,
ou se as regras de roteamento de rede são con�guradas de modo que nenhum
tráfego seja enviado para suas máquinas de fora de sua rede con�ável), você
provavelmente deve usar MongoDB com criptogra�a. Felizmente, a partir da
v2.4, o MongoDB vem com uma biblioteca que lida com essa criptogra�a,
chamada Secure Sockets Layer (SSL), de modo integrado.
Para ver por que isso é importante, vamos desempenhar o papel de um
bisbilhoteiro, usando o Unix comando tcpdump. Primeiro, use o comando ifconfig
para encontrar o nome do loopback interface, ou a interface que programa a
comunicação da máquina local para o uso da máquina local. Esta é a aparência
do início da saída em nossa máquina:
$ ifconfig 
Para nós, a interface de loopback é lo. Agora podemos usar o comando
tcpdump apropriado para despejar todo o tráfego nesta interface:
$ sudo tcpdump -i lo -X 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 27/61
Ler o tráfego de rede usando tcpdump requer permissões de root, portanto, se
você não pode executar esse comando, apenas leia o exemplo a seguir
(CONNOLLY;   BEGG, 2019). Em outro terminal na mesma máquina, inicie um
servidor mongod sem SSL habilitado (altere o caminho dos dados conforme
apropriado):
$ mongod –dbpath /data/db/ 
Em seguida, conecte-se ao banco de dados e insira um único documento:
db.test.insert ({"message": "plaintext"}) 
Agora, se voc olhar a saída do tcpdump no terminal, verá uma série de pacotes
de saída, uma das quais se parece com isto:
16: 05: 10.507867 IP localhost.localdomain.50891 
Agora, vamos executar o MongoDB com SSL e ver o que acontece.
Executar Mongodb com SSL
Primeiro, gere a chave para o servidor:
openssl req -newkey rsa: 2048 -new -x509 -days 365 -nodes -
out mongodbcert.crt -keyout mongodb-cert.key
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem 
Em seguida, execute o servidor mongod com SSL, usando --sslPEMKeyFile e –
sslMode como opções:
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 28/61
$ mongod --sslMode requireSSL --sslPEMKeyFile mongodb.pem 
Agora, conecte o cliente com SSL e faça exatamente a mesma operação:
$ mongo --ssl
...
db.test.insert ({"message": "plaintext"}) 
Se você voltar para a janela com tcpdump, verá algo completamente
incompreensível onde a mensagem costumava estar:
16: 09: 26.269944 IP localhost.localdomain.50899 
Sucesso! Nosso sistema está seguro agora? Não exatamente. A criptogra�a
adequada é apenas um aspecto da proteção do sistema. Na próxima seção,
discutiremos como veri�car a identidade de serviços e usuários e, a seguir,
falaremos sobre como obter controle re�nado do que cada usuário tem
permissão para fazer.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 29/61
Autenticação
A próxima camada de segurança é a autenticação. Para que serve a criptogra�a
de rede, se alguém na internet pode se passar por um usuário legítimo e �zer o
que quiser com seu sistema? A autenticação permite que você veri�que a
identidade de serviços e usuários em um ambiente seguro. Primeiro,
discutiremos por que e como autenticar serviços e, em seguida, usuários. Bem
saibamaisSaiba mais
SSL em clusters
Agora você sabe como con�gurar SSL entre o
shell mongo e um único mongod, o que
levanta a questão óbvia de como isso se
estende a um cluster inteiro (BANKER et al.,
2016). Felizmente, isso é bastante semelhante
ao exemplo anterior. Basta iniciar cada nó do
cluster com a opção requireSSL --sslMode. Se
você já está executando um cluster sem SSL,
há um processo de atualização para garantir
que possa atualizar sem perder a
conectividade entre seus nós na transição.
Fonte: (UPGRADE…, 2008).
ACESSAR
https://docs.mongodb.org/manual/tutorial/upgrade-cluster-to-ssl/
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 30/61
então discuta brevemente como esses conceitos se traduzem em conjuntos de
réplicas e clusters fragmentados (CONNOLLY; BEGG, 2019). Como sempre,
cobriremos os conceitos principais aqui, mas você deve consultar a
documentação mais recente para sua versão do MongoDB para garantir que
você esteja atualizado; consulte
https://docs.mongodb.org/manual/core/authentication (AUTHENTICATION,
2008).
Autenticação de Serviço
O primeiro estágio de autenticação é veri�car se o programa na outra
extremidade da conexão é con�ável. Por que isso é importante? O principal
ataque que se pretende evitar é o ataque man-in-the-middle, no qual o invasor
se disfarça de cliente, a �m de interceptar todo o tráfego. Veja a Figura 4.5 para
uma visão geral deste ataque.
#PraCegoVer: a imagem apresenta um exemplo de um tipo de ataque conhecido
como man-in-the-middle. Existem três elementos na �gura: um chamado “Client”,
que representa uma requisição de um computador de um usuário; um chamado
“Attacker”, que representa um potencial invasor; e, por �m, um elemento chamado
“Server”, que representa o serviço baseado no MongoDB. O primeiro elemento, na
cor amarela, representando um usuário, acessa o elemento na cor branca,
representando o man-in-the-middle; já o elemento na cor roxa representa o servidor
que será acessado. Geralmente o acesso é feito via cor amarela, branca e roxa.
Figura 4.5 - Exemplo de ataqueconhecido como man-in-the-middle 
Fonte: Banker et al. (2016, p. 398).
https://docs.mongodb.org/manual/core/authentication
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 31/61
Como você pode ver na Figura 4.5, um ataque man-in-the-middle é exatamente o
que parece:
a. Um invasor mal-intencionado se apresenta como um servidor, criando
uma conexão com o cliente, e em seguida se apresenta como cliente e
cria uma conexão com o servidor.
b. Depois disso, ele não pode apenas descriptografar e criptografar todo
o tráfego entre o cliente e servidor, mas pode enviar mensagens
arbitrárias para o cliente e o servidor.
Felizmente, há esperança. A biblioteca SSL que o MongoDB usa não só fornece
criptogra�a, mas também fornece algo chamado autenticação de certi�cado,
que consiste em usar um terceiro con�ável não envolvido na comunicação para
veri�car se a pessoa que envia a chave é quem a�rma ser. Em teoria, o invasor
não comprometeu o terceiro. Gerar certi�cados e fazer com que sejam
assinados por terceiros con�áveis, conhecidos como a autoridade de
certi�cação (CA), para comunicação on-line está fora do escopo deste estudo.
Existem inúmeras opções aqui, e cada uma é um tópico à parte. Para começar,
você pode trabalhar com um CA diretamente, como Symantec, Comodo SSL,
GlobalSign e outros, ou pode usar ferramentas que foram criadas para tornar
esse processo mais fácil, como SSLMate. Depois de ter um certi�cado, você
pode usá-lo no MongoDB, assim:
mongod --clusterAuthMode x509 --sslMode requireSSL --
sslPEMKeyFile server.pem --sslCAFile ca.pem
mongo --ssl --sslPEMKeyFile client.pem 
Em que ca.pem contém a cadeia de certi�cados raiz da CA e client.pem é
assinado por esse CA. O servidor usará o conteúdo de ca.pem para veri�car se
client.pem foi realmente assinado pela CA e, portanto, é con�ável (CONNOLLY;
BEGG, 2019). Seguir essas etapas garantirá que nenhum programa malicioso
possa estabelecer uma conexão com seu banco de dados.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 32/61
Autenticação de Usuário
Embora a autenticação de serviço seja excelente para evitar que invasores até
mesmo criem uma conexão com o seu sistema, às vezes queremos conceder
ou revogar o acesso de usuários individuais.
No MongoDB, uma função é essencialmente um conjunto de privilégios, e um
privilégio é qualquer operação que possa ser executada no MongoDB. A função
é um conceito útil porque às vezes nossa ideia lógica de uma “função” do
usuário não mapeia as operações de banco de dados primitivas de modo
adequado (CAMPELLO; CALDEIRA, 2014). Por exemplo, a função de leitura
saibamaisSaiba mais
Esta API mudou drasticamente de v2.4 para
v2.6 e pode mudar novamente em versões
futuras; portanto, certi�que-se de ler a
documentação de sua versão de servidor
quando tentar con�gurar isso. Os exemplos
aqui são para v2.6 e v3.0, que suportam
autenticação baseada em função.
Fonte: Campello e Caldeira (2014) e
Authentication (2008).
ACESSAR
https://docs.mongodb.com/manual/core/authentication/
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 33/61
integrada não permite apenas que um usuário execute consultas de
localização, mas também que os usuários executem certos comandos que
exibem estatísticas sobre os bancos de dados e coleções para as quais eles
têm a função de leitura.
O MongoDB tem um conjunto conveniente de funções integradas, mas também
oferece suporte extra se elas não forem su�cientes (BANKER et al., 2016). Não
cobrimos as funções em detalhes aqui; este tópico cai na categoria de recursos
de segurança mais avançados e especializados, então, se você estiver em uma
situação em que precise de funções de�nidas pelo usuário, recomendamos
consultar a documentação mais atualizada para seu sistema e sua versão do
MongoDB (CONNOLLY;   BEGG, 2019). Agora, vamos pular direto para um
exemplo de como con�gurar a autenticação básica para um único mongod.
Con�igurando a autenticação básica
Primeiro você deve iniciar um nó mongod com a autenticação habilitada.
Observe que se este nó estiver em um cluster fragmentado ou em um conjunto
de réplicas, você também precisa de opções para permitir a autenticação com
outros servidores. Mas, para um único nó, habilitar a autenticação requer
apenas uma bandeira:
$ mongod --auth 
Ao se conectar ao servidor pela primeira vez, adicione um usuário
administrativo à conta:
use admin
db.createUser(
{
 user: "boss",
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 34/61
 pwd: "supersecretpassword",
 roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
) 
Em nosso exemplo, demos a esse usuário uma função de userAdminAnyDatabase,
que lhe dá acesso completo ao sistema, incluindo a possibilidade de adicionar
e remover novos usuários, bem como alterar seus privilégios. Este é
essencialmente o superusuário do MongoDB. Agora, podemos fazer login como
este usuário:
use admin
db.auth ("boss", "supersecretpassword") 
Podemos, então, criar usuários para bancos de dados individuais. Mais uma
vez, usamos o método createUser. As principais diferenças, aqui, são as funções:
use stocks
db.createUser(
{
 user: "trader",
 pwd: "youlikemoneytoo",
 roles: [ { role: "readWrite", db: "stocks" } ]
}
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 35/61
)
db.createUser(
{
 user: "read-only-trader",
 pwd: "weshouldtotallyhangout",
 roles: [ { role: "read", db: "stocks" } ]
}
) 
Agora, o usuário trader tem a função readWrite no banco de dados de stocks,
enquanto o read-only-trader tem apenas a função de leitura. Basicamente, isso
signi�ca que o primeiro usuário pode ler e gravar dados do stocks, e o segundo
pode apenas lê-los. Como adicionamos esses usuários ao banco de dados de
stocks, precisamos autenticar usando esse banco de dados também:
use stocks
db.auth("trader", "youlikemoneytoo") 
Removendo um Usuário
Para remover um usuário, use o auxiliar dropUser no banco de dados ao qual ele
foi adicionado:
use stocks
db.dropUser("trader") 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 36/61
Isso é um pouco pesado, então você também pode revogar o acesso do usuário
sem removê-lo completamente do sistema, usando o ajudante
revokeRolesFromUser, e então conceder-lhe os papéis novamente, usando o
auxiliar grantRolesToUser. Para fechar a sessão, você não precisa se desconectar
explicitamente; encerrar a conexão (fechando o shell) fará isso muito bem. Mas
há um ajudante para registro, se precisar:
db.logout() 
Naturalmente, você pode usar toda a lógica de autenticação que exploramos
aqui usando os drivers. Veri�que a API do seu driver para obter os detalhes.
Autenticação de conjunto de Réplicas
Os conjuntos de réplicas oferecem suporte à mesma API de autenticação que
acabamos de descrever. Mas permitir a autenticação para um conjunto de
réplicas requer con�guração extra, porque não apenas os clientes precisam de
tal con�guração para autenticar com o conjunto de réplicas, mas os nós do
conjunto de réplicas também precisam ser capazes de se autenticarem.
A autenticação interna do conjunto de réplicas pode ser feita por meio de dois
mecanismos separados:
a. Autenticação de arquivo de chave.
b. Autenticação X509.
Em ambos os casos, cada nó do conjunto de réplicas se autentica com os
outros como um usuário interno especial, que tem privilégios su�cientes para
fazer a replicação funcionar corretamente.
Autenticação de arquivo de Chave
O mecanismo de autenticaçãomais simples e menos seguro é a autenticação
de arquivo de chave (BANKER et al., 2016). Isso envolve a criação de um arquivo
de chave para cada nó que contém a senha do conjunto de réplicas que será
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 37/61
usada para autenticação com os outros nós do mesmo conjunto de réplicas. O
lado positivo disso é que ele é fácil de con�gurar. Já a desvantagem é que, se
um invasor compromete apenas uma máquina, você terá que alterar a senha
para cada nó no cluster, o que não pode ser feito sem algum tempo de
inatividade.
Para começar, crie o arquivo que contém seu segredo. O conteúdo do arquivo
servirá como a senha que cada membro do conjunto de réplicas usa para se
autenticar com os outros. Como exemplo, você pode criar um arquivo chamado
secret.txt e preenchê-lo com o seguinte (não use esta senha em um cluster real):
tOps3cr3tpa55word 
Coloque o arquivo na máquina de cada membro do conjunto de réplicas e
ajuste as permissões, para que ele seja acessível apenas ao proprietário:
sudo chmod 600 /home/mongodb/secret.txt 
Por �m, inicie cada membro do conjunto de réplicas especi�cando a
localização do arquivo de senha, usando a opção --keyFile:
mongod --keyFile /home/mongodb/secret.txt 
A autenticação agora será habilitada para o conjunto. Você vai criar um usuário
administrador e avançar, como fez na seção anterior.
Autenticação X509
A autenticação do certi�cado X509 é integrada ao OpenSSL, a biblioteca que o
MongoDB usa para criptografar o tráfego de rede. Como mencionamos
anteriormente, obter certi�cados assinados está fora do escopo deste estudo.
No entanto, uma vez que você os tenha, poderá iniciar cada nó como:
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 38/61
mongod --replSet myReplSet --sslMode requireSSL --
clusterAuthMode x509 -sslClusterFile --sslPEMKeyFile
server.pem --sslCAFile ca.pem 
Em que server.pem é uma chave assinada pela autoridade de certi�cação e
ca.pem corresponde ao cliente. Existe uma maneira de atualizar um sistema
usando autenticação de arquivo de chave por meio de certi�cados X509, a �m
de que não haja tempo de inatividade (CAMPELLO; CALDEIRA, 2014). Veja os
documentos do MongoDB para obter detalhes sobre como fazer isso ou
veri�que a documentação mais recente do MMS para ver se o suporte foi
adicionado à automação MMS.
Autenticação de sharding
A autenticação de sharding é uma extensão da autenticação do conjunto de
réplicas. Cada conjunto de réplicas no cluster é protegido conforme descrito na
seção anterior. Além disso, toda a con�guração servidora e cada instância
mongos podem ser con�guradas para autenticar com o resto do cluster
exatamente da mesma maneira, usando um arquivo de chave compartilhada
ou um certi�cado X509 de autenticação. Depois de fazer isso, todo o cluster
pode usar autenticação.
Recursos de segurança corporativa
Alguns recursos de segurança existem apenas no plug-in empresarial pago do
MongoDB. Por exemplo, os mecanismos de autenticação e autorização que
permitem ao MongoDB interagir com Kerberos e LDAP são corporativos. Além
disso, o módulo corporativo adiciona suporte de auditoria, para que os eventos
relacionados à segurança sejam rastreados e registrados. No MongoDB, os
documentos mencionam explicitamente se um determinado recurso é apenas
corporativo.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 39/61
praticarVamos Praticar
A autenticação de sharding é uma extensão da autenticação do conjunto de réplicas.
Além disso, toda a con�guração servidora e de cada instância mongos pode ser
con�gurada para autenticar com o restante do cluster exatamente da mesma maneira,
usando um arquivo de chave compartilhada ou um certi�cado X509 de autenticação.
Depois de fazer isso, todo o cluster pode usar autenticação.
Nesse caso, para qual �nalidade uma autenticação sharding deve ser utilizada?
Exempli�que em termos conceituais.
Feedback: Esse tipo de autenticação deve ser utilizado no conjunto de
réplicas, para evitar que seja con�gurado individualmente em cada
réplica. Quando temos poucas réplicas, isso pode ser fácil, mas pense
em um conjunto com 300 réplicas. Tal tarefa seria muito custosa para
ser feita individualmente.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 40/61
Nesta seção, abordaremos algumas tarefas administrativas básicas, incluindo
importação e exportação de dados, lidar com a fragmentação do disco e
atualizar o sistema.
Importação e exportação de dados
Se estiver migrando um sistema existente para o MongoDB ou se precisar
propagar o banco de dados com informações de algo, como um data
warehouse, precisará de um método de importação e�ciente (BANKER et al.,
2016). Você também pode precisar de uma boa estratégia de exportação,
porque pode ter que exportar dados do MongoDB para trabalhos de
processamento externo. Por exemplo, exportar dados ao Hadoop para
Conceitos deConceitos de
continuidade decontinuidade de
bancos de dadosbancos de dados
não relacionaisnão relacionais
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 41/61
processamento em lote tornou-se uma prática comum. Existem duas maneiras
de importar e exportar dados com MongoDB:
a. Use as ferramentas incluídas, mongoimport e mongoexport. 
b. Escreva um programa simples usando um dos drivers.
Tais ferramentas podem ser utilizadas para importação pontuais (ad hoc) de
dados ou para importação automatizada. Tais importações podem ser
processadas via scripts (shell ou bat) e ser agendadas e realizadas via MongoDB
Compass. O importante é sempre pensar na otimização dos processos para
facilitar a administração dos bancos de dados não relacionais.
mongoimport e mongoexport
Junto com o MongoDB estão dois utilitários para importar e exportar dados:
mongoimport e mongoexport. Você pode usar o mongoimport para importar
arquivos JSON, CSV e TSV. Isto é útil para carregar dados de bancos de dados
relacionais no MongoDB:
$ mongoimport -d stocks -c values --type csv --headerline
stocks.csv 
No exemplo, você importa um arquivo CSV chamado stocks.csv para a coleção
de valores do banco de dados de ações. O sinalizador --headerline indica que a
primeira linha do arquivo CSV contém os nomes dos campos. Você pode ver
todas as opções de importação executando mongoimport --help.
Use mongoexport para exportar todos os dados de uma coleção para um arquivo
JSON ou CSV:
$ mongoexport -d stocks -c values -o stocks.csv 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 42/61
Este comando exporta dados para o arquivo stocks.csv. Assim como sua
contraparte, você pode ver o resto das opções de comando do mongoexport
iniciando-o com o sinalizador --help.
Scripts de importação e exportação
personalizados
É provável que você use as ferramentas de importação e exportação do
MongoDB quando os dados com os quais está lidando são relativamente
planos; depois de introduzir subdocumentos e matrizes, o formato CSV torna-se
estranho, porque não foi projetado para representar dados aninhados
(CONNOLLY;   BEGG, 2019). Quando precisa exportar um documento rich para
CSV ou importar um CSV para um documento rich MongoDB, pode ser mais
fácil construir uma ferramenta personalizada. Você consegue fazer isso usando
qualquer um dos drivers (BANKER et al., 2016). Por exemplo, os usuários do
MongoDB geralmente escrevem scripts que se conectam a um banco de dados
relacional e, em seguida, combinam os dados de duas tabelas em uma coleçãoúnica.
Esta é a parte complicada de mover dados para dentro e para fora do
MongoDB: a maneira como os dados são modelados pode diferir entre os
sistemas. Nesses casos, esteja preparado para usar os drivers como suas
ferramentas de conversão.
Compactação e reparo
O MongoDB inclui uma ferramenta integrada para reparar um banco de dados.
Você pode iniciá-la a partir da linha de comando para reparar todos os bancos
de dados no servidor:
$ mongod --repair 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 43/61
É possível, ainda, executar o comando repairDatabase para reparar um único
banco de dados:
use cloud-docs
db.runCommand ({repairDatabase: 1}) 
O reparo é uma operação o�-line. Enquanto estiver em execução, o banco de
dados será bloqueado para leitura e escrita. O processo de reparo funciona
lendo e escrevendo todos os arquivos de dados, e descartando quaisquer
documentos corrompidos no processo. Ele também reconstrói cada índice. Isso
signi�ca que, para reparar um banco de dados, você precisa de espaço livre em
disco o su�ciente para armazenar a reescrita de seus dados. Dizer que os
reparos são caros é um eufemismo, pois reparar um grande banco de dados
pode levar dias e afetar o tráfego para outros bancos de dados no mesmo nó.
O reparo do MongoDB foi originalmente usado como uma espécie de último
esforço para recuperar um banco de dados corrompido (BANKER et al., 2016).
No caso de um desligamento sujo, sem registro no diário habilitado, um reparo
é a única maneira de retornar os arquivos de dados a um estado consistente, e
mesmo assim você pode perder dados. Se implantar com replicação, execute
pelo menos um servidor com journaling habilitado e realize backups regulares
fora do local; lembre-se de que você nunca deve ter que recuperar executando
um reparo, a�nal, depender de reparos para recuperação é tolice, então, evite-
os.
Para que, então, um reparo de banco de dados pode ser bom? Executar um
reparo compactará os arquivos de dados e reconstruirá os índices. Desde o
lançamento v2.0, o MongoDB não tem um suporte ótimo para compactação de
arquivos de dados. Se �zer muitas exclusões aleatórias, especialmente se
estiver excluindo pequenos documentos (menos de 4 KB), é possível que o
tamanho total do armazenamento permaneça constante ou aumente, apesar
dessas exclusões que ocorrem regularmente.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 44/61
Compactar os arquivos de dados é um bom remédio para esse uso excessivo
de espaço. Se você não tem tempo ou recursos para executar um reparo
completo, há duas opções, ambas operando em uma única coleção:
a. Reconstruir índices.
b. Compactar a coleção.
Para reconstruir índices, use o método reIndex():
use cloud-docs
db.spreadsheets.reIndex() 
Isso pode ser útil, mas, de modo geral, o espaço de índice é reutilizado com
e�ciência. Os dados de espaço de arquivo é o que pode ser um problema,
portanto, o comando compact costuma ser uma escolha melhor, pois ele
reescreverá os arquivos de dados e reconstruirá todos os índices para uma
coleção. Aqui está como executá-lo a partir do shell:
db.runCommand ({compact: "spreadsheets"}) 
Esse comando foi projetado para ser executado em um secundário ativo,
eliminando a necessidade para o tempo de inatividade. Depois de terminar de
compactar todos os secundários em um conjunto de réplicas, você pode descer
do nó primário e compactar esse nó. Você pode executar o comando compact
no primário adicionando {force: true} ao comando objeto. Observe que, se
seguir este caminho, o comando gravará o bloqueio do sistema:
db.runCommand ({compact: "spreadsheets", force: true}) 
Em bancos de dados WiredTiger, o comando compact() libera em disco o espaço
desnecessário para o sistema operacional. Observe também que o campo
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 45/61
paddingFactor, que é aplicável para o mecanismo de armazenamento MMAPv1,
não tem efeito quando usado com o armazenamento WiredTiger motor.
Atualizando
Como acontece com qualquer projeto de software, você deve manter a
implantação do MongoDB até a data possível, porque as versões mais recentes
contêm muitas correções de bugs importantes e melhorias (BANKER et al.,
2016). Um dos princípios básicos de design por trás do MongoDB é sempre
garantir que uma atualização seja possível sem tempo de inatividade. Para um
conjunto de réplicas, isso signi�ca uma atualização contínua, e, para um cluster
fragmentado, signi�ca que os roteadores mongos ainda podem funcionar
contra clusters mistos. Você pode seguir um destes dois caminhos ao lidar
com atualizações:
a. Primeiro, você pode escolher fazer o processo manualmente. Neste
caso, veri�que as notas de lançamento que descrevem o processo de
atualização e leia-as com atenção. Às vezes, há advertências ou etapas
importantes que devem ser seguidas, para garantir que a atualização
seja segura. A vantagem é que você tem controle total ao longo do
processo e sabe exatamente o que está acontecendo.
b. A segunda opção é usar novamente o MongoDB Management Service.
A automação não só pode ser usada para provisionar seus nós, mas
também pode ser usada para atualizá-los. Certi�que-se de ler as
notas de lançamento para a versão que você está atualizando, bem
como a documentação MMS, para ter certeza de que sabe o que está
acontecendo.
Sempre que possível, é interessante saber o que está acontecendo nos
bastidores de eventos como atualizações. Tais eventos podem ser
acompanhados de forma a permitir um entendimento mais adequado de como
o MongoDB os processa. Além disso, permite ao administrador conhecer bem
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 46/61
seus dados e, consequentemente, melhorar suas habilidades de resolução de
problemas.
Resolução de problemas de desempenho
O desempenho no MongoDB é um problema complicado que afeta quase
todos os outros componentes (BANKER et al., 2016). É quase impossível saber
exatamente como seu aplicativo funcionará antes de testá-lo com sua carga de
trabalho e ambiente especí�cos. Um nó na Joyent Cloud terá características de
desempenho completamente diferentes de um nó no EC2, que, por sua vez, terá
características de desempenho completamente diferentes de um nó que você
tenha instalado em seu próprio data center privado. Nesta seção, abordaremos
alguns problemas comuns que surgem no suporte do MongoDB, pelo menos
até a versão 3.0, aos quais é preciso estar atento. Primeiro, vamos reintroduzir
o conceito de conjunto de trabalho; em seguida, cobrimos duas maneiras pelas
quais o conjunto de trabalho pode afetar seu sistema: a queda de desempenho
e as interações de consulta. No �nal, cabe a você monitorar seu sistema de
perto e entender como ele se comporta. Um bom monitoramento pode ser a
diferença entre resolver rapidamente, ou mesmo prever e prevenir problemas
de desempenho, e ter usuários irritados dizendo que seus sistemas �caram
vagarosos.
Conjunto de trabalho
Abordamos a ideia do conjunto de trabalho em várias partes deste estudo, mas
vamos de�ni-lo aqui novamente, com foco em sua implantação de produção.
Imagine que você tem uma máquina com 8 GB de RAM, executando um banco
de dados com um disco de 16 GB, sem incluir índices (BANKER et al., 2016). Seu
conjunto de trabalho é a quantidade de dados que você está acessando em um
intervalo de tempo especi�cado. Neste exemplo, se suas consultas são todas
varreduras completas de uma coleção, seu “conjunto de trabalho” será de 16
GB, porque, para responder às perguntas, todo o seu o banco de dados deve
ser paginado na memória. Mas, se suas consultas forem indexadas
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I…47/61
corretamente e você só estiver consultando a maioria dos dados do trimestre
recente, a maior parte do seu banco de dados pode permanecer no disco, e
serão necessários apenas 2 GB, além de algum espaço extra para índices, na
memória (CONNOLLY;  BEGG, 2019). A Figura 4.6 mostra visualmente o que isso
signi�ca para o uso do disco.
#PraCegoVer: a imagem apresenta um exemplo de como o banco de dados
MongoDB utiliza a memória. Existem dois cenários: o primeiro, no qual a
quantidade de dados no disco é equivalente à quantidade de memória disponível.
Desta forma, não existe gargalo. Neste cenário, os dois retângulos que apresentam
quantidade de dados e de memória estão equilibrados. No segundo cenário,
existem mais dados no disco do que espaço disponível na memória, gerando,
portanto, um gargalo. Neste cenário, os dois retângulos que apresentam
quantidade de dados e de memória estão desequilibrados.
Na linha inferior da �gura, quando você está fazendo varreduras completas da
tabela, você tem muitos passos para trabalhar ou mover blocos de dados para
Figura 4.6 - Exemplo do consumo de memória realizada pelo banco de dados
MongoDB 
Fonte: Banker (2016, p. 406).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 48/61
dentro e para fora da RAM, porque não pode manter todos os 16 GB em seus 8
GB de RAM de uma vez. No exemplo acima, você pode trazer os 2 GB de que
precisa para a memória e, em seguida, mantê-los lá, respondendo a todas as
perguntas com apenas um acesso mínimo ao disco. Isso não só ilustra que
manter seu conjunto de trabalho na RAM é extremamente importante, mas
também mostra como uma mudança simples, como adicionar o índice certo,
pode mudar completamente o seu desempenho.
Precipício de desempenho
Intimamente relacionado ao conceito de conjunto de trabalho, está um artefato
que atrapalha a forma como o MongoDB executa consultas (BANKER et al.,
2016). A partir da versão 3.0, o MongoDB não limita os recursos em uma única
operação nem deixa os clientes desassistidos quando está começando a �car
sobrecarregado. Contanto que não esteja se aproximando dos limites do
MongoDB, não haverá problemas, mas, conforme atinge o limite, pode ver uma
espécie de precipício de desempenho. Para compreender melhor, imagine que
você tem um sistema com 8 GB de RAM, executando um banco de dados de 64
GB em disco. Na maioria das vezes, seu conjunto de trabalho é de apenas 6 GB
e seu aplicativo funciona perfeitamente bem. Agora, avance para a véspera de
Natal, quando há um pico de tráfego grande o su�ciente para chegar a 8 GB.
Então, o MongoDB começará a �car lento, porque o conjunto de trabalho não
cabe mais na memória e começará a debulhar no disco (BANKER et al., 2016).
Apesar disso, o MongoDB continuará aceitando novas solicitações. A
combinação de desacelerar e ainda aceitar novas solicitações é desastrosa para
o desempenho, e você pode ver uma queda acentuada neste ponto. Se isso for
uma preocupação para você, recomendamos que saiba exatamente quanta
carga sua implantação do MongoDB pode suportar e, se possível, coloque
algum tipo de balanceador de carga na frente dele, para escapar desse
problema.
Interações de consulta
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 49/61
Outro efeito colateral de o MongoDB não impor limites de recursos é que uma
consulta com comportamento inadequado pode afetar o desempenho de todas
as outras consultas no sistema. É o mesmo exercício de antes. Suponha que
você tenha um conjunto de trabalho de 2 GB, com 64 GB de dados. Tudo pode
estar indo bem, até que alguém execute uma consulta com uma varredura
completa. Esta consulta não só vai impor uma grande carga sobre o disco, mas
também poderá exibir os dados que estavam sendo usados para outras
consultas no sistema, causando desaceleração nelas também. A Figura 4.5
ilustra esse problema: a parte superior representa o carregamento normal da
consulta e a parte inferior representa a carga após a consulta ruim.
reflitaRe�ita
A maior parte dos bancos de dados é
utilizada para leitura, não para escrita.
Neste caso, a leitura dos dados,
realizada por meio de consultas, é de
grande importância no projeto de
banco de dados. Neste caso, imagine-
se como projetista de banco de dados
e pense em como você poderia
melhorar as consultas do seu banco.
Fonte: Banker et al. (2016).
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 50/61
Este é outro motivo pelo qual os controles de acesso são importantes. Mesmo
se todo o resto estiver certo, uma veri�cação mal estruturada, feita por um
estagiário, pode dani�car seu sistema. Certi�que-se de que todos que
consultem seu banco de dados entendam as consequências de uma consulta
ruim.
Lista de veri�icação de implantação
Cobrimos muitos tópicos neste estudo. Pode parecer demasiadamente
complexo no início, mas, contanto que tenha as principais áreas cobertas, seu
sistema continuará funcionando perfeitamente (DOURADO, 2013). Esta seção é
uma referência rápida para garantir que você compreendeu os pontos
importantes:
A. Hardware
a. RAM – o su�ciente para lidar com o conjunto de trabalho esperado. 
b. Espaço em disco – espaço su�ciente para lidar com todos os seus
dados, índices e metadados internos do MongoDB. 
c. Velocidade de disco – o su�ciente para satisfazer seus requisitos de
latência e taxa de transferência. Considerá-la em conjunto com a RAM
(menos RAM geralmente signi�ca mais uso de disco) e CPU
(normalmente não é gargalo do MongoDB, mas, se pouco disco é
utilizado, mas o rendimento é baixo, pode ter uma carga de trabalho
vinculada à CPU). Faça uma veri�cação, com um teste de desempenho
cuidadoso. 
d. Rede – certi�que-se de que a rede seja rápida e con�ável o su�ciente
para satisfazer seus requisitos de desempenho. Nós do MongoDB
comunicam-se uns com os outros internamente.   Lembre-se ainda de
testar todas as conexões, não apenas as de seus clientes para os
mongos ou servidores mongod.
B. Segurança
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 51/61
a. Proteção do tráfego de rede – execute em um ambiente
completamente isolado ou certi�que-se de que seu tráfego seja
criptografado, usando o suporte SSL integrado do MongoDB ou algum
método externo, como VPN, para evitar ataques man-in-the-middle. 
b. Controle de acesso – certi�que-se de que apenas usuários con�áveis
e programas clientes possam operar no banco de dados. Certi�que-se
de que seus estagiários não tenham o privilégio de root.
C. Monitoramento
a. Uso de hardware (discos, CPU, rede, RAM) – certi�que-se de ter algum
tipo de monitoramento da con�guração de todos os recursos de
hardware, não apenas para acompanhar o uso, mas também para que
o alertem se atingir um certo limite (BANKER et al., 2016). 
b. Veri�cações de saúde – certi�que-se periodicamente de que seus
servidores estão funcionando e respondendo, e que irão alertá-lo se
alguém parar de ligar de volta (teste de conexão via ping). 
c. Monitoramento de MMS – monitore seus serviços usando o
monitoramento de MMS. Isso fornece não apenas monitoramento,
veri�cações de saúde e alertas, mas é o que a equipe de suporte do
MongoDB usará para ajudá-lo se você tiver problemas. Seu uso é
gratuito, então não deixe de adicioná-lo à sua implantação. 
d. Monitoramento de desempenho do cliente – execute testes
automatizados de ponta a ponta periodicamente como cliente, para
veri�car se têm um desempenho tão bom quanto o esperado. A última
coisa que você quer é que um cliente o avise que seu aplicativo é lento.
D. Recuperação de desastres
a. Avalie o risco – imagine que você perdeu todos os seus dados. 
Como você se sente em relação a isso? Perderdados pode ser pior em
alguns aplicativos do que em outros. Se está analisando as tendências
do Twitter, perder seus dados pode custar uma semana de trabalho,
mas, se estiver armazenando dados bancários, perdê-los pode custar
um pouco mais. Ao fazer esta avaliação, suponha que um desastre
poderá acontecer e planeje-se de acordo. 
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 52/61
b. Tenha um plano – crie um plano para recuperação em caso de
falha. Você pode reagir de maneiras completamente diferentes,
dependendo de como o sistema falha. 
c. Teste seu plano – certi�que-se de testar seu plano. O maior erro que
as pessoas cometem com backups e recuperação de desastres é
pressupor que ter um backup ou um plano é o su�ciente. Não é. Talvez
o backup esteja corrompido. Talvez esteja em um formato impossível
de importar para seus sistemas de produção. Como em um sistema de
produção, muitas coisas podem dar errado, então é importante
garantir que sua estratégia de recuperação funcione. 
d. Tenha um plano de backup – seu primeiro plano de recuperação de
desastres pode falhar. Então, é preciso ter outro recurso disponível. Esta
hipótese não é muito animadora, mas você �cará feliz caso algo
extremo ocorra.
E. Desempenho
a. Teste de carga – certi�que-se de testar a carga de seu aplicativo com
uma carga de trabalho realista. No �nal, esta é a única maneira de ter
certeza de que seu desempenho é o que você espera.
praticarVamos Praticar
Existem diversos itens que devem ser con�gurados para garantir um bom
desempenho e uma maior probabilidade de continuidade do serviço. Quando se trata
de banco de dados, um item importante é a qualidade do disco utilizado.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 53/61
Neste caso, descreva como o disco pode interferir no desempenho e na continuidade
do serviço baseado em bancos de dados NoSQL, como o MongoDB. Você deve fazer
isso em termos conceituais, escrevendo como tal item deve ser observado.
Feedback: A velocidade de disco deve ser su�ciente para satisfazer
seus requisitos de latência e taxa de transferência. Isso deve ser
considerado em conjunto com a RAM (menos RAM geralmente signi�ca
mais uso de disco) e o CPU (normalmente não é gargalo do MongoDB,
mas, se pouco disco é utilizado, mas o rendimento é baixo, pode ter
uma carga de trabalho vinculada à CPU). Isso deve ser veri�cado com
um teste de desempenho cuidadoso.
Os eventos de desastres são o ponto central das estratégias e técnicas de
recuperação de tais cenários. Alguns exemplos são incêndio, inundações,
sequestro de dados, ataque de �ooding (que acaba com o desempenho),
roubo de dados, entre outros.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 54/61
#PraCegoVer: o infográ�co apresenta o texto “Os eventos de desastres são o ponto
central das estratégias e técnicas de recuperação. Alguns exemplos são incêndios,
inundações, sequestro de dados, ataque de �ooding (que acaba com o
desempenho), roubo de dados, entre outros”. Logo abaixo, seguem cinco tópicos
verticais. Ao clicar no primeiro tópico, com o título “Desastres”, é apresentado o
texto: “são eventos que podem levar a falhas no seu banco de dados, ser
irrecuperáveis e afetar a continuidade do negócio”. Ao clicar no segundo tópico,
com o título “Disponibilidade”, é apresentado o texto: “envolve estratégias para
evitar desastres, do ponto de vista de desempenho”. Ao clicar no terceiro tópico,
com o título “Recuperação”, é apresentado o texto: “envolve estratégias para
recuperação de desastres que podem ser a diferença entre a continuidade e a
interrupção do negócio”. Ao clicar no quarto tópico, com título “Segurança”, é
apresentado o texto: “envolve técnicas para evitar acessos indevidos, que possam
levar a desastres”. Ao clicar no quinto tópico, com o título “Continuidade”, é
apresentado o texto: “envolve estratégias para manter o negócio, baseado em uso
massivo de dados, em cenários de desastres”.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 55/61
Material
Complementar
indicações
L IVRO
MongoDB Administrator’s Guide
Cyrus Dasadia
Editora: Packt Publishing
ISBN: 178712648X
Comentário: Este livro apresenta uma visão
aprofundada sobre a administração de banco de dados
MongoDB, diretamente relacionada à continuidade dos
negócios. Questões como backup, recuperação, tuning,
segurança, entre outros itens, estão presentes neste
livro.
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 56/61
F ILME
Privacidade Hackeada
Ano: 2019
Comentário: Este �lme toca em um dos pontos mais
importantes da administração de bancos de dados
atualmente, segurança, e mostra como falhas de
segurança em bancos de dados podem gerar crises sem
precedentes. Questões como a LGPD e a GDPR estão
obrigando muitas empresas a darem respostas aos
desa�os atuais.
TRAIL ER
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 57/61
Conclusão
Este estudo apresentou as considerações mais importantes para a implantação
do MongoDB em produção. Você deve ter o conhecimento de que precisa para
selecionar o hardware certo para o MongoDB, monitorar suas implantações e
manter backups regulares. Além disso, deve ter alguma ideia sobre como
resolver problemas de desempenho. No �nal das contas, esse conhecimento se
desenvolverá com a experiência. Mas o MongoDB é previsível o su�ciente para
ser receptivo à heurística simples apresentada aqui – exceto quando não é. O
MongoDB tenta tornar a vida mais simples, mas os bancos de dados e suas
interações com as aplicações são bastante complexas. As diretrizes neste
estudo podem orientá-lo na direção certa, mas, no �nal, depende de você ter
um papel ativo na compreensão de seu sistema. Certi�que-se de aproveitar ao
máximo os recursos disponíveis, da documentação do MongoDB até o suporte
o�cial e da comunidade de mantenedores e usuários.
conclusão
Referências
Bibliográ�cas
referências
12/03/2021 Ead.br
https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 58/61
AUTHENTICATION. MongoDB. [2008]. Disponível em:
https://docs.mongodb.org/manual/core/authentication. Acesso em: 16 dez.
2020.
BAHGA, A.; MADISETTI, V. Big data analytics: a hands-on approach. Califórnia:
VPT, 2016.
BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications,
2016.
CAMPELLO, B.; CALDEIRA, P. D. T. Introdução às fontes de informação. 3. ed.
Belo Horizonte: Autêntica, 2014. (Biblioteca Laureate).
CONNOLLY, T.; BEGG, C. Database systems: a practical approach to design,
implementation, and management. 6. ed. Nova Iorque: Person, 2019. (Biblioteca
Laureate).
CORONEL, C.; MORRIS, S. Database systems: design, implementation, and
management. 11. ed. Nova Iorque: Cengage Learning, 2015.
DOURADO, D. Big data. São Paulo: Brasport, 2013.
MONGODB Compass. MongoDB, [2020]. Disponível em:
https://www.mongodb.com/products/compass. Acesso em: 16 dez. 2020.
PRIVACIDADE Hackeada | Trailer o�cial | Net�ix. [S. l.: s. n.], 2019. 1 vídeo (2 min
17 s). Publicado pelo canal Net�ix Brasil. Disponível em:
https://www.youtube.com/watch?v=wjXYCrxRWqc. Acesso em: 17 dez. 2020.
UPGRADE a cluster to use TLS/SSL. MongoDB, [2008]. Disponível em:
https://docs.mongodb.com/manual/tutorial/upgrade-cluster-to-ssl/. Acesso em:
16 dez. 2020.
SECURITY. MongoDB, [2008]. Disponível em:
https://docs.mongodb.com/manual/security/. Acesso em: 16 dez. 2020.
https://docs.mongodb.org/manual/core/authentication

Outros materiais