77
Python e MongoDB Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: [email protected] Site: http://www.gonow.com.br

Python e MongoDB - Ensol

Embed Size (px)

Citation preview

Page 1: Python e MongoDB - Ensol

Python e MongoDBChristiano Anderson

Twitter: @dumpBlog: http://christiano.meEmail: [email protected]: http://www.gonow.com.br

Page 2: Python e MongoDB - Ensol

• Trabalha com software livre desde 1995;

• Gerente de Projetos da Gonow;

• Desenvolvedor do Projeto GNU (FSF);

• Trabalha com Python desde 2000;

• Membro da equipe de tradução do MongoDB;

• Evangelista NoSQL;

Page 3: Python e MongoDB - Ensol

O que é MongoDB?

Page 4: Python e MongoDB - Ensol

O que é MongoDB?Banco de dados não relacional

Page 5: Python e MongoDB - Ensol

O que é MongoDB?Banco de dados não relacional

Software Livre

Page 6: Python e MongoDB - Ensol

O que é MongoDB?Banco de dados não relacional

Software LivreAlta performance

Page 7: Python e MongoDB - Ensol

O que é MongoDB?Banco de dados não relacional

Software LivreAlta performance

Schema free

Page 8: Python e MongoDB - Ensol

O que é MongoDB?Banco de dados não relacional

Software LivreAlta performance

Schema free

Orientado a documentos

Page 9: Python e MongoDB - Ensol

“MongoDB preenche a lacuna entre modelagem chave/valor (o que são bem rápidas e escaláveis) e os

tradicionais banco de dados relacionais (que oferecem várias funcionalidades)”

Page 10: Python e MongoDB - Ensol

Quem utiliza MongoDB

E muitos outros...

Page 11: Python e MongoDB - Ensol

Bom para...

Page 12: Python e MongoDB - Ensol

Bom para...

Web 2.0

Page 13: Python e MongoDB - Ensol

Bom para...

Web 2.0Migrations

Page 14: Python e MongoDB - Ensol

Bom para...

Web 2.0Migrations

Flexibilidade

Page 15: Python e MongoDB - Ensol

Bom para...

Web 2.0Migrations

Flexibilidade

Caching

Page 16: Python e MongoDB - Ensol

Não muito bom se você precisa de...

Page 17: Python e MongoDB - Ensol

Não muito bom se você precisa de...

Transações

Page 18: Python e MongoDB - Ensol

Não muito bom se você precisa de...

Transações

Suporte completo a SQL

Page 19: Python e MongoDB - Ensol

Por que Python?

Page 20: Python e MongoDB - Ensol

Por que Python?

Afinidade com a linguagem...

Page 21: Python e MongoDB - Ensol

Por que Python?

Afinidade com a linguagem...

Facilidade em trabalhar com o modelo do MongoDB...

Page 22: Python e MongoDB - Ensol

Por que Python?

Afinidade com a linguagem...

Facilidade em trabalhar com o modelo do MongoDB...

Vários módulos e ORMs prontos...

Page 23: Python e MongoDB - Ensol

Modelo de documento

Page 24: Python e MongoDB - Ensol

Modelo de documento

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

Page 25: Python e MongoDB - Ensol

Modelo de documento

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

Sim, é um JSON. É muito fácil trabalhar com esse modelo de dados em

praticamente qualquer linguagem

Page 26: Python e MongoDB - Ensol

Migrations?

Page 27: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

Page 28: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

Page 29: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

Page 30: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10,‘local’: ‘Gonow’}

Page 31: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10,‘local’: ‘Gonow’}

Page 32: Python e MongoDB - Ensol

Migrations?Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}

{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10,‘local’: ‘Gonow’}

Você não precisa modificar o modelo de dados para adicionar novos elementos.

Basta inserir e salvar novamente!

Page 33: Python e MongoDB - Ensol

Agregadores...

db.programmers.insert({“linguagem”:”python”})db.programmers.insert({“linguagem”:”perl”})db.programmers.insert({“linguagem”:”ruby”})db.programmers.insert({“linguagem”:”python”})

Page 34: Python e MongoDB - Ensol

Agregadores...

db.programmers.insert({“linguagem”:”python”})db.programmers.insert({“linguagem”:”perl”})db.programmers.insert({“linguagem”:”ruby”})db.programmers.insert({“linguagem”:”python”})

Page 35: Python e MongoDB - Ensol

Agregadores...

db.programmers.insert({“linguagem”:”python”})db.programmers.insert({“linguagem”:”perl”})db.programmers.insert({“linguagem”:”ruby”})db.programmers.insert({“linguagem”:”python”})

Page 36: Python e MongoDB - Ensol

Agregadores...

db.programmers.insert({“linguagem”:”python”})db.programmers.insert({“linguagem”:”perl”})db.programmers.insert({“linguagem”:”ruby”})db.programmers.insert({“linguagem”:”python”})D

uplic

ados

Page 37: Python e MongoDB - Ensol

Agregadores...

db.programmers.insert({“linguagem”:”python”})db.programmers.insert({“linguagem”:”perl”})db.programmers.insert({“linguagem”:”ruby”})db.programmers.insert({“linguagem”:”python”})D

uplic

ados

db.programmers.distinct(“language”)

Page 38: Python e MongoDB - Ensol

Map/Reduce

É utilizado para criar funções especiais, pode sercomparado a uma stored procedure

Page 39: Python e MongoDB - Ensol

Map/Reduce

É utilizado para criar funções especiais, pode sercomparado a uma stored procedure

Utiliza-se JavaScript para criar essas funções

Page 40: Python e MongoDB - Ensol

Map/Reduce

É utilizado para criar funções especiais, pode sercomparado a uma stored procedure

Utiliza-se JavaScript para criar essas funções

Bastante flexível

Page 41: Python e MongoDB - Ensol

Exemplo de Map/Reduce para contar tags repetidas

function() { this.tags.forEach(function(z)) { emit(z, 1);});}

function(key, value) { var total = 0; for(var i = 0; i < values.length; i++) { total += values[i]; } return total;}

Page 42: Python e MongoDB - Ensol

SQL MongoDB

INSERT INTO USERS VALUES(1,1) db.users.insert({a:1, b:1})

SELECT a,b FROM users db.users.find({}, {a: 1, b: 1})

SELECT * FROM users db.users.find()

SELECT * FROM users WHERE age=33 db.users.find({age: 33})

SELECT * FROm users WHERE name = “pedro” db.users.find({name:”pedro”})

Comparando SQL e MongoDB 1/2

Page 43: Python e MongoDB - Ensol

Comparando SQL e MongoDB 2/2

SQL MongoDB

SELECT * FROM users WHERE age=33 ORDER BY name

db.users.find({‘age’:33}).sort({name:1})

SELECT * FROM users WHERE age < 33

db.users.find({‘age’:{$lt:33}})})

CREATE INDEX myindexname ON user(name)

db.users.ensureIndex({name:1})

SELECT * FROM users WHERE a = 1 AND b = ‘q’ db.users.find({a:1, b:’q’})

SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20)

Page 44: Python e MongoDB - Ensol

Outros recursos bacanasSuporte a índices;

Page 45: Python e MongoDB - Ensol

Outros recursos bacanasSuporte a índices;

GridFS;

Page 46: Python e MongoDB - Ensol

Outros recursos bacanasSuporte a índices;

GridFS;

Replicação de dados;

Page 47: Python e MongoDB - Ensol

Outros recursos bacanasSuporte a índices;

GridFS;

Replicação de dados;

Alta disponibilidade;

Page 48: Python e MongoDB - Ensol

Outros recursos bacanasSuporte a índices;

GridFS;

Replicação de dados;

Alta disponibilidade;

É software livre, mas também oferece suporte comercial!

Page 49: Python e MongoDB - Ensol

Como trabalhar com MongoDB e Python

Page 50: Python e MongoDB - Ensol

Como trabalhar com MongoDB e Python

PyMongo é o módulo para Python e MongoDB;

Page 51: Python e MongoDB - Ensol

Como trabalhar com MongoDB e Python

PyMongo é o módulo para Python e MongoDB;

$ easy_install pymongo

Page 52: Python e MongoDB - Ensol

Exemplo de uso

Page 53: Python e MongoDB - Ensol

Exemplo de uso

>>> from pymongo import Connection>>> con = Connection(‘localhost’)>>> db = con[‘blog’]

Page 54: Python e MongoDB - Ensol

Inserindo um registro

>>> post = {‘title’:‘Meu Primeiro Post’,... ‘author’:‘Christiano Anderson’,... ‘content’: ‘Esse eh um exemplo de conteudo’,... ‘tags’: [‘mongodb’,‘paraiba’,‘evento’,‘ensol’]}

>>> post = db[‘posts’]>>> post.insert(post)ObjectId(‘4cb662f508bf532b1b000000’)

Page 55: Python e MongoDB - Ensol

Inserindo mais de um documento de uma só vez...

>>> other_posts = [{‘title’:‘Segundo post’,‘author’:‘Christiano Anderson’,‘tags’:[‘teste’],‘content’:‘Esse eh meu segundo post’},

ObjectId(‘4cb6651b08bf532b970000000’)]

{‘title’:‘Terceiro post’,‘author’:‘Luke Skywalker’,‘tags’:[‘naboo’,‘tatooine’],‘content’:‘Olah Princesa Leya’}

ObjectId(‘4cb6651b08bf532b970000001’)]

Page 56: Python e MongoDB - Ensol

Pesquisando na base de dados com Python

>>> all_posts = db.post.find({})>>> for p in all_posts:... print p[‘title’]Meu primeiro postMeu segundo postOlah Princesa Leya!

Page 57: Python e MongoDB - Ensol

Outras consultas

>>> p = db.posts.find_one({‘tags’:‘naboo’})

>>> p = db.users.find({‘age’:{‘$gte’:18}})

Page 58: Python e MongoDB - Ensol

Outras consultas

>>> p = db.posts.find_one({‘tags’:‘naboo’})

>>> p = db.users.find({‘age’:{‘$gte’:18}})

Page 59: Python e MongoDB - Ensol

Outras consultas

>>> p = db.posts.find_one({‘tags’:‘naboo’})

>>> p = db.users.find({‘age’:{‘$gte’:18}})

É possível usar operadores como $lt,$lte, $gt, $gte e outros

Page 60: Python e MongoDB - Ensol

- ORM para MongoDB- Sintaxe bem similhar ao ORM do Django- Baixa curva de aprendizado- Bastante estável e eficiente

MongoEngine

Page 61: Python e MongoDB - Ensol

- ORM para MongoDB- Sintaxe bem similhar ao ORM do Django- Baixa curva de aprendizado- Bastante estável e eficiente

$ easy_install mongoengine

MongoEngine

Page 62: Python e MongoDB - Ensol

- ORM para MongoDB- Sintaxe bem similhar ao ORM do Django- Baixa curva de aprendizado- Bastante estável e eficiente

$ easy_install mongoengine

MongoEngine

Page 63: Python e MongoDB - Ensol

- ORM para MongoDB- Sintaxe bem similhar ao ORM do Django- Baixa curva de aprendizado- Bastante estável e eficiente

$ easy_install mongoengine

MongoEngine

http://www.mongoengine.org

Page 64: Python e MongoDB - Ensol

from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()

Exemplo MongoEngine

Page 65: Python e MongoDB - Ensol

from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()

Exemplo MongoEngine

u = Usuario()u.nome = “Christiano”u.email = “[email protected]”u.save()

Page 66: Python e MongoDB - Ensol

from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()

Exemplo MongoEngine

u = Usuario()u.nome = “Christiano”u.email = “[email protected]”u.save()

Page 67: Python e MongoDB - Ensol

from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()

Exemplo MongoEngine

u = Usuario()u.nome = “Christiano”u.email = “[email protected]”u.save() Salvou no banco

Page 68: Python e MongoDB - Ensol

Consulta MongoEngine

for u in User.objects: print u.nome, u.email

Page 69: Python e MongoDB - Ensol

MongoDB e Django

É possível, mas ainda não tem umasolução oficial

Page 70: Python e MongoDB - Ensol

MongoDB e Django

Pontos mais críticos na integração com Django:- Autenticação;- Sessões;- Admin;- Outras questões amarradas ao ORM...

Page 71: Python e MongoDB - Ensol

Django-MongoDB

Pacote depende do django-nonrel e djangotoolbox

Mais informações:

http://django-mongodb.org/

Page 72: Python e MongoDB - Ensol

Django-MongoDB - Como instalar

hg clone http://bitbucket.org/wkornewald/django-nonrelcd django-nonrel && python setup.py install

hg clone http://bitbucket.org/wkornewald/djangotoolboxcd djangotoolbox && python setup.py install

git clone https://github.com/django-mongodb-engine/mongodb-enginecd mongodb-engine && python setup.py install

Django-nonrel

Djangotoolbox

Django-mongodb-engine

Page 73: Python e MongoDB - Ensol

Django-MongoDB - recursos interessantes

É possível utilizar GridFS, MapReduce,cache, agregadores e demais funcionalidadesdo MongoDB

http://django-mongodb.org/topics/index.html

Mais informações:

Page 74: Python e MongoDB - Ensol

settings.py

DATABASES = { 'default' : { 'ENGINE' : 'django_mongodb_engine', 'NAME' : 'my_database' }}

Agora é só desenvolver sua app no Django :-)

Page 75: Python e MongoDB - Ensol

Como colaborar?

Lista: http://groups.google.com/group/mongodb-user

#MongoDB no irc.freenode.org

Page 76: Python e MongoDB - Ensol

Experimente o MongoDB

Você pode experimentar o MongoDBsem precisar instalar nada!

http://try.mongodb.org/

Page 77: Python e MongoDB - Ensol

Obrigado! :-)

Christiano Anderson

[email protected]

Twitter: @dump

Blog: http://christiano.me