SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Tutorial: Um ODM sensacional para a modelagem de
dados
Wilson Júnior
Desenvolvedor de Software
na globo.com
Desenvolvedor Python
desde 2008
Um dos commiters do
MongoEngine
globo.com
MongoDB
NoSQL ?
Nome ?
humongous
ACID vs BASE ?
Vantagens de usar um
MongoDB com ODM
• Estrutura de dados simples leitura e escrita.
• Diminuir a complexidade do modelo de informações.
• Orientação a objetos de forma natural à linguagem.
• Free schema, evolução natural dos dados sem (alter tables),
data migrations apenas quando necessário.
• Um Banco de Dados NoSQL não substitui o modelo SQL,
possui suas vantagens e desvantagens, na qual cada um
merece sua aplicação.
• Mineração dos dados com Map/Reduce
Desvantagens de usar
MongoDB com um ODM
• Suporte a transações;
• Não suporta a operação de joins.
Orientação a Documentos ?
id nome
Wilson1
Isabella2
table: pessoas
pid telefone
6299889911
1
table: pessoas_telefone
623381700
tipo
c
t
2 629145991 t
N1
Podemos melhorar como nossos dados são
modelados ?
Organizar os dados por
documentos ?
{

“nome”: “Wilson”,
“telefones”: [
{“num”: 6289124, “tipo”: “t”},
{“num”: 1234151, “tipo”: "c"}
]
}
{

“nome”: “Isabella”,
“telefones”: [
{“num”: 1234151, “tipo”: "c"}
]
}
Coleção:

de Pessoas
Documento
…
Tipos de Documentos
Document
EmbeddedDocument
é anexado a um document
Tipos de campos
Nome Características Exemplo
StringField
Armazena caracteres, textos, de
livre marcação
“Hello world"
URLField Armazena URLs
"http://bit.ly/
ItgYlU"
EmailField Armazena emails
“nospam@go
ogle.com.br
IntField
Armazena números inteiros em
32 bits
100
Tipos de campos
Nome Características Exemplo
LongField
Armazena Inteiros Longos 64
bits
1000000000L
FloatField
Armazena números com ponto
futuante
2.12
DecimalField Armazena números Decimais 2.10'
BooleanField Armazena um valor booleano True ou False
Tipos de campos
Nome Características Exemplo
DateTimeFiel
d
Armazena datas com precisão
de tempo
'2010/10/01
18:30'
ComplexDate
TimeField
Armazena datas com precisão
de milisegundos
YYYY,MM,DD,
HH,MM,SS,N
NNNNN
'
EmbeddedDo
cumentField
Armazena um
EmbeddedDocument de um tipo
especifico
MyEmbedde
dDocument
Tipos de campos
Nome Características Exemplo
SortedListFiel
d
Armazena uma listagem de
forma ordenada
[1, 6]
DictField
Armazena um dicionário de
dados
{‘oi’: ‘tudo
bem ?’}
ReferenceFiel
d
Armazena a referencia de um
documento (relacionamentos)
MyOtherDocu
ment
Tipos de campos
Nome Características Exemplo
GenericEmbedd
edDocumentFiel
d
Armazena um
EmbeddedDocument Genérico
…
DynamicField Armazena qualquer tipo de dado
..
ListField
Armazena uma listagem baseada
em um tipo de Field [10, 12]
Tipos de campos
Nome Características Exemplo
FileField Armazena um arquivo comum …
ImageField Armazena uma Imagem
..
SequenceField
Campo gerador de números
sequenciais 1
Herança de documentos
Pessoa
Estudante
UniversitarioEstudanteColegio
Dúvidas ?
Vamos praticar ?
Instalação
$ mkdir meu_projeto

$ cd meu_projeto

$ mkvirtualenv me
$ pip install ipdb

$ pip install mongoengine
Código
class Pessoa(Document):
…
class Estudante(Pessoa):
…
class Universitario(Estudante):
…
Queries simples!
pessoas = Pessoa.objects(

name__icontains="Wilson")
Índices
MongoEngine Team
@rozza@hmarr @wpjunior
@yograterol @lig @thedrow
Facebook: fb.com/wilson.junior3
Github: github.com/wpjunior

Mais conteúdo relacionado

Semelhante a Mongoengine

Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
Renzo Petri
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
elliando dias
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
Gilson Figueredo
 

Semelhante a Mongoengine (20)

Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
 
Access
AccessAccess
Access
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
 
Do mapa mental para Serviços de Dados até APIs
Do mapa mental para Serviços de Dados até APIsDo mapa mental para Serviços de Dados até APIs
Do mapa mental para Serviços de Dados até APIs
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
Java e XML
Java e XMLJava e XML
Java e XML
 
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQLTDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
 
Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
Xml Ws
Xml WsXml Ws
Xml Ws
 
5 bdoo+bdor
5 bdoo+bdor5 bdoo+bdor
5 bdoo+bdor
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
 

Mais de Wilson Júnior (7)

SRE passo a passo
SRE passo a passoSRE passo a passo
SRE passo a passo
 
Configurações de aplicações distribuidas com etcd
Configurações de aplicações distribuidas com etcdConfigurações de aplicações distribuidas com etcd
Configurações de aplicações distribuidas com etcd
 
Pensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações ResilientesPensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações Resilientes
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Arquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GOArquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GO
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 

Mongoengine