MongoDB na Campus Party

3,246 views

Published on

Palestra apresentada no Campus Party Brasil 2012 sobre banco de dados não relacional, foco em MongoDB.

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,246
On SlideShare
0
From Embeds
0
Number of Embeds
922
Actions
Shares
0
Downloads
90
Comments
0
Likes
6
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
  • MongoDB na Campus Party

    1. 1. Desenvolvendo soluções com banco de dados não relacional - MongoDB Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br 1
    2. 2. Sobre o Autor• Trabalha com software livre desde 1995;• Atualmente gerente de projetos da Gonow;• Ex-desenvolvedor do projeto GNU (FSF);• Trabalha com Python desde 2000;• Membro da equipe de tradução do MongoDB;• Evangelista Python, Django e NoSQL; 2
    3. 3. O que é MongoDB?• Banco de dados não relacional;• Orientado a documentos;• Alta Performance;• Software Livre;• Schema Free; 3
    4. 4. “MongoDB preenche a lacuna entre modelagem chave/ valor(que são bem rápidas e escaláveis) e os tradicionais banco de dados relacionais (que oferecem várias funcionalidades)” 4
    5. 5. Quem utiliza?• Foursquare;• Github;• SourceForge;• Disqus;• bit.ly;• Globo.com;• Entre outros... 5
    6. 6. Bom para... 6
    7. 7. Bom para...web 2.0 6
    8. 8. Bom para...web 2.0 Migrations 6
    9. 9. Bom para...web 2.0 Migrations Flexibilidade 6
    10. 10. Bom para...web 2.0 Migrations Flexibilidade Cache 6
    11. 11. Não muito bom se você precisa de... 7
    12. 12. Não muito bom se você precisa de...Transações 7
    13. 13. Não muito bom se você precisa de...Transações Suporte completo a SQL 7
    14. 14. Linguagens de Programação• O MongoDB tem suporte nativo para as principais linguagens de programação:• C, C++, Erlang, Haskell, Java, JavaScript, Perl, PHP, Python, .NET, Ruby, Scala, Go Language, Node.js, Lisp, Lua, Smalltalk...• Relação completa em: http://www.mongodb.org/ display/DOCS/Drivers 8
    15. 15. Modelo de documento {‘nome’:‘Christiano’, ‘linguagem’:‘Python’, ‘nota’: 10} 9
    16. 16. Modelo de documento {‘nome’:‘Christiano’, ‘linguagem’:‘Python’, ‘nota’: 10} Sim, é praticamente um JSON.Muito fácil trabalhar com esse modelode dados na maioria das linguagens de programação. 9
    17. 17. MigrationsÉ possível mudar dinamicamente um documento 10
    18. 18. Migrations É possível mudar dinamicamente um documento{‘nome’:‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10} 10
    19. 19. Migrations É possível mudar dinamicamente um documento{‘nome’:‘Christiano’,‘linguagem’: ‘Python’,‘nota’: 10} 10
    20. 20. Migrations É possível mudar dinamicamente um documento {‘nome’:‘Christiano’,{‘nome’:‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’} 10
    21. 21. Migrations É possível mudar dinamicamente um documento {‘nome’:‘Christiano’,{‘nome’:‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’} 10
    22. 22. Migrations É possível mudar dinamicamente um documento {‘nome’:‘Christiano’,{‘nome’:‘Christiano’, ‘linguagem’: ‘Python’,‘linguagem’: ‘Python’, ‘nota’: 10,‘nota’: 10} ‘local’: ‘Gonow’}Não é necessário alterar a modelagem para inserir novos elementos... 10
    23. 23. Agragadores 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”) 11
    24. 24. Map/Reduce 12
    25. 25. Map/ReduceÉ utilizado para criar funções especiais, pode ser comparado a uma stored procedure 12
    26. 26. Map/ReduceÉ utilizado para criar funções especiais, pode ser comparado a uma stored procedure Utiliza-se JavaScript para criar essas funções 12
    27. 27. 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 12
    28. 28. Map/ReduceExemplo 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; } 13
    29. 29. Comparando SQL e MongoDB 1 SQL MongoDBINSERT 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”}) 14
    30. 30. Comparando SQL e MongoDB 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}})}) < 33CREATE 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) 15
    31. 31. Índices• Possui suporte a índices para ganho de performance;• O conceito é similar a bancos relacionais, como MySQL;• Exemplo:• db.colecao.ensureIndex({nome:1})• Mais: http://www.mongodb.org/display/DOCS/ Indexes 16
    32. 32. GridFS• É possível armazenar arquivos binários no MongoDB;• Maior flexibilidade para tratar arquivos utilizando sua linguagem de programação favorita;• Maior controle de permissão de acesso;• Possível armazenar arquivos grandes no MongoDB;• Mais: http://www.mongodb.org/display/DOCS/ GridFS 17
    33. 33. Replica sets• Possível dividir a carga em vários servidores, replicando seu conteúdo via Replica Sets;• Possível crescer o ambiente de forma bastante orgânica;• Replica Set consiste em um ou mais node que replicam seus valores entre si. Server 1 Server 2 Somente leitura Leitura, Escrita Primário Cliente 18
    34. 34. Sharding• MongoDB escala horizontalmente via auto- sharding, particionando pedaço de dados entre servidores;• Pode adicionar novos nodes facilmente sem interromper o sistema;• Possível escalar centenas e milhares de servidores;• Não tem ponto único de falha;• Failover automático; 19
    35. 35. Python e MongoDB• Pymongo é o módulo que permite a conexão de qualquer aplicativo em Python ao MongoDB;• Instalado facilmente via pip ou easy_install:• pip install pymongo 20
    36. 36. Python e MongoDB Exemplo de conexão>>> from pymongo import Connection>>> con = Connection(“localhost”)>>> db = con[‘blog’] 21
    37. 37. Inserindo um documento>>> post = {title:My first post, …author:Christiano Anderson, …content: This is my firstparagraph, … tags: [mongodb,blog,example]}>>> posts = db[posts]>>> posts.insert(post)ObjectId(4cb662f508bf532b1b000000) 22
    38. 38. Inserindo vários documentos>>> other_posts = [{title:Second Post, author: ChristianoAnderson,tags:[test], content: Hey, my second Post},{title:Third Post, author:Luke Skywalker,tags:[naboo],content:Hey princess Leya}]>>> posts.insert(other_posts)[ObjectId(4cb6651b08bf532b97000000),ObjectId(4cb6651b08bf532b97000001)] 23
    39. 39. Realizando pesquisas>>> my_post = db.posts.find_one({}){ucontent: uThis is my first post at MongoDB, utitle: uMyfirst post, u_id: ObjectId(4cb662f508bf532b1b000000),utags: [umongodb, ublog, uexample], uauthor:uChristiano Anderson}>>> my_post = db.posts.find_one({ author: ChristianoAnderson}) 24
    40. 40. Operadores• Também é possível utilizar operadores como $ne, $lte, $gte,entre outros...• Mais: http://www.mongodb.org/display/DOCS/ Advanced+Queries 25
    41. 41. Consultando a base>>> all_posts = db.posts.find({})>>> for p in all_posts: ... print p[title] My first post Second Post Third Post 26
    42. 42. Consultando a base - passando parâmetros>>> p = db.posts.find_one({tags:naboo}){ucontent: uHey princess Leya, utitle: uThird Post,u_id: ObjectId(4cb6651b08bf532b97000001), utags:[unaboo], uauthor: uLuke Skywalker} 27
    43. 43. Trabalhando com Django• É possível desenvolver uma aplicação Django utilizando MongoDB como backend;• Não é uma solução nativa, mas funciona com bastante estabilidade;• O ponto negativo é ter de aplicar alguns patches no Django para tornar a solução viável e transparente; 28
    44. 44. Trabalhando com Django• Utiliza-se o módulo Django-mongodb, disponível em http://django-mongodb.org/• Depende dos pacotes: • Django-nonrel • Djangotoolbox 29
    45. 45. Trabalhando com DjangoAlteração no settings.py DATABASES = { default : { ENGINE : django_mongodb_engine, NAME : my_database } } 30
    46. 46. Hospedando MongoDB na nuvem• MongoGrid é um serviço oferecido pela NodeGrid, criada por brasileiros:• http://nodegrid.com/resources/mongogrid/ 31
    47. 47. Obrigado!!!Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br 32

    ×