SlideShare une entreprise Scribd logo
1  sur  69
Django e MongoDB
  Christiano Anderson
    Twitter: @dump
    Blog: http://christiano.me
    Email: anderson@gonow.com.br
    Site: http://www.gonow.com.br
• Trabalha com web desde 1995;
• Gerente de Projetos da Gonow;
• Ex-desenvolvedor do Projeto GNU (FSF);
• Trabalha com Python desde 2000;
• Membro da equipe de tradução do
  MongoDB para pt_BR;

• Evangelista Python, Django e NoSQL;
O que é MongoDB?
O que é MongoDB?
Banco de dados não relacional
O que é MongoDB?
Banco de dados não relacional



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


 Alta performance
                      Orientado a documentos
O que é MongoDB?
Banco de dados não relacional
                                Software Livre
 Alta performance
                      Orientado a documentos
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 e Django?
Por que Python e Django?
  Afinidade com a linguagem...
Por que Python e Django?
   Afinidade com a linguagem...

 Facilidade em trabalhar com o modelo do MongoDB...
Por que Python e Django?
   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, é praticamente um JSON.
É muito fácil trabalhar com esse modelo de dados em
         qualquer linguagem de programação
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”})
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!
Django MongoDB Engine


    Pacotes necessários:
    •   Django-Nonrel
        http://leve.me/djnonrel

    •   DjangoToolbox
        http://leve.me/djtoolbox

    •   Django MongoDB Engine
        http://leve.me/djmongodb
Como Instalar?
Considerando o Django e Pymongo já instalados:
Como Instalar?
Considerando o Django e Pymongo já instalados:
$ hg clone http://bitbucket.org/wkornewald/django-nonrel
$ cd django-nonrel && python setup.py install
Como Instalar?
Considerando o Django e Pymongo já instalados:
$ hg clone http://bitbucket.org/wkornewald/django-nonrel
$ cd django-nonrel && python setup.py install



$ hg clone http://bitbucket.org/wkornewald/djangotoolbox
$ cd djangotoolbox && python setup.py install
Como Instalar?
Considerando o Django e Pymongo já instalados:
$ hg clone http://bitbucket.org/wkornewald/django-nonrel
$ cd django-nonrel && python setup.py install



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


$ git clone https://github.com/django-mongodb-engine/mongodb-
engine
$ cd mongodb-engine && python setup.py install
Alterando settings.py


DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine',
        'NAME': 'testedjango',
    }
}
Rodando Syncdb

          Superuser created successfully.
          Installing custom SQL ...
          Installing indexes ...
          Installing indices for auth.Permission model
          Installing indices for auth.Group_permissions model
          Installing indices for auth.Group model
          Installing indices for auth.User_user_permissions model
          Installing indices for auth.User_groups model
          Installing indices for auth.User model
          Installing indices for auth.Message model
          Installing indices for contenttypes.ContentType model
          Installing indices for sessions.Session model
          Installing indices for sites.Site model
          Installing indices for admin.LogEntry model
          Installing indices for inicio.Usuario model
          No fixtures found.
Algo não está funcionando!
Correção SITE_ID
 MongoDB shell version: 2.0.0
 connecting to: test
 > show dbs
 local
(empty)
 testedjango
 0.203125GB
 > use testedjango
 switched to db testedjango
 > show collections
 auth_group
 auth_group_permissions
 auth_message
 auth_permission
 auth_user
 auth_user_groups
 auth_user_user_permissions
 django_admin_log
 django_content_type
 django_session
 django_site
 inicio_usuario
 system.indexes
Correção SITE_ID
 MongoDB shell version: 2.0.0
 connecting to: test
 > show dbs
 local
(empty)
 testedjango
 0.203125GB
 > use testedjango
 switched to db testedjango
 > show collections
 auth_group
 auth_group_permissions
 auth_message
 auth_permission
 auth_user
 auth_user_groups
 auth_user_user_permissions
 django_admin_log
 django_content_type
 django_session
 django_site
 inicio_usuario
 system.indexes
Correção SITE_ID
 MongoDB shell version: 2.0.0
 connecting to: test
 > show dbs
 local
(empty)
 testedjango
 0.203125GB
 > use testedjango
 switched to db testedjango
 > show collections
 auth_group
 auth_group_permissions
 auth_message
 auth_permission
 auth_user
                                > db.django_site.find({})
 auth_user_groups
                                { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"),
 auth_user_user_permissions
                                "domain" : "example.com", "name" : "example.com" }
 django_admin_log
                                >
 django_content_type
 django_session
 django_site
 inicio_usuario
 system.indexes
Correção SITE_ID
 MongoDB shell version: 2.0.0
 connecting to: test
 > show dbs
 local
(empty)
 testedjango
 0.203125GB
 > use testedjango
 switched to db testedjango
 > show collections
 auth_group
 auth_group_permissions
 auth_message
 auth_permission
 auth_user
                                > db.django_site.find({})
 auth_user_groups
                                { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"),
 auth_user_user_permissions
                                "domain" : "example.com", "name" : "example.com" }
 django_admin_log
                                >
 django_content_type
 django_session
 django_site
 inicio_usuario
 system.indexes
Correção SITE_ID
 MongoDB shell version: 2.0.0
 connecting to: test
 > show dbs
 local
(empty)
 testedjango
 0.203125GB
 > use testedjango
 switched to db testedjango
 > show collections
 auth_group
 auth_group_permissions                              Seu novo SITE_ID
 auth_message
 auth_permission
 auth_user
                                > db.django_site.find({})
 auth_user_groups
                                { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"),
 auth_user_user_permissions
                                "domain" : "example.com", "name" : "example.com" }
 django_admin_log
                                >
 django_content_type
 django_session
 django_site
 inicio_usuario
 system.indexes
Alteração no settings.py
Alteração no settings.py




     SITE_ID = u'4e84aa608a1505054c00001d'
Agora funciona! :-)
models.py

from django.db import models
from django.contrib import admin

class Usuario(models.Model):
   '''Teste'''

  nome = models.CharField('Nome', max_length=100)
  email = models.EmailField('Email')
  descr = models.CharField('Descricao', max_length=100, null=True, blank=True)

  def __unicode__(self):
    return self.email



admin.site.register(Usuario)
mongo shell



> db.inicio_usuario.find({})
{ "_id" : ObjectId("4e85f8cc8a15050150000000"), "email" :
"anderson@gonow.com.br", "descr" : "teste", "nome" :
"Christiano" }
Django MongoDB Engine



    • Possível trabalhar da mesma forma, como
      em um banco relacional;
    • Many to many funciona normalmente;
    • Admin funciona;
    • Sessões e autenticação também funcionam;
Outras funcionalidades


             - O módulo também implementa:
               - GridFS;
               - Map/Reduce;
               - Cache;
               - Agregadores;
               - Operações mais baixo nível
Perguntas (ainda) sem respostas:



                   Qual performance?

                   É estável?

                   É seguro?
Referências

     http://django-mongodb.org/



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



     http://leve.me/onGqId
MUG-SP




    - MongoDB User Group de São Paulo
    - Primeiro encontro: 20 de Outubro
    - Contará com a presença de Mathias Stern
http://www.meetup.com/SP-MongoDB/
Obrigado! :-)


                Christiano Anderson

                anderson@gonow.com.br

                Twitter: @dump

                Blog: http://christiano.me

Contenu connexe

Tendances

Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
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
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIBruna Pereira
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 

Tendances (20)

Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
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
 
NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTI
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 

En vedette

Writing A Lab Report- Komperda
Writing A Lab Report- KomperdaWriting A Lab Report- Komperda
Writing A Lab Report- KomperdaRegis Komperda
 
Data management profiles workshop
Data management profiles workshopData management profiles workshop
Data management profiles workshoplindahauck
 
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley永錫 張
 
Calypso Social Media Tasks: "How To"
Calypso Social Media Tasks: "How To"Calypso Social Media Tasks: "How To"
Calypso Social Media Tasks: "How To"Six Degrees
 
EmEdigitalautobiography
EmEdigitalautobiographyEmEdigitalautobiography
EmEdigitalautobiographyrae15
 
2011專業企管講師培訓簡章
2011專業企管講師培訓簡章2011專業企管講師培訓簡章
2011專業企管講師培訓簡章永錫 張
 
Buurtkracht presentatie proven nov 2013
Buurtkracht presentatie proven nov 2013Buurtkracht presentatie proven nov 2013
Buurtkracht presentatie proven nov 2013Proven Partners
 
Zorg nieuwe stijl sturing van professionaliteit door de jaren heen
Zorg nieuwe stijl  sturing van professionaliteit door de jaren heenZorg nieuwe stijl  sturing van professionaliteit door de jaren heen
Zorg nieuwe stijl sturing van professionaliteit door de jaren heenProven Partners
 
Social Media Week Milano 2010: il programma
Social Media Week Milano 2010: il programmaSocial Media Week Milano 2010: il programma
Social Media Week Milano 2010: il programmaSilvio De Rossi
 
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...Silvio De Rossi
 
Learning Your Aleph Beth
Learning Your Aleph BethLearning Your Aleph Beth
Learning Your Aleph BethNLBC
 
ontbijtsessie Red Peppers social media
ontbijtsessie Red Peppers social mediaontbijtsessie Red Peppers social media
ontbijtsessie Red Peppers social mediaProven Partners
 
Border Crossings Using NING
Border Crossings Using NINGBorder Crossings Using NING
Border Crossings Using NINGAndy Milligan
 
Slide quiz #1
Slide quiz #1Slide quiz #1
Slide quiz #1stewartl
 
Sturing & Ruimte MKB Congres 2009
Sturing & Ruimte MKB Congres 2009Sturing & Ruimte MKB Congres 2009
Sturing & Ruimte MKB Congres 2009Proven Partners
 
Rethink Christmas Slowdown
Rethink Christmas   SlowdownRethink Christmas   Slowdown
Rethink Christmas SlowdownNLBC
 

En vedette (20)

Nisiotika simplegmata
Nisiotika simplegmataNisiotika simplegmata
Nisiotika simplegmata
 
Whale trail
Whale trailWhale trail
Whale trail
 
Writing A Lab Report- Komperda
Writing A Lab Report- KomperdaWriting A Lab Report- Komperda
Writing A Lab Report- Komperda
 
Data management profiles workshop
Data management profiles workshopData management profiles workshop
Data management profiles workshop
 
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley
0503 天下雜誌書香花園 1人.com vs. fb社交圖譜的應用 shirley
 
Hnw coevent 31 mei 2011
Hnw coevent 31 mei 2011Hnw coevent 31 mei 2011
Hnw coevent 31 mei 2011
 
Calypso Social Media Tasks: "How To"
Calypso Social Media Tasks: "How To"Calypso Social Media Tasks: "How To"
Calypso Social Media Tasks: "How To"
 
EmEdigitalautobiography
EmEdigitalautobiographyEmEdigitalautobiography
EmEdigitalautobiography
 
2011專業企管講師培訓簡章
2011專業企管講師培訓簡章2011專業企管講師培訓簡章
2011專業企管講師培訓簡章
 
Buurtkracht presentatie proven nov 2013
Buurtkracht presentatie proven nov 2013Buurtkracht presentatie proven nov 2013
Buurtkracht presentatie proven nov 2013
 
We are all hackers now
We are all hackers nowWe are all hackers now
We are all hackers now
 
Zorg nieuwe stijl sturing van professionaliteit door de jaren heen
Zorg nieuwe stijl  sturing van professionaliteit door de jaren heenZorg nieuwe stijl  sturing van professionaliteit door de jaren heen
Zorg nieuwe stijl sturing van professionaliteit door de jaren heen
 
Social Media Week Milano 2010: il programma
Social Media Week Milano 2010: il programmaSocial Media Week Milano 2010: il programma
Social Media Week Milano 2010: il programma
 
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...
3.a Edizione dell'Osservatorio Internet sul fenomeno dell'IM in Italia: polit...
 
Learning Your Aleph Beth
Learning Your Aleph BethLearning Your Aleph Beth
Learning Your Aleph Beth
 
ontbijtsessie Red Peppers social media
ontbijtsessie Red Peppers social mediaontbijtsessie Red Peppers social media
ontbijtsessie Red Peppers social media
 
Border Crossings Using NING
Border Crossings Using NINGBorder Crossings Using NING
Border Crossings Using NING
 
Slide quiz #1
Slide quiz #1Slide quiz #1
Slide quiz #1
 
Sturing & Ruimte MKB Congres 2009
Sturing & Ruimte MKB Congres 2009Sturing & Ruimte MKB Congres 2009
Sturing & Ruimte MKB Congres 2009
 
Rethink Christmas Slowdown
Rethink Christmas   SlowdownRethink Christmas   Slowdown
Rethink Christmas Slowdown
 

Similaire à Django e MongoDB - Python Brasil 7

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
 
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
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16Christiano Anderson
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
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
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 

Similaire à Django e MongoDB - Python Brasil 7 (20)

Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
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
 
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
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Django
DjangoDjango
Django
 
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
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
MongoDB
MongoDBMongoDB
MongoDB
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 

Plus de Christiano Anderson

Plus de Christiano Anderson (13)

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
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
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - 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
 

Django e MongoDB - Python Brasil 7

  • 1. Django e MongoDB Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br
  • 2. • Trabalha com web desde 1995; • Gerente de Projetos da Gonow; • Ex-desenvolvedor do Projeto GNU (FSF); • Trabalha com Python desde 2000; • Membro da equipe de tradução do MongoDB para pt_BR; • Evangelista Python, Django e 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 Orientado a documentos
  • 6. O que é MongoDB? Banco de dados não relacional Alta performance Orientado a documentos
  • 7. O que é MongoDB? Banco de dados não relacional Software Livre Alta performance Orientado a documentos
  • 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
  • 19. Por que Python e Django?
  • 20. Por que Python e Django? Afinidade com a linguagem...
  • 21. Por que Python e Django? Afinidade com a linguagem... Facilidade em trabalhar com o modelo do MongoDB...
  • 22. Por que Python e Django? 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, é praticamente um JSON. É muito fácil trabalhar com esse modelo de dados em qualquer linguagem de programação
  • 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”}) Duplicados db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”}) db.programmers.distinct(“language”)
  • 34. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure
  • 35. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure Utiliza-se JavaScript para criar essas funções
  • 36. 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
  • 37. 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; }
  • 38. 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”})
  • 39. 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)
  • 40. Outros recursos bacanas Suporte a índices;
  • 41. Outros recursos bacanas Suporte a índices; GridFS;
  • 42. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados;
  • 43. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade;
  • 44. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade; É software livre, mas também oferece suporte comercial!
  • 45. Django MongoDB Engine Pacotes necessários: • Django-Nonrel http://leve.me/djnonrel • DjangoToolbox http://leve.me/djtoolbox • Django MongoDB Engine http://leve.me/djmongodb
  • 46. Como Instalar? Considerando o Django e Pymongo já instalados:
  • 47. Como Instalar? Considerando o Django e Pymongo já instalados: $ hg clone http://bitbucket.org/wkornewald/django-nonrel $ cd django-nonrel && python setup.py install
  • 48. Como Instalar? Considerando o Django e Pymongo já instalados: $ hg clone http://bitbucket.org/wkornewald/django-nonrel $ cd django-nonrel && python setup.py install $ hg clone http://bitbucket.org/wkornewald/djangotoolbox $ cd djangotoolbox && python setup.py install
  • 49. Como Instalar? Considerando o Django e Pymongo já instalados: $ hg clone http://bitbucket.org/wkornewald/django-nonrel $ cd django-nonrel && python setup.py install $ hg clone http://bitbucket.org/wkornewald/djangotoolbox $ cd djangotoolbox && python setup.py install $ git clone https://github.com/django-mongodb-engine/mongodb- engine $ cd mongodb-engine && python setup.py install
  • 50. Alterando settings.py DATABASES = { 'default': { 'ENGINE': 'django_mongodb_engine', 'NAME': 'testedjango', } }
  • 51. Rodando Syncdb Superuser created successfully. Installing custom SQL ... Installing indexes ... Installing indices for auth.Permission model Installing indices for auth.Group_permissions model Installing indices for auth.Group model Installing indices for auth.User_user_permissions model Installing indices for auth.User_groups model Installing indices for auth.User model Installing indices for auth.Message model Installing indices for contenttypes.ContentType model Installing indices for sessions.Session model Installing indices for sites.Site model Installing indices for admin.LogEntry model Installing indices for inicio.Usuario model No fixtures found.
  • 52. Algo não está funcionando!
  • 53. Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local (empty) testedjango 0.203125GB > use testedjango switched to db testedjango > show collections auth_group auth_group_permissions auth_message auth_permission auth_user auth_user_groups auth_user_user_permissions django_admin_log django_content_type django_session django_site inicio_usuario system.indexes
  • 54. Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local (empty) testedjango 0.203125GB > use testedjango switched to db testedjango > show collections auth_group auth_group_permissions auth_message auth_permission auth_user auth_user_groups auth_user_user_permissions django_admin_log django_content_type django_session django_site inicio_usuario system.indexes
  • 55. Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local (empty) testedjango 0.203125GB > use testedjango switched to db testedjango > show collections auth_group auth_group_permissions auth_message auth_permission auth_user > db.django_site.find({}) auth_user_groups { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"), auth_user_user_permissions "domain" : "example.com", "name" : "example.com" } django_admin_log > django_content_type django_session django_site inicio_usuario system.indexes
  • 56. Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local (empty) testedjango 0.203125GB > use testedjango switched to db testedjango > show collections auth_group auth_group_permissions auth_message auth_permission auth_user > db.django_site.find({}) auth_user_groups { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"), auth_user_user_permissions "domain" : "example.com", "name" : "example.com" } django_admin_log > django_content_type django_session django_site inicio_usuario system.indexes
  • 57. Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local (empty) testedjango 0.203125GB > use testedjango switched to db testedjango > show collections auth_group auth_group_permissions Seu novo SITE_ID auth_message auth_permission auth_user > db.django_site.find({}) auth_user_groups { "_id" : ObjectId("4e85e53295f9eb0d9d00001d"), auth_user_user_permissions "domain" : "example.com", "name" : "example.com" } django_admin_log > django_content_type django_session django_site inicio_usuario system.indexes
  • 59. Alteração no settings.py SITE_ID = u'4e84aa608a1505054c00001d'
  • 61. models.py from django.db import models from django.contrib import admin class Usuario(models.Model): '''Teste''' nome = models.CharField('Nome', max_length=100) email = models.EmailField('Email') descr = models.CharField('Descricao', max_length=100, null=True, blank=True) def __unicode__(self): return self.email admin.site.register(Usuario)
  • 62. mongo shell > db.inicio_usuario.find({}) { "_id" : ObjectId("4e85f8cc8a15050150000000"), "email" : "anderson@gonow.com.br", "descr" : "teste", "nome" : "Christiano" }
  • 63. Django MongoDB Engine • Possível trabalhar da mesma forma, como em um banco relacional; • Many to many funciona normalmente; • Admin funciona; • Sessões e autenticação também funcionam;
  • 64. Outras funcionalidades - O módulo também implementa: - GridFS; - Map/Reduce; - Cache; - Agregadores; - Operações mais baixo nível
  • 65. Perguntas (ainda) sem respostas: Qual performance? É estável? É seguro?
  • 66. Referências http://django-mongodb.org/ http://django-mongodb.org/topics/gridfs.html http://leve.me/onGqId
  • 67. MUG-SP - MongoDB User Group de São Paulo - Primeiro encontro: 20 de Outubro - Contará com a presença de Mathias Stern
  • 69. Obrigado! :-) Christiano Anderson anderson@gonow.com.br Twitter: @dump Blog: http://christiano.me

Notes de l'éditeur

  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