Download - Introdução ao MongoDB: conceitos e práticas
Introdução ao MongoDBconceitos e práticas
26ª Semana da Computação - UNESP/IBILCEEmpresa Júnior de Ciência da Computação - ECCjrBruno Barreto Carvalho
Sobre mimEstudante da UNESP desde 2014
Na Empresa Júnior desde 2015
Estudando Javascript desde agosto de 2015
Atualmente estudando assuntos relacionados a Big Data
Linguagens favoritas: Javascript e Scala
@carvalh0ak
Bruno Barreto Carvalho
box3x4
Empresa Júnior- Desenvolve projetos e presta serviços nas áreas de
desenvolvimento de softwares, soluções para web e consultoria computacional, principalmente para micro e pequenas empresas. Sempre aberta a trabalhar com novas tecnologias.
- Infelizmente ainda nao fizemos um projeto usando o MongoDB, mas eu tenho esperanças ainda!
Contatos
eccjr.com.br
facebook.com/eccjrunesp
O modelo relacional.
Breve história- Edgar Frank Codd publica o primeiro artigo sobre bancos relacionais em 1970. Sua publicação
leva a criação do grupo System R.
- Depois, é criado a SQL(Structured Query Language) pelo System R, que é usada até hoje e virou um padrão da indústria de tecnologia.
- Mais tarde, são criados os primeiros SGBDRs, que atacavam vários problemas que existiam nos sistemas que foram criados anteriormente.
Mas qual o problema?
- Relação muito forte entre os dados- Alguns problemas de escalabilidade- Performance (?)
Com a explosão das redes sociais e computação em nuvem, viu-se que talvez o modelo relacional nem sempre era a MELHOR ESCOLHA PARA TODOS OS CASOS.
A alternativa.
So it begins...
Pensando nesses problemas, o modelo não-relacional voltou a ativa!
Os “novos bancos” apresentam características bem distintas(praticamente opostas) dos bancos relacionais.
E sua principal característica: a falta(ou ausência) de relações, derp.
Filhos da “nova era”Vários bancos de dados NoSQL surgiram. E junto com eles, várias maneiras de armazenar os dados.
Alguns exemplos:
- Documentos- Grafos- Chave-Valor- Tabular
Breve comparação.
SchemaNão Relacional Relacional
EscalabilidadeNão Relacional
Escalabilidade Horizontal
Relacional
Escalabilidade Vertical
NormalizaçãoNão Relacional Relacional
AtomicidadeNão Relacional Relacional
Casos de uso
Nosso objeto de estudo.
Mas antes...- Javascript, Node.js
- JSON
Um pouco sobre ele- HuMONGOus, 2007- Bom banco para Operational Big Data- Orientado a documentos- Usa BSON para armazenar os documentos- Mongo Server: GNU AGPL 3.0- Mongo Drivers: Apache 2.0
Um típico documento
Um típico documento no mongoDB
Variedade de tipos
Algumas empresinhas...
High Tech Outras
O _id_id é o equivalente a uma chave primária do SQL.
É a ÚNICA chave primária usada no banco
ObjectId -> 4 bytes representando os segundos desde a era Unix
Identificador de máquina de 3 bytes
2 bytes do ID do processo
Contador de 3 bytes, começando de um valor aleatório
CRUD
Que isso?- CRUD representa as operações básicas dos bancos de dados: Create,
Read, Update, Delete
- O Mongo possui todas essas operações, e também tem a possibilidade de misturar elas
Create
insertOneRecebe: arg1: UM documento, que será inserido na coleção
arg2: um documento com o atributo writeConcern (opcional)
Retorna: um documento com os atributos:
acknowledged: boolean, insertedId: ObjectId do documento inserido
insertManyRecebe: arg1: um ARRAY de DOCUMENTOS, que serão inseridos na coleção
arg2: um documento com os atributos: writeConcern, ordered (opcional)
Retorna: um documento com os atributos:
acknowledged: boolean, insertedIds: ObjectIds dos documentos inseridos
insertRecebe: arg1: Um documento ou um array de documentos
arg2: um documento com os atributos: writeConcern, ordered (opcional)
Retorna: um documento com o atributo:
nInserted: número de documentos inseridos
ou um documento com os atributos:
writeErrors, writeConcernErros, nInserted, nUpserted, nMatched, nModified, nRemoved, upserted
Read
findRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com a projeção do resultado
Retorna: se tiver matches, retorna os documentos
senão, não retorna nada
existem também os finds híbridos: findAndModify, findOne, findOneAndDelete, findOneAndReplace, findOneAndUpdate
Métodos adicionais importantes
sort: equivalente ao ORDER BY do sql, valor 1 é ASC e -1 é DESC
limit: limita o tamanho máximo do cursor que será retornado
batchSize: limita o número de documentos retornados, default = 20
skip: controla a partir de onde o banco irá começar a retornar os resultados
count: conta o número de documentos na coleção
Update
updateOneRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de modificados
updateManyRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de modificados, upsertedId: ObjectId do documento inserido(caso upsert esteja ativado)
updateRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, multi: boolean, writeConcern
Retorna: um objeto com os campos
nMatched: numero de documentos que deram match, nUpserted: numero de documentos que foram inseridos via upsert, nModified: numero de documentos modificados
tagsSão usadas com os métodos de update para alterar os documentos encontrados. Usados no arg2 dos métodos de update
$set: faz o update dos atributos especificados. Recebe um documento com os atributos a serem alterados
$inc: incrementa o valor de um atributo numérico. Recebe um documento com os atributos a serem incrementados
$rename: troca o nome de um atributo. Recebe um documento com os atributos a serem renomeados
$unset: remove atributos do documento. Recebe um documento com os atributos a serem excluidos
Delete
deleteOneRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, deletedCount: número de documentos removidos
deleteManyRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, deletedCount: número de documentos removidos
removeRecebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
justOne: boolean, writeConcern
Retorna: um objeto com os campos
nRemoved: número de documentos removidos
O próximo passo
Muito obrigado!!!