SlideShare uma empresa Scribd logo
1 de 77
Python e MongoDB
  Christiano Anderson
    Twitter: @dump
    Blog: http://christiano.me
    Email: anderson@gonow.com.br
    Site: http://www.gonow.com.br
• 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;
O que é MongoDB?
O que é MongoDB?
Banco de dados não relacional
O que é MongoDB?
Banco de dados não relacional
                                Software Livre
O que é MongoDB?
Banco de dados não relacional
                                Software Livre
 Alta performance
O que é MongoDB?
Banco de dados não relacional
                                Software Livre
 Alta performance


       Schema free
O que é MongoDB?
Banco de dados não relacional
                                Software Livre
 Alta performance
                      Orientado a documentos

       Schema free
“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)”
Quem utiliza MongoDB




                       E muitos outros...
Bom para...
Bom para...
Web 2.0
Bom para...
Web 2.0
          Migrations
Bom para...
Web 2.0
          Migrations

                       Flexibilidade
Bom para...
Web 2.0
          Migrations

                       Flexibilidade

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

   Transações
Não muito bom se você precisa de...

   Transações

       Suporte completo a SQL
Por que Python?
Por que Python?
 Afinidade com a linguagem...
Por que Python?
  Afinidade com a linguagem...

Facilidade em trabalhar com o modelo do MongoDB...
Por que Python?
  Afinidade com a linguagem...

Facilidade em trabalhar com o modelo do MongoDB...


 Vários módulos e ORMs prontos...
Modelo de documento
Modelo de documento
    {‘nome’: ‘Christiano’,
    ‘linguagem’: ‘Python’,
    ‘nota’: 10}
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
Migrations?
Migrations?
Você pode mudar dinamicamente seu documento...
Migrations?
Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,
‘linguagem’: ‘Python’,
‘nota’: 10}
Migrations?
Você pode mudar dinamicamente seu documento...

{‘nome’: ‘Christiano’,
‘linguagem’: ‘Python’,
‘nota’: 10}
Migrations?
Você pode mudar dinamicamente seu documento...

                             {‘nome’: ‘Christiano’,
{‘nome’: ‘Christiano’,
                             ‘linguagem’: ‘Python’,
‘linguagem’: ‘Python’,
                             ‘nota’: 10,
‘nota’: 10}
                             ‘local’: ‘Gonow’}
Migrations?
Você pode mudar dinamicamente seu documento...

                             {‘nome’: ‘Christiano’,
{‘nome’: ‘Christiano’,
                             ‘linguagem’: ‘Python’,
‘linguagem’: ‘Python’,
                             ‘nota’: 10,
‘nota’: 10}
                             ‘local’: ‘Gonow’}
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!
Agregadores...

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

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

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

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




             db.programmers.insert({“linguagem”:”perl”})
             db.programmers.insert({“linguagem”:”ruby”})
             db.programmers.insert({“linguagem”:”python”})
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”)
Map/Reduce
   É utilizado para criar funções especiais, pode ser
           comparado a uma stored procedure
Map/Reduce
   É utilizado para criar funções especiais, pode ser
           comparado a uma stored procedure


     Utiliza-se JavaScript para criar essas funções
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
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;
        }
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”})
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)
Outros recursos bacanas
 Suporte a índices;
Outros recursos bacanas
 Suporte a índices;
           GridFS;
Outros recursos bacanas
 Suporte a índices;
           GridFS;
                Replicação de dados;
Outros recursos bacanas
 Suporte a índices;
           GridFS;
                Replicação de dados;
                          Alta disponibilidade;
Outros recursos bacanas
 Suporte a índices;
           GridFS;
                Replicação de dados;
                          Alta disponibilidade;

     É software livre, mas também oferece suporte
                        comercial!
Como trabalhar com MongoDB e Python
Como trabalhar com MongoDB e Python
   PyMongo é o módulo para Python e MongoDB;
Como trabalhar com MongoDB e Python
   PyMongo é o módulo para Python e MongoDB;



            $ easy_install pymongo
Exemplo de uso
Exemplo de uso



>>> from pymongo import Connection
>>> con = Connection(‘localhost’)
>>> db = con[‘blog’]
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’)
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’)]
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!
Outras consultas


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

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


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

    >>> p = db.users.find({‘age’:{‘$gte’:18}})
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
MongoEngine


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


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

              $ easy_install mongoengine
MongoEngine


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

              $ easy_install mongoengine
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
Exemplo MongoEngine
   from mongoengine import *

   class Usuario(Document):
       nome = StringField(required=True)
       email = StringField()
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()
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()
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
Consulta MongoEngine




               for u in User.objects:
                   print u.nome, u.email
MongoDB e Django




          É possível, mas ainda não tem uma
                     solução oficial
MongoDB e Django

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

                Pacote depende do
           django-nonrel e djangotoolbox


                 Mais informações:

            http://django-mongodb.org/
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
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
settings.py


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


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



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

 #MongoDB no irc.freenode.org
Experimente o MongoDB



         Você pode experimentar o MongoDB
              sem precisar instalar nada!

               http://try.mongodb.org/
Obrigado! :-)


                Christiano Anderson

                anderson@gonow.com.br

                Twitter: @dump

                Blog: http://christiano.me

Mais conteúdo relacionado

Mais procurados

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Fernando Boaglio
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoRicardo Longa
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibanaLuiz Henrique Zambom Santana
 

Mais procurados (19)

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
#4 Primeiros comandos no MongoDB
#4   Primeiros comandos no MongoDB#4   Primeiros comandos no MongoDB
#4 Primeiros comandos no MongoDB
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibana
 

Destaque

PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDBBrunno Gomes
 
Introduction to Python for Symbian S60
Introduction to Python for Symbian S60Introduction to Python for Symbian S60
Introduction to Python for Symbian S60Marcel Caraciolo
 
Agenda pentru Romania Digitala
Agenda pentru Romania DigitalaAgenda pentru Romania Digitala
Agenda pentru Romania DigitalaTotalSoft
 
Mini-Curso Python para Symbian
Mini-Curso Python para SymbianMini-Curso Python para Symbian
Mini-Curso Python para SymbianMarcel Caraciolo
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonCriação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonLeandro Mendes Ferreira
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3Moises de Paula
 
Os 20 Mandamentos dos Líderes Extraordinários
Os 20 Mandamentos dos Líderes ExtraordináriosOs 20 Mandamentos dos Líderes Extraordinários
Os 20 Mandamentos dos Líderes ExtraordináriosLeonardo Neves
 
Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Jonh Edson
 
Desenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneDesenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneJacson Tiola
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Programação ara não programadores com python e web2py
Programação ara não programadores com python e web2pyProgramação ara não programadores com python e web2py
Programação ara não programadores com python e web2pyRelsi Maron
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Construção de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterConstrução de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterMarcos Castro
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonJanderson Campêlo
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 

Destaque (20)

PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDB
 
Python na Web
Python na WebPython na Web
Python na Web
 
Introduction to Python for Symbian S60
Introduction to Python for Symbian S60Introduction to Python for Symbian S60
Introduction to Python for Symbian S60
 
Agenda pentru Romania Digitala
Agenda pentru Romania DigitalaAgenda pentru Romania Digitala
Agenda pentru Romania Digitala
 
Mini-Curso Python para Symbian
Mini-Curso Python para SymbianMini-Curso Python para Symbian
Mini-Curso Python para Symbian
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonCriação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3
 
Os 20 Mandamentos dos Líderes Extraordinários
Os 20 Mandamentos dos Líderes ExtraordináriosOs 20 Mandamentos dos Líderes Extraordinários
Os 20 Mandamentos dos Líderes Extraordinários
 
Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Python com baterias incluídas v2.0
Python com baterias incluídas v2.0
 
Desenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneDesenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e Plone
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Programação ara não programadores com python e web2py
Programação ara não programadores com python e web2pyProgramação ara não programadores com python e web2py
Programação ara não programadores com python e web2py
 
Workshop Python.1
Workshop Python.1Workshop Python.1
Workshop Python.1
 
Introducao python 2010
Introducao python 2010Introducao python 2010
Introducao python 2010
 
Diversidade na Comunidade Python
Diversidade na Comunidade PythonDiversidade na Comunidade Python
Diversidade na Comunidade Python
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Construção de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterConstrução de interfaces gráficas com Tkinter
Construção de interfaces gráficas com Tkinter
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 

Semelhante a Python e MongoDB - Ensol

Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
MongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoMongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoThiago Avelino
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
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 inteligentesChristiano Anderson
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodbThiago Avelino
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 

Semelhante a Python e MongoDB - Ensol (20)

Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
MongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoMongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documento
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
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
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 

Mais de Christiano Anderson

Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoChristiano Anderson
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Christiano Anderson
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIChristiano Anderson
 

Mais de Christiano Anderson (11)

certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
Scrum
ScrumScrum
Scrum
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

Python e MongoDB - Ensol

  • 1. Python e MongoDB Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br
  • 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. O que é MongoDB?
  • 4. O que é MongoDB? Banco de dados não relacional
  • 5. O que é MongoDB? Banco de dados não relacional Software Livre
  • 6. O que é MongoDB? Banco de dados não relacional Software Livre Alta performance
  • 7. O que é MongoDB? Banco de dados não relacional Software Livre Alta performance Schema free
  • 8. O que é MongoDB? Banco de dados não relacional Software Livre Alta performance Orientado a documentos Schema free
  • 9. “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)”
  • 10. Quem utiliza MongoDB E muitos outros...
  • 13. Bom para... Web 2.0 Migrations
  • 14. Bom para... Web 2.0 Migrations Flexibilidade
  • 15. Bom para... Web 2.0 Migrations Flexibilidade Caching
  • 16. Não muito bom se você precisa de...
  • 17. Não muito bom se você precisa de... Transações
  • 18. Não muito bom se você precisa de... Transações Suporte completo a SQL
  • 20. Por que Python? Afinidade com a linguagem...
  • 21. Por que Python? Afinidade com a linguagem... Facilidade em trabalhar com o modelo do MongoDB...
  • 22. Por que Python? Afinidade com a linguagem... Facilidade em trabalhar com o modelo do MongoDB... Vários módulos e ORMs prontos...
  • 24. Modelo de documento {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘nota’: 10}
  • 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
  • 27. Migrations? Você pode mudar dinamicamente seu documento...
  • 28. Migrations? Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘nota’: 10}
  • 29. Migrations? Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘nota’: 10}
  • 30. Migrations? Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’, {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘linguagem’: ‘Python’, ‘nota’: 10, ‘nota’: 10} ‘local’: ‘Gonow’}
  • 31. Migrations? Você pode mudar dinamicamente seu documento... {‘nome’: ‘Christiano’, {‘nome’: ‘Christiano’, ‘linguagem’: ‘Python’, ‘linguagem’: ‘Python’, ‘nota’: 10, ‘nota’: 10} ‘local’: ‘Gonow’}
  • 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. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
  • 34. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
  • 35. Agregadores... db.programmers.insert({“linguagem”:”python”}) db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
  • 36. Agregadores... db.programmers.insert({“linguagem”:”python”}) Duplicados db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”})
  • 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. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure
  • 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. 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. 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. 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. 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. Outros recursos bacanas Suporte a índices;
  • 45. Outros recursos bacanas Suporte a índices; GridFS;
  • 46. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados;
  • 47. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade;
  • 48. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade; É software livre, mas também oferece suporte comercial!
  • 49. Como trabalhar com MongoDB e Python
  • 50. Como trabalhar com MongoDB e Python PyMongo é o módulo para Python e MongoDB;
  • 51. Como trabalhar com MongoDB e Python PyMongo é o módulo para Python e MongoDB; $ easy_install pymongo
  • 53. Exemplo de uso >>> from pymongo import Connection >>> con = Connection(‘localhost’) >>> db = con[‘blog’]
  • 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. 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’)]
  • 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. Outras consultas >>> p = db.posts.find_one({‘tags’:‘naboo’}) >>> p = db.users.find({‘age’:{‘$gte’:18}})
  • 58. Outras consultas >>> p = db.posts.find_one({‘tags’:‘naboo’}) >>> p = db.users.find({‘age’:{‘$gte’:18}})
  • 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. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente
  • 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. MongoEngine - ORM para MongoDB - Sintaxe bem similhar ao ORM do Django - Baixa curva de aprendizado - Bastante estável e eficiente $ easy_install mongoengine
  • 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. Exemplo MongoEngine from mongoengine import * class Usuario(Document): nome = StringField(required=True) email = StringField()
  • 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. 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. 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. Consulta MongoEngine for u in User.objects: print u.nome, u.email
  • 69. MongoDB e Django É possível, mas ainda não tem uma solução oficial
  • 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. Django-MongoDB Pacote depende do django-nonrel e djangotoolbox Mais informações: http://django-mongodb.org/
  • 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. 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. settings.py DATABASES = { 'default' : { 'ENGINE' : 'django_mongodb_engine', 'NAME' : 'my_database' } } Agora é só desenvolver sua app no Django :-)
  • 75. Como colaborar? Lista: http://groups.google.com/group/mongodb-user #MongoDB no irc.freenode.org
  • 76. Experimente o MongoDB Você pode experimentar o MongoDB sem precisar instalar nada! http://try.mongodb.org/
  • 77. Obrigado! :-) Christiano Anderson anderson@gonow.com.br Twitter: @dump Blog: http://christiano.me

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n