Django e MongoDB  Christiano Anderson    Twitter: @dump    Blog: http://christiano.me    Email: anderson@gonow.com.br    S...
• Trabalha com web desde 1995;• Gerente de Projetos da Gonow;• Ex-desenvolvedor do Projeto GNU (FSF);• Trabalha com Python...
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              ...
O que é MongoDB?Banco de dados não relacional                                Software Livre Alta performance              ...
“MongoDB preenche a lacuna entre modelagem chave/    valor (o que são bem rápidas e escaláveis) e ostradicionais banco de ...
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 ...
Modelo de documento
Modelo de documento    {‘nome’: ‘Christiano’,    ‘linguagem’: ‘Python’,    ‘nota’: 10}
Modelo de documento          {‘nome’: ‘Christiano’,          ‘linguagem’: ‘Python’,          ‘nota’: 10}            Sim, é...
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’: ‘Chri...
Migrations?Você pode mudar dinamicamente seu documento...                             {‘nome’: ‘Christiano’,{‘nome’: ‘Chri...
Migrations?Você pode mudar dinamicamente seu documento...                             {‘nome’: ‘Christiano’,{‘nome’: ‘Chri...
Agregadores...             db.programmers.insert({“linguagem”:”python”})Duplicados             db.programmers.insert({“lin...
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 ...
Map/Reduce   É utilizado para criar funções especiais, pode ser           comparado a uma stored procedure     Utiliza-se ...
Exemplo de Map/Reduce para contar tags repetidas        function() {            this.tags.forEach(function(z)) {          ...
Comparando SQL e MongoDB 1/2                  SQL                              MongoDB    INSERT INTO USERS VALUES(1,1)   ...
Comparando SQL e MongoDB 2/2                  SQL                                MongoDB     SELECT * FROM users WHERE    ...
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;                          ...
Outros recursos bacanas Suporte a índices;           GridFS;                Replicação de dados;                          ...
Django MongoDB Engine    Pacotes necessários:    •   Django-Nonrel        http://leve.me/djnonrel    •   DjangoToolbox    ...
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 d...
Como Instalar?Considerando o Django e Pymongo já instalados:$ hg clone http://bitbucket.org/wkornewald/django-nonrel$ cd d...
Como Instalar?Considerando o Django e Pymongo já instalados:$ hg clone http://bitbucket.org/wkornewald/django-nonrel$ cd d...
Alterando settings.pyDATABASES = {    default: {        ENGINE: django_mongodb_engine,        NAME: testedjango,    }}
Rodando Syncdb          Superuser created successfully.          Installing custom SQL ...          Installing indexes ......
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 tes...
Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local(empty) testedjango 0.203125GB > use tes...
Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local(empty) testedjango 0.203125GB > use tes...
Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local(empty) testedjango 0.203125GB > use tes...
Correção SITE_ID MongoDB shell version: 2.0.0 connecting to: test > show dbs local(empty) testedjango 0.203125GB > use tes...
Alteração no settings.py
Alteração no settings.py     SITE_ID = u4e84aa608a1505054c00001d
Agora funciona! :-)
models.pyfrom django.db import modelsfrom django.contrib import adminclass Usuario(models.Model):   Teste  nome = models.C...
mongo shell> db.inicio_usuario.find({}){ "_id" : ObjectId("4e85f8cc8a15050150000000"), "email" :"anderson@gonow.com.br", "d...
Django MongoDB Engine    • Possível trabalhar da mesma forma, como      em um banco relacional;    • Many to many funciona...
Outras funcionalidades             - O módulo também implementa:               - GridFS;               - Map/Reduce;      ...
Perguntas (ainda) sem respostas:                   Qual performance?                   É estável?                   É segu...
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 S...
http://www.meetup.com/SP-MongoDB/
Obrigado! :-)                Christiano Anderson                anderson@gonow.com.br                Twitter: @dump       ...
Upcoming SlideShare
Loading in …5
×

Django e MongoDB - Python Brasil 7

6,807
-1

Published on

Palestra apresentada na Python Brasil 7

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,807
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
90
Comments
0
Likes
12
Embeds 0
No embeds

No notes for 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
  • Django e MongoDB - Python Brasil 7

    1. 1. Django 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 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. 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 Orientado a documentos
    6. 6. O que é MongoDB?Banco de dados não relacional Alta performance Orientado a documentos
    7. 7. O que é MongoDB?Banco de dados não relacional Software Livre Alta performance Orientado a documentos
    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 e Django?
    20. 20. Por que Python e Django? Afinidade com a linguagem...
    21. 21. Por que Python e Django? Afinidade com a linguagem... Facilidade em trabalhar com o modelo do MongoDB...
    22. 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...
    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, é praticamente um JSON.É muito fácil trabalhar com esse modelo de dados em qualquer linguagem de programação
    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”})Duplicados db.programmers.insert({“linguagem”:”perl”}) db.programmers.insert({“linguagem”:”ruby”}) db.programmers.insert({“linguagem”:”python”}) db.programmers.distinct(“language”)
    34. 34. Map/Reduce É utilizado para criar funções especiais, pode ser comparado a uma stored procedure
    35. 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. 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. 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. 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. 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. 40. Outros recursos bacanas Suporte a índices;
    41. 41. Outros recursos bacanas Suporte a índices; GridFS;
    42. 42. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados;
    43. 43. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade;
    44. 44. Outros recursos bacanas Suporte a índices; GridFS; Replicação de dados; Alta disponibilidade; É software livre, mas também oferece suporte comercial!
    45. 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. 46. Como Instalar?Considerando o Django e Pymongo já instalados:
    47. 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. 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. 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. 50. Alterando settings.pyDATABASES = { default: { ENGINE: django_mongodb_engine, NAME: testedjango, }}
    51. 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. 52. Algo não está funcionando!
    53. 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. 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. 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. 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. 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
    58. 58. Alteração no settings.py
    59. 59. Alteração no settings.py SITE_ID = u4e84aa608a1505054c00001d
    60. 60. Agora funciona! :-)
    61. 61. models.pyfrom django.db import modelsfrom django.contrib import adminclass 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.emailadmin.site.register(Usuario)
    62. 62. mongo shell> db.inicio_usuario.find({}){ "_id" : ObjectId("4e85f8cc8a15050150000000"), "email" :"anderson@gonow.com.br", "descr" : "teste", "nome" :"Christiano" }
    63. 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. 64. Outras funcionalidades - O módulo também implementa: - GridFS; - Map/Reduce; - Cache; - Agregadores; - Operações mais baixo nível
    65. 65. Perguntas (ainda) sem respostas: Qual performance? É estável? É seguro?
    66. 66. Referências http://django-mongodb.org/ http://django-mongodb.org/topics/gridfs.html http://leve.me/onGqId
    67. 67. MUG-SP - MongoDB User Group de São Paulo - Primeiro encontro: 20 de Outubro - Contará com a presença de Mathias Stern
    68. 68. http://www.meetup.com/SP-MongoDB/
    69. 69. Obrigado! :-) Christiano Anderson anderson@gonow.com.br Twitter: @dump Blog: http://christiano.me
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×