MongoDB - Extras
Nesse
extra, iremos aprender as seguintes funções:
find().length()
count()
distinct()
limit().skip()
find(query).length()
X count(query)
Essas
duas funções fazem a mesma coisa, retornam a quantidade de
documentos encontrado na busca. Mas como sempre a uma diferença, o
count()
é mais rápido que se usar o find().length(),
já que esse último traz todos os documentos para a memorias e faz
uma interação dos dados, fazendo uma contagem dos documentos, o que
gasta mais tempo.
db.collection.find(query).length()
db.collection.count(query)
distinct('campo')
Essa
função serve para retornar os valores distintos do campo. Por
exemplo, usando a nossa database Pokedex, nossa collection possui
vários pokémons de vários tipos (water, fire, electric, …),
muitos desses tipos se repetem. Se utilizarmos o distinct
nesse campo, ele irá retornar cada tipo de existente na nossa
collection, sem repeti-los. Faça o teste.
db.pokemons.distinct('types')
Se
quiser saber quantos tipos distintos existem, basta fazer…
db.pokemons.distinct('types').length
Também
podemos ver os tipos de pokémons em ordem alfabética (A-Z)
db.pokemons.distinct('types').sort()
E
se quiser na ordem inversa (Z-A)
db.pokemons.distinct('types').sort().reverse()
Fácil,
extremamente fácil…
E
agora as relações…
Relacionamento
O
relacionamento no Mongo é diferente de bancos de dados relacionais.
No Mongo não existe o JOIN usado para juntar duas tabelas que
possuam alguns campos específicos iguais, que são usados em bancos
relacionais.
No
Mongo existem duas formas de fazer esse relacionamento, a forma
Manual e a DBRef. A manual
nada mais é, do que do que salvar o _id
de uma coleção em outra coleção que estamos relacionando, a
segunda forma, a DBRef
nada mais é do que uma convenção para
representar um documento relacional, isso inclue: $ref
(nome da coleção a ser referenciada), $id
(o ObjectId do documento referenciado) e $db
(a database onde a coleção referenciada se encontra).
Explain
O
explain mostra para a gente o que o banco está fazendo, mostrando
como ele executa as query internamente. Todos os comando que fazemos
são passados para o interpretador
e convertido para uma forma que o Mongo entenda e possa executar.
Crie uma query
e execute o seguinte comando:
db.pokemons.find(query).explain()
Como
resultado, você verá que ele retornar uma série de informações,
como
por exemplo, o namespace
que contem o nome da database
e da collection,
o parsedQuery
que mostra como a query foi interpretada pelo Mongo, o serverInfo
que mostra informações do servidor como o nome do host, porta e
versão do Mongo.
Você
pode obter mais informações, se fizer da seguinte forma:
db.pokemons.find(query).explain(“executionStats”)
Isso
trará informações extras, como a quantidade de arquivos retornados
com o find
executado, total de arquivos examinados, o tempo que levado para
fazer a pesquisa, entre outras coisas.
Index
Índice
é uma forma de deixar uma busca mais rápida. Ao criamos um index
em uma collection, o Mongo irá tratar esse campo de forma diferente,
fazendo pesquisas por esse campo de forma mais rápida. Você pode
ver o index
da sua collection com o seguinte comando:
db.collection.getIndexes()
E
pode criar index, com esse outro:
db.collection.createIndex({campo:
1})
E
se quiser remover algum index que você já criou:
db.collection.dropIndex({campo:
1})
GridFS
É
um sistema de arquivos do MongoDB que permite armazenar arquivos
binários (fotos, vídeos) diretamente no banco.
Arquivos de documento do tipo BSON é de 16 Mb, para armazenarmos
arquivos maiores utilizamos o GrindFS.
Por
exemplo, se fossemos adicionar um video de formato mp4, no sistema
GridFs,
bastaria executar:
mongofiles
-d nome_database -h ip_do_host
put video.mp4
Para
fazer isso localmente, podemos colocar como ip_do_host o ip local,
127.0.0.1.
Lembrando que o nome_database é a database que será criada para
armazenar os arquivos binários.
Lembrando
que esse comando é um binário e não pode ser feito no terminal do
Mongo. Deve ser feito no terminal normal.
Replica
A
replica é o espelhamento dos dados de
um servidor para outro. Um conjunto de replicas é chamado de
ReplicaSet,
onde cada ReplicaSet
pode conter 50 replicas.
A
replica funciona da seguinte forma: qualquer escrita feita na replica
primaria, a primaria irá replicar para as secundarias. Isso ocorre
em duas etapas: Initial
Sync
e a Replication.
Initial
Sync
Esse
é a primeira etapa na replicação. Onde ele consulta cada coleção
em cada banco de dados de origem e insere todos os dados em suas
próprias cópias dessa seleção, é dessa forma que é feita a
clonagem dos bancos de dados. Esse processo de clonagem apenas copia
os dados válidos, omitindo documentos inválidos.
Depois
ele aplica as alterações para o conjunto de dados, para que depois
possa ser feito a transação para o estado secundário.
Replication
Depois
de já ter nossas replicas construídas, a Replication
vai continuar replicando e sincronizando os dados. Ele sempre fica
rodando para que cada alteração no primário seja replicado,
mantendo os membros das Replicas (ReplicaSet),
atualizados.
Oplog
É
o log de operações, qualquer alteração feito na replica primária
é colocada a ação no oplog
que é uma capped
collection
(coleções de tamanho fixo) especial. O MongoDB aplica as alterações
no primário e, em seguida, registra as operações no oplog do
primário. Onde os membros secundários, copiam e aplicam essas
operações do oplog em um processo assíncrono.
As
replicas servem para garantir que tenhamos a nossa base de dados em
outros servidores, para caso aconteça algum imprevisto no nosso
servidor principal. Por isso sempre tenha uma replica como garantia,
pois nenhum servidor é 100%.
Como
fazer replicas?
Veja
no nosso próximo post ;)

0 comentários:
Postar um comentário