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...
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 d...
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
62338...
Organizar os dados por
documentos ?
{

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

“nome”: “Isabella”...
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"
URLF...
Tipos de campos
Nome Características Exemplo
LongField
Armazena Inteiros Longos 64
bits
1000000000L
FloatField
Armazena nú...
Tipos de campos
Nome Características Exemplo
DateTimeFiel
d
Armazena datas com precisão
de tempo
'2010/10/01
18:30'
Comple...
Tipos de campos
Nome Características Exemplo
SortedListFiel
d
Armazena uma listagem de
forma ordenada
[1, 6]
DictField
Arm...
Tipos de campos
Nome Características Exemplo
GenericEmbedd
edDocumentFiel
d
Armazena um
EmbeddedDocument Genérico
…
Dynami...
Tipos de campos
Nome Características Exemplo
FileField Armazena um arquivo comum …
ImageField Armazena uma Imagem
..
Seque...
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
Mongoengine
Próximos SlideShares
Carregando em…5
×

Mongoengine

184 visualizações

Publicada em

Um ODM sensacional para a modelagem de dados

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
184
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Mongoengine

  1. 1. Tutorial: Um ODM sensacional para a modelagem de dados
  2. 2. Wilson Júnior Desenvolvedor de Software na globo.com Desenvolvedor Python desde 2008 Um dos commiters do MongoEngine globo.com
  3. 3. MongoDB NoSQL ? Nome ? humongous ACID vs BASE ?
  4. 4. 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
  5. 5. Desvantagens de usar MongoDB com um ODM • Suporte a transações; • Não suporta a operação de joins.
  6. 6. 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 ?
  7. 7. Organizar os dados por documentos ?
  8. 8. {
 “nome”: “Wilson”, “telefones”: [ {“num”: 6289124, “tipo”: “t”}, {“num”: 1234151, “tipo”: "c"} ] } {
 “nome”: “Isabella”, “telefones”: [ {“num”: 1234151, “tipo”: "c"} ] } Coleção:
 de Pessoas Documento …
  9. 9. Tipos de Documentos Document EmbeddedDocument é anexado a um document
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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]
  15. 15. Tipos de campos Nome Características Exemplo FileField Armazena um arquivo comum … ImageField Armazena uma Imagem .. SequenceField Campo gerador de números sequenciais 1
  16. 16. Herança de documentos Pessoa Estudante UniversitarioEstudanteColegio
  17. 17. Dúvidas ?
  18. 18. Vamos praticar ?
  19. 19. Instalação $ mkdir meu_projeto
 $ cd meu_projeto
 $ mkvirtualenv me $ pip install ipdb
 $ pip install mongoengine
  20. 20. Código class Pessoa(Document): … class Estudante(Pessoa): … class Universitario(Estudante): …
  21. 21. Queries simples! pessoas = Pessoa.objects(
 name__icontains="Wilson")
  22. 22. Índices
  23. 23. MongoEngine Team @rozza@hmarr @wpjunior @yograterol @lig @thedrow
  24. 24. Facebook: fb.com/wilson.junior3 Github: github.com/wpjunior

×