Mongoengine

25
Tutorial: Um ODM sensacional para a modelagem de dados

Transcript of Mongoengine

Tutorial: Um ODM sensacional para a modelagem de dados

Wilson JúniorDesenvolvedor de Software

na globo.com Desenvolvedor Python

desde 2008 Um dos commiters do

MongoEngine

globo.com

MongoDBNoSQL ?

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 nomeWilson1Isabella2

table: pessoas

pid telefone6299889911

1

table: pessoas_telefone

623381700

tipoct

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 camposNome Características Exemplo

StringField Armazena caracteres, textos, de livre marcação “Hello world"

URLField Armazena URLs "http://bit.ly/ItgYlU"

EmailField Armazena emails “[email protected]

IntField Armazena números inteiros em 32 bits 100

Tipos de camposNome 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 camposNome Características Exemplo

DateTimeField

Armazena datas com precisão de tempo

'2010/10/01 18:30'

ComplexDateTimeField

Armazena datas com precisão de milisegundos

YYYY,MM,DD,HH,MM,SS,N

NNNNN '

EmbeddedDocumentField

Armazena um EmbeddedDocument de um tipo

especifico MyEmbeddedDocument

Tipos de camposNome Características Exemplo

SortedListField

Armazena uma listagem de forma ordenada [1, 6]

DictField Armazena um dicionário de dados

{‘oi’: ‘tudo bem ?’}

ReferenceField

Armazena a referencia de um documento (relacionamentos) MyOtherDocu

ment

Tipos de camposNome Características Exemplo

GenericEmbeddedDocumentFiel

dArmazena um

EmbeddedDocument Genérico …

DynamicField Armazena qualquer tipo de dado ..

ListFieldArmazena uma listagem baseada

em um tipo de Field [10, 12]

Tipos de camposNome Características Exemplo

FileField Armazena um arquivo comum …

ImageField Armazena uma Imagem ..

SequenceFieldCampo 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ódigoclass 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.junior3Github: github.com/wpjunior