Python e MongoDB - Ensol

1.798 visualizações

Publicada em

Palestra apresentada no Encontro de Software Livre da Paraíba - Ensol - em 23/07/2011

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

Sem downloads
Visualizações
Visualizações totais
1.798
No SlideShare
0
A partir de incorporações
0
Número de incorporações
9
Ações
Compartilhamentos
0
Downloads
78
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Python e MongoDB - Ensol

    1. 1. Python e MongoDB Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br
    2. 2. • 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;
    3. 3. O que é MongoDB?
    4. 4. O que é MongoDB?Banco de dados não relacional
    5. 5. O que é MongoDB?Banco de dados não relacional Software Livre
    6. 6. O que é MongoDB?Banco de dados não relacional Software Livre Alta performance
    7. 7. O que é MongoDB?Banco de dados não relacional Software Livre Alta performance Schema free
    8. 8. O que é MongoDB?Banco de dados não relacional Software Livre Alta performance Orientado a documentos Schema free
    9. 9. “MongoDB preenche a lacuna entre modelagem chave/ valor (o que são bem rápidas e escaláveis) e ostradicionais banco de dados relacionais (que oferecem várias funcionalidades)”
    10. 10. Quem utiliza MongoDB E muitos outros...
    11. 11. Bom para...
    12. 12. Bom para...Web 2.0
    13. 13. Bom para...Web 2.0 Migrations
    14. 14. Bom para...Web 2.0 Migrations Flexibilidade
    15. 15. Bom para...Web 2.0 Migrations Flexibilidade Caching
    16. 16. Não muito bom se você precisa de...
    17. 17. Não muito bom se você precisa de... Transações
    18. 18. Não muito bom se você precisa de... Transações Suporte completo a SQL
    19. 19. Por que Python?
    20. 20. Por que Python? Afinidade com a linguagem...
    21. 21. Por que Python? Afinidade com a linguagem...Facilidade em trabalhar com o modelo do MongoDB...
    22. 22. Por que Python? Afinidade com a linguagem...Facilidade em trabalhar com o modelo do MongoDB... Vários módulos e ORMs prontos...
    23. 23. Modelo de documento
    24. 24. Modelo de documento {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘nota’: 10}
    25. 25. 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
    26. 26. Migrations?
    27. 27. Migrations?Você pode mudar dinamicamente seu documento...
    28. 28. Migrations?Você pode mudar dinamicamente seu documento...{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}
    29. 29. Migrations?Você pode mudar dinamicamente seu documento...{‘nome’: ‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10}
    30. 30. Migrations?Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’,{‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’}
    31. 31. Migrations?Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’,{‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’}
    32. 32. Migrations?Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’,{‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’} Você não precisa modificar o modelo de dados para adicionar novos elementos. Basta inserir e salvar novamente!
    33. 33. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
    34. 34. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
    35. 35. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
    36. 36. Agregadores... db.programmers.insert({“linguagem”:”python”})Duplicados db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
    37. 37. Agregadores... db.programmers.insert({“linguagem”:”python”})Duplicados db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”}) db.programmers.distinct(“language”)
    38. 38. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure
    39. 39. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure Utiliza-se JavaScript para criar essas funções
    40. 40. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure Utiliza-se JavaScript para criar essas funções Bastante flexível
    41. 41. 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; }
    42. 42. Comparando SQL e MongoDB 1/2 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”})
    43. 43. Comparando SQL e MongoDB 2/2 SQL MongoDB SELECT * FROM users WHERE db.users.find({‘age’:33}).sort({name: age=33 ORDER BY name 1}) SELECT * FROM users WHERE age db.users.find({‘age’:{$lt:33}})}) < 33 CREATE INDEX myindexname ON db.users.ensureIndex({name:1}) user(name) 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)
    44. 44. Outros recursos bacanas Suporte a índices;
    45. 45. Outros recursos bacanas Suporte a índices; GridFS;
    46. 46. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados;
    47. 47. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade;
    48. 48. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade; É software livre, mas também oferece suporte comercial!
    49. 49. Como trabalhar com MongoDB e Python
    50. 50. Como trabalhar com MongoDB e Python PyMongo é o módulo para Python e MongoDB;
    51. 51. Como trabalhar com MongoDB e Python PyMongo é o módulo para Python e MongoDB; $ easy_install pymongo
    52. 52. Exemplo de uso
    53. 53. Exemplo de uso>>> from pymongo import Connection>>> con = Connection(‘localhost’)>>> db = con[‘blog’]
    54. 54. 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’)
    55. 55. Inserindo mais de um documento de uma só vez...>>> other_posts = [{‘title’:‘Segundopost’,‘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’)]
    56. 56. Pesquisando na base de dados com Python >>> all_posts = db.post.find({}) >>> for p in all_posts: ... print p[‘title’] Meu primeiro post Meu segundo post Olah Princesa Leya!
    57. 57. Outras consultas >>> p = db.posts.find_one({‘tags’:‘naboo’}) >>> p = db.users.find({‘age’:{‘$gte’:18}})
    58. 58. Outras consultas >>> p = db.posts.find_one({‘tags’:‘naboo’}) >>> p = db.users.find({‘age’:{‘$gte’:18}})
    59. 59. 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
    60. 60. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente
    61. 61. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente $ easy_install mongoengine
    62. 62. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente $ easy_install mongoengine
    63. 63. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente $ easy_install mongoengine http://www.mongoengine.org
    64. 64. Exemplo MongoEngine from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()
    65. 65. Exemplo MongoEngine from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField() u = Usuario() u.nome = “Christiano” u.email = “anderson@gonow.com.br” u.save()
    66. 66. Exemplo MongoEngine from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField() u = Usuario() u.nome = “Christiano” u.email = “anderson@gonow.com.br” u.save()
    67. 67. Exemplo MongoEngine from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField() u = Usuario() u.nome = “Christiano” u.email = “anderson@gonow.com.br” u.save() Salvou no banco
    68. 68. Consulta MongoEngine for u in User.objects: print u.nome, u.email
    69. 69. MongoDB e Django É possível, mas ainda não tem uma solução oficial
    70. 70. MongoDB e Django Pontos mais críticos na integração com Django: - Autenticação; - Sessões; - Admin; - Outras questões amarradas ao ORM...
    71. 71. Django-MongoDB Pacote depende do django-nonrel e djangotoolbox Mais informações: http://django-mongodb.org/
    72. 72. Django-MongoDB - Como instalar Django-nonrel hg clone http://bitbucket.org/wkornewald/django-nonrel cd django-nonrel && python setup.py install Djangotoolbox hg clone http://bitbucket.org/wkornewald/djangotoolbox cd djangotoolbox && python setup.py install Django-mongodb-engine git clone https://github.com/django-mongodb-engine/mongodb-engine cd mongodb-engine && python setup.py install
    73. 73. Django-MongoDB - recursos interessantes É possível utilizar GridFS, MapReduce, cache, agregadores e demais funcionalidadesdo MongoDB Mais informações: http://django-mongodb.org/topics/index.html
    74. 74. settings.py DATABASES = { default : { ENGINE : django_mongodb_engine, NAME : my_database } } Agora é só desenvolver sua app no Django :-)
    75. 75. Como colaborar? Lista: http://groups.google.com/group/mongodb-user #MongoDB no irc.freenode.org
    76. 76. Experimente o MongoDB Você pode experimentar o MongoDB sem precisar instalar nada! http://try.mongodb.org/
    77. 77. Obrigado! :-) Christiano Anderson anderson@gonow.com.br Twitter: @dump Blog: http://christiano.me

    ×