SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
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
O que é MongoDB?



•   Banco de dados não relacional;

•   Orientado a documentos;

•   Alta Performance;

•   Software Livre;

•   Schema Free;



                          2
“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)”




                              3
Quem utiliza?

•   Foursquare;

•   Github;

•   SourceForge;

•   Disqus;

•   bit.ly;

•   Globo.com;

•   Entre outros...
                            4
Não muito bom se você precisa de...



Transações


      Suporte completo a SQL




                 5
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



                           6
Modelo de documento


        {‘nome’:‘Christiano’,
        ‘linguagem’:‘Python’,
        ‘nota’: 10}

   Sim, é praticamente um JSON.
Muito fácil trabalhar com esse modelo
de dados na maioria das linguagens de
             programação.


                  7
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...

                         8
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



                        9
Map/Reduce
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;
        }
                             10
Comparando SQL e MongoDB 1




             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”})


                                     11
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}})})
            < 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)


                                         12
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
                           13
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
                                   14
Python e MongoDB

       Exemplo de conexão


>>> from pymongo import Connection
>>> con = Connection(“localhost”)
>>> db = con[‘blog’]




                15
Inserindo um documento



>>> post = {'title':'My first post', …'author':
'Christiano Anderson', …'content': 'This is my first
paragraph', … 'tags': ['mongodb','blog','example']}

>>> posts = db['posts']

>>> posts.insert(post)
ObjectId('4cb662f508bf532b1b000000')




                          16
Inserindo vários documentos



>>> other_posts = [{'title':'Second Post', 'author': 'Christiano
Anderson','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')]




                                17
Realizando pesquisas


>>> my_post = db.posts.find_one({})

{u'content': u'This is my first post at MongoDB', u'title': u'My
first post', u'_id': ObjectId('4cb662f508bf532b1b000000'),
u'tags': [u'mongodb', u'blog', u'example'], u'author':
u'Christiano Anderson'}

>>> my_post = db.posts.find_one({ 'author': 'Christiano
Anderson'})




                                 18
Operadores




•   Também é possível utilizar operadores como $ne,
    $lte, $gte,entre outros...

•   Mais:
    http://www.mongodb.org/display/DOCS/Advanced+Querie




                         19
Consultando a base




>>> all_posts = db.posts.find({})

>>> for p in all_posts:
... print p['title']
My first post Second Post Third Post




                          20
Consultando a base - passando parâmetros




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

{u'content': u'Hey princess Leya', u'title': u'Third Post', u'_id':
ObjectId('4cb6651b08bf532b97000001'), u'tags': [u'naboo'],
u'author': u'Luke Skywalker'}




                                21
Hospedando MongoDB na nuvem




•   MongoGrid é um serviço oferecido pela
    NodeGrid, criada por brasileiros:

•   http://nodegrid.com/resources/mongogrid/




                         22
Obrigado!!!




Christiano Anderson
 Twitter: @dump
 Blog: http://christiano.me
 Email: anderson@gonow.com.br
 Site: http://www.gonow.com.br




            23

Mais conteúdo relacionado

Mais procurados

Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
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
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
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
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBDouglas Lira
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodbThiago Avelino
 
Migrate linux user password to postfix vmail database
Migrate linux user password to postfix vmail databaseMigrate linux user password to postfix vmail database
Migrate linux user password to postfix vmail databaseCarlos Eduardo
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPIgor Lopes
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Big Data Week São Paulo
 

Mais procurados (20)

Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
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
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
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
 
dnad12
dnad12dnad12
dnad12
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Aula Windows 1
Aula Windows 1Aula Windows 1
Aula Windows 1
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
Migrate linux user password to postfix vmail database
Migrate linux user password to postfix vmail databaseMigrate linux user password to postfix vmail database
Migrate linux user password to postfix vmail database
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHP
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mongopesl
MongopeslMongopesl
Mongopesl
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
 

Semelhante a Desenvolvendo soluções com banco de dados não relacional - MongoDB

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 - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Tchelinux
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
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
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBLuiz Duarte
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsNelson Glauber Leal
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBDesenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBWebSix
 

Semelhante a Desenvolvendo soluções com banco de dados não relacional - MongoDB (20)

MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
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 - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
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 nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBDesenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
 

Mais de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

Mais de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Desenvolvendo soluções com banco de dados não relacional - MongoDB

  • 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. O que é MongoDB? • Banco de dados não relacional; • Orientado a documentos; • Alta Performance; • Software Livre; • Schema Free; 2
  • 3. “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)” 3
  • 4. Quem utiliza? • Foursquare; • Github; • SourceForge; • Disqus; • bit.ly; • Globo.com; • Entre outros... 4
  • 5. Não muito bom se você precisa de... Transações Suporte completo a SQL 5
  • 6. 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 6
  • 7. Modelo de documento {‘nome’:‘Christiano’, ‘linguagem’:‘Python’, ‘nota’: 10} Sim, é praticamente um JSON. Muito fácil trabalhar com esse modelo de dados na maioria das linguagens de programação. 7
  • 8. 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... 8
  • 9. 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 9
  • 10. Map/Reduce 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; } 10
  • 11. Comparando SQL e MongoDB 1 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”}) 11
  • 12. 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}})}) < 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) 12
  • 13. 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 13
  • 14. 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 14
  • 15. Python e MongoDB Exemplo de conexão >>> from pymongo import Connection >>> con = Connection(“localhost”) >>> db = con[‘blog’] 15
  • 16. Inserindo um documento >>> post = {'title':'My first post', …'author': 'Christiano Anderson', …'content': 'This is my first paragraph', … 'tags': ['mongodb','blog','example']} >>> posts = db['posts'] >>> posts.insert(post) ObjectId('4cb662f508bf532b1b000000') 16
  • 17. Inserindo vários documentos >>> other_posts = [{'title':'Second Post', 'author': 'Christiano Anderson','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')] 17
  • 18. Realizando pesquisas >>> my_post = db.posts.find_one({}) {u'content': u'This is my first post at MongoDB', u'title': u'My first post', u'_id': ObjectId('4cb662f508bf532b1b000000'), u'tags': [u'mongodb', u'blog', u'example'], u'author': u'Christiano Anderson'} >>> my_post = db.posts.find_one({ 'author': 'Christiano Anderson'}) 18
  • 19. Operadores • Também é possível utilizar operadores como $ne, $lte, $gte,entre outros... • Mais: http://www.mongodb.org/display/DOCS/Advanced+Querie 19
  • 20. Consultando a base >>> all_posts = db.posts.find({}) >>> for p in all_posts: ... print p['title'] My first post Second Post Third Post 20
  • 21. Consultando a base - passando parâmetros >>> p = db.posts.find_one({'tags':'naboo'}) {u'content': u'Hey princess Leya', u'title': u'Third Post', u'_id': ObjectId('4cb6651b08bf532b97000001'), u'tags': [u'naboo'], u'author': u'Luke Skywalker'} 21
  • 22. Hospedando MongoDB na nuvem • MongoGrid é um serviço oferecido pela NodeGrid, criada por brasileiros: • http://nodegrid.com/resources/mongogrid/ 22
  • 23. Obrigado!!! Christiano Anderson Twitter: @dump Blog: http://christiano.me Email: anderson@gonow.com.br Site: http://www.gonow.com.br 23