Introdução ao MongoDB: conceitos e práticas

Post on 22-Jan-2018

83 views 3 download

Transcript of 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

contato@eccjr.com.br

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!!!