SlideShare uma empresa Scribd logo
1 de 34
Apresentando

Neo@Corp.Terra.com.br
Rodrigo Nossal @nossal
Rudá Moura @__ruda__
MongoDB não siginifica o que
  vocês estão pensando!
    Momento politicamente correto
3
MongoDB vem de humongous

    humongous = grande, enorme
NoSQL? É Só Hype Ou É pra Valer?

• NoSQL (Not Only SQL) é o termo genérico de BD que não
  segue o modelo relacional de dados;
• A idéia não é nova, o CDS/ISIS de 1985 já era utilizado para
  guardar documentos em biblioteca de forma não relacional e
  não normalizada;
• Ganhou notoriedade no meio dos anos 00 para soluções que
  “web scales” e com o BigTable do Google;
• O objetivo é armazenar informação na forma de elementos
  chave/valor, não-normalizado e não relacional;
• Hype? Pode ser, mas "está ai no mercado" e muitos produtos
  estão sendo feitos com essa tecnologia;
• MongoDB não é o único NoSQL de sucesso: CouchDB,
  Cassandra, BigTable, Riak, MemBase, Redis, Hbase.
Terminologia


   SQL (RDBMS)   MongoDB
   • Database    • Database
   • Table       • Collection
   • Row(s)      • (JSON) Documents
   • Query       • Query
   • Index       • Index
   • Partition   • Shard
Principais Características

• Banco de dados orientados à documentos;
• Escalável e de alto-desempenho;
• Código aberto - desenvolvido e mantido pela 10gen;
• Utiliza documentos JSON para o modelo de dados;
• Consultas são baseadas em documentos;
• Sharding = particionamento em múltiplos servidores;
• Suporta internamente MapReduce;
• Suporta operações atômicas em documentos simples;
• Desenvolvido em C++;
• Possui drivers para várias linguagens: Python, Java, PHP,
  Erlang, etc.;
• Última versão estável: 1.8.1 (06 de Abril de 2011).
Por Que JSON?

• JSON (JavaScript Object Notation) é um formato leve de
  troca de dados, é um subconjunto pequeno de Javascript;
• É independente de linguagem de programção, composto por
  pares de chave e valor;
• As consultas são feitas por JSON e o retorno é sempre um
  documento JSON, ou uma lista de documentos JSON;
• JSON é muito utilizado para o intercâmbio de informações na
  web (adios XML!);
• A linguagem de comandos e funções internas do MongoDB é
  JavaScript.
Documento JSON

{ "_id" : ObjectId("4d3f3574c405441a31000000"),
  "config" : { "max_range" : 10,
               "min_range" : 0,
               "type" : "range" },
  "name" : "Linguagens",
  "description" : "Ranking de
   linguagens de programação"
}
Armazenamento

• Os documentos JSON são internamente guardados como
  BJSON (formato binário) (< 16MB);
• A espeficação GridFS permite guardar documentos grandes
  (> 16MB) de forma transparente;
• O MongoDB usa um mecanismo de armazenamento em
  memória mapeada (Memory Mapped Storage Engine);
• O gerenciador de memória virtual do S.O. fica responsável
  pelo cache de dados do MongoDB.
Índices

• Todo documento de uma collection contém uma chave padrão
  "_id" indexada;
• O valor da chave “_id”: ObjectId("4d3727c33612f747d7000000");
• Qualquer chave do documento pode ser indexada
  (exceto em capped collections).


 > db.votes.ensureIndex({'obj.name': 1})
Segurança

• Recomenda-se o uso do MongoDB em ambientes confiáveis
  (rede privada e firewall);
• Pode-se configurar autenticação por usuário e senha;
• Para adicionar um usuário à uma database:
  > db.addUser("theadmin", "anadminpassword", true)
• Para autenticar:
  > db.auth("theadmin", "anadminpassword")
MapReduce

•   MongoDB suporta MapReduce;
•   A operação Map pode servir para modificar ou filtrar valores;
•   A operação Reduce para consolidar um conjunto de valores;
•   As operações de Map e Reduce são executadas de maneira
    distribuídas entre os shards do cluster.
                         Map
                         f(x) = {x*2}
             [1, 2, 3]                  [2, 4, 6]

                                                    Reduce
                                                    f(x, y) = {x+y}

                                        [12]
Durabilidade

• Operações que alteram os documentos são realizadas de
  maneira direta no BD, portanto não existem transações;
• Não existem logs de transação, que garantam a durabilidade
  dos dados como fazem os RDBMS;
• A durabilidade deve ser garantida pela replicação dos dados
  em diferentes servidores;
• Desde a versão 1.7.5 é possível contar com um journaling de
  dados, o que deixa o banco mais robusto.
GridFS

• Armazenamento de arquivos;
• Divide os arquivos em chunks de 256kb;
• Armazena os metadados na collection fs.files, e as partes
  do arquivo na collection fs.chunks;
• O MongoDB faz streaming do arquivo para a aplicação;
• Facilidade para fazer seek em arquivos.
Capped Collections

• Collections com tamanho fixo;
• Funciona como uma fila FIFO: primeiro a entrar, primeiro a
  sair;

> db.createCollection("last_comments", {capped:true, size:
100000})
> db.last_votes.validate()

OBS.: size em bytes
Tailable Cursors

• Igual a um “tail -f” do Unix, numa Capped collection.

 >>> finder = db.last_comments.find(tailable=True)
 >>> while True:
 >>> time.sleep(1)
 >>> for doc in finder:
 >>>      print doc
Sharding

• Particionamento horizontal;
• Database sharding: Distribui as collections entre os shards;
• Collection sharding: Distribui os documentos de mesma
  chave entre os Shards;

Collection cep:
 {uf: 'RS',
  local:'Posto Alegre',
  logr:'Rua General Câmara',
  cep: '90010-230'}

>db.runCommand({ shardcollection : "cep", key : "uf" })
Sharding
Limitações

• Sistemas de 32 bits existe a limitação de 2GB no tamanho do
  BD (limite de memória por processo, 64 bits é maior);
• 4mb por documento JSON, mas pode ser extendido com uso
  de GridFS;
• O número máximo de conexões que o MongoDB aceita,
  depende do limite de arquivos abertos do sistema operacional
  (ulimit -n);
• Não é muito performático quando se necessita fazer "joins"
  entre documentos;
• Não existe um esquema de locking tradicional e transações
  complexas.
Instalação

CentOS5
• http://www.mongodb.org/display/DOCS/CentOS+and+Fedora
  +Packages
• Adicionar os repositórios da 10gen para o MongoDB
  o Estão no link acima
• Com a ajuda do yum:
  $ yum install mongo-stable mongo-stable-server
Teste da instalação

$ grep dbpath /etc/mongod.conf
dbpath=/var/lib/mongo

$ sudo /etc/init.d/mongod start
$ sudo /etc/init.d/mongod status
mongod (pid 4745) is running...

$ mongo
MongoDB shell version: 1.6.5
connecting to: test
> show dbs
admin
local
test
Utilizando o MongoDB

> use tiobe;
switched to db tiobe

> var py = { language: "Python", position: 1, delta: +3 };
> printjson(py);
{ "language" : "Python", "position" : 1, "delta" : 3 }

> db.tiobe.save(py);

> db.tiobe.find();
{ "_id" : ObjectId("4d63c372bbd24861417f9a19"), "language" :
"Python", "position" : 1, "delta" : 3 }
Utilizando o MongoDB

> db.tiobe.save({language: "C++", position: 3, delta: 1});
> db.tiobe.save({language: "C", position: 2, delta: 0});
> db.tiobe.save({language: "Java", position: 1, delta: 0});

> db.tiobe.find();
{ "_id" : ObjectId("4d63c372bbd24861417f9a19"), "language" :
"Python", "position" : 1, "delta" : 3 }
{ "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"), "language" :
"C++", "position" : 3, "delta" : 1 }
{ "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" :
"C", "position" : 2, "delta" : 0 }
{ "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" :
"Java", "position" : 1, "delta" : 0 }
Utilizando o MongoDB

> db.tiobe.find()[0];
{
     "_id" : ObjectId("4d63c372bbd24861417f9a19"),
     "language" : "Python",
     "position" : 1,
     "delta" : 3
}

> var cursor = db.tiobe.find();
> printjson(cursor[3]);
{    "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"),
     "language" : "Java",
     "position" : 1,
     "delta" : 0 }
Utilizando o MongoDB

> var cursor = db.tiobe.find().limit(2);
> cursor.forEach(printjson);
{    "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"),
     "delta" : 1,
     "language" : "C++",
     "position" : 3,
     "year" : 2011 }
{    "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"),
     "delta" : 0,
     "language" : "C",
     "position" : 2,
     "year" : 2011 }
Utilizando o MongoDB

> db.tiobe.update({language: "Python"}, {position: 4});

> db.tiobe.find({delta:0});
{ "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" :
"C", "position" : 2, "delta" : 0 }
{ "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" :
"Java", "position" : 1, "delta" : 0 }

> db.tiobe.find({delta:0}, {language:true});
{ "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" :
"C" }
{ "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" :
"Java" }
Utilizando o MongoDB

> db.tiobe.find({position: {$lt: 4}});
{ "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"), "language" :
"C++", "position" : 3, "delta" : 1 }
{ "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" :
"C", "position" : 2, "delta" : 0 }
{ "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" :
"Java", "position" : 1, "delta" : 0 }

> db.tiobe.update({}, {$set: {year: 2011}}, false, true);
{ ... }

> db.tiobe.remove({_id: ObjectId
('4d63c372bbd24861417f9a19')});
> db.tiobe.remove({}); TUDO!
MongoDB Drivers


• Drivers são extensões para uso emlinguagens de
  programação;
• Suporte as linguagens de programação:
  o C/C++
  o Python
  o Javascript
  o PHP
  o + Erlang, Java, Perl, Scala

• Python: PyMongo.
PyMongo

 • É o driver recomendado para uso do MongoDB com Python;
 • Instalação:
   o sudo pip install pymongo

 • Uso:
>>> import pymongo
>>> conn = pymongo.Conection() # localhost
>>> db = conn.tiobe
>>> print db.tiobe.find_one({'language': 'C++'})
{u'position': 3.0, u'_id': ObjectId('4d63c3d1bbd24861417f9a1a'),
u'year': 2011.0, u'language': u'C++', u'delta': 1.0}
>>> cursor = db.tiobe.find()
>>> for elem in cursor: print elem
• {u'_id': ObjectId('4d63c372bbd24861417f9a19'), u'year': 2011.0}
• {u'position': 3.0, u'_id': ObjectId('4d63c3d1bbd24861417f9a1a'), u'year': 2011.0,
  u'language': u'C++', u'delta': 1.0}
• {u'position': 2.0, u'_id': ObjectId('4d63c3e2bbd24861417f9a1b'), u'year': 2011.0,
  u'language': u'C', u'delta': 0.0}
• {u'position': 1.0, u'_id': ObjectId('4d63c3fbbbd24861417f9a1c'), u'year': 2011.0,
  u'language': u'Java', u'delta': 0.0}
• {u'position': 5.0, u'_id': ObjectId('4d63cba91d00876348d47b1e'), u'year': 2011.0,
  u'language': u'PHP', u'delta': -2.0}
>>> cursor = db.tiobe.find({'delta': 0})
>>> print cursor.count()
2


Em resumo, total suporte do MongoDB com Python!
Persistência de Objetos

• ORM ou Object-Relational Mapping (Mapeamento Objeto-
  relacional) é o mecanismo para mapear modelos de objetos/
  classes em armazenamento de banco;
• É a maneira de construir persistência de objetos em termos
  de armazenamento em banco de dados;
• Podemos usar o MongoDB para mapear objetos de
  linguagem de programação em BD;
• Naturalmente não faz muito sentido chamar de ORM, porque
  bem... MongoDB não é relacional!
MongoEngine

• Mapeamento de objetos no modelo de documentos do
  MongoDB;
• Muito parecido com a modelagem de objetos do Django.
• Requer pymongo;
• Instalação:
     $ sudo pip install mongoengine
• Uso:
   o Ver a apresentação do demo "microblog".
Referências

• http://www.mongodb.org/
• http://api.mongodb.org/python/
• http://mongoengine.org/

Mais conteúdo relacionado

Mais procurados

Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL DatabasesDerek Stainer
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebArthur Emanuel
 
Redes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesRedes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesLeonardo Bruno
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5José Wagner Bungart
 
[EPPG] Oracle to PostgreSQL, Challenges to Opportunity
[EPPG] Oracle to PostgreSQL, Challenges to Opportunity[EPPG] Oracle to PostgreSQL, Challenges to Opportunity
[EPPG] Oracle to PostgreSQL, Challenges to OpportunityEqunix Business Solutions
 
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
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka Edureka!
 
Seminar Presentation Hadoop
Seminar Presentation HadoopSeminar Presentation Hadoop
Seminar Presentation HadoopVarun Narang
 
Modelo de camadas TCP/IP
Modelo de camadas TCP/IPModelo de camadas TCP/IP
Modelo de camadas TCP/IPEvandro Júnior
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBMongoDB
 
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...Edureka!
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
MongoDB company and case studies - john hong
MongoDB company and case studies - john hong MongoDB company and case studies - john hong
MongoDB company and case studies - john hong Ha-Yang(White) Moon
 
Modelo OSI - Camada Física
Modelo OSI - Camada FísicaModelo OSI - Camada Física
Modelo OSI - Camada FísicaRicardo Montania
 
Introducing workload analysis
Introducing workload analysisIntroducing workload analysis
Introducing workload analysisMariaDB plc
 

Mais procurados (20)

Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL Databases
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos Web
 
Redes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesRedes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redes
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5
 
[EPPG] Oracle to PostgreSQL, Challenges to Opportunity
[EPPG] Oracle to PostgreSQL, Challenges to Opportunity[EPPG] Oracle to PostgreSQL, Challenges to Opportunity
[EPPG] Oracle to PostgreSQL, Challenges to Opportunity
 
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
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
 
Seminar Presentation Hadoop
Seminar Presentation HadoopSeminar Presentation Hadoop
Seminar Presentation Hadoop
 
Modelo de camadas TCP/IP
Modelo de camadas TCP/IPModelo de camadas TCP/IP
Modelo de camadas TCP/IP
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
TCP/IP
TCP/IPTCP/IP
TCP/IP
 
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...
What is Hadoop | Introduction to Hadoop | Hadoop Tutorial | Hadoop Training |...
 
Migrating Oracle to PostgreSQL
Migrating Oracle to PostgreSQLMigrating Oracle to PostgreSQL
Migrating Oracle to PostgreSQL
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
MongoDB company and case studies - john hong
MongoDB company and case studies - john hong MongoDB company and case studies - john hong
MongoDB company and case studies - john hong
 
Modelo OSI - Camada Física
Modelo OSI - Camada FísicaModelo OSI - Camada Física
Modelo OSI - Camada Física
 
MongoDB
MongoDBMongoDB
MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Introducing workload analysis
Introducing workload analysisIntroducing workload analysis
Introducing workload analysis
 
Hadoop2.2
Hadoop2.2Hadoop2.2
Hadoop2.2
 

Semelhante a Mongo db slides

Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
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
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e MongodbAline Ferreira
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
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
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 

Semelhante a Mongo db slides (20)

MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
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 + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongopesl
MongopeslMongopesl
Mongopesl
 
Mongo
MongoMongo
Mongo
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Mongo db
Mongo dbMongo db
Mongo db
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
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
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 

Mongo db slides

  • 2. MongoDB não siginifica o que vocês estão pensando! Momento politicamente correto
  • 3. 3
  • 4. MongoDB vem de humongous humongous = grande, enorme
  • 5. NoSQL? É Só Hype Ou É pra Valer? • NoSQL (Not Only SQL) é o termo genérico de BD que não segue o modelo relacional de dados; • A idéia não é nova, o CDS/ISIS de 1985 já era utilizado para guardar documentos em biblioteca de forma não relacional e não normalizada; • Ganhou notoriedade no meio dos anos 00 para soluções que “web scales” e com o BigTable do Google; • O objetivo é armazenar informação na forma de elementos chave/valor, não-normalizado e não relacional; • Hype? Pode ser, mas "está ai no mercado" e muitos produtos estão sendo feitos com essa tecnologia; • MongoDB não é o único NoSQL de sucesso: CouchDB, Cassandra, BigTable, Riak, MemBase, Redis, Hbase.
  • 6. Terminologia SQL (RDBMS) MongoDB • Database • Database • Table • Collection • Row(s) • (JSON) Documents • Query • Query • Index • Index • Partition • Shard
  • 7. Principais Características • Banco de dados orientados à documentos; • Escalável e de alto-desempenho; • Código aberto - desenvolvido e mantido pela 10gen; • Utiliza documentos JSON para o modelo de dados; • Consultas são baseadas em documentos; • Sharding = particionamento em múltiplos servidores; • Suporta internamente MapReduce; • Suporta operações atômicas em documentos simples; • Desenvolvido em C++; • Possui drivers para várias linguagens: Python, Java, PHP, Erlang, etc.; • Última versão estável: 1.8.1 (06 de Abril de 2011).
  • 8. Por Que JSON? • JSON (JavaScript Object Notation) é um formato leve de troca de dados, é um subconjunto pequeno de Javascript; • É independente de linguagem de programção, composto por pares de chave e valor; • As consultas são feitas por JSON e o retorno é sempre um documento JSON, ou uma lista de documentos JSON; • JSON é muito utilizado para o intercâmbio de informações na web (adios XML!); • A linguagem de comandos e funções internas do MongoDB é JavaScript.
  • 9. Documento JSON { "_id" : ObjectId("4d3f3574c405441a31000000"), "config" : { "max_range" : 10, "min_range" : 0, "type" : "range" }, "name" : "Linguagens", "description" : "Ranking de linguagens de programação" }
  • 10. Armazenamento • Os documentos JSON são internamente guardados como BJSON (formato binário) (< 16MB); • A espeficação GridFS permite guardar documentos grandes (> 16MB) de forma transparente; • O MongoDB usa um mecanismo de armazenamento em memória mapeada (Memory Mapped Storage Engine); • O gerenciador de memória virtual do S.O. fica responsável pelo cache de dados do MongoDB.
  • 11. Índices • Todo documento de uma collection contém uma chave padrão "_id" indexada; • O valor da chave “_id”: ObjectId("4d3727c33612f747d7000000"); • Qualquer chave do documento pode ser indexada (exceto em capped collections). > db.votes.ensureIndex({'obj.name': 1})
  • 12. Segurança • Recomenda-se o uso do MongoDB em ambientes confiáveis (rede privada e firewall); • Pode-se configurar autenticação por usuário e senha; • Para adicionar um usuário à uma database: > db.addUser("theadmin", "anadminpassword", true) • Para autenticar: > db.auth("theadmin", "anadminpassword")
  • 13. MapReduce • MongoDB suporta MapReduce; • A operação Map pode servir para modificar ou filtrar valores; • A operação Reduce para consolidar um conjunto de valores; • As operações de Map e Reduce são executadas de maneira distribuídas entre os shards do cluster. Map f(x) = {x*2} [1, 2, 3] [2, 4, 6] Reduce f(x, y) = {x+y} [12]
  • 14. Durabilidade • Operações que alteram os documentos são realizadas de maneira direta no BD, portanto não existem transações; • Não existem logs de transação, que garantam a durabilidade dos dados como fazem os RDBMS; • A durabilidade deve ser garantida pela replicação dos dados em diferentes servidores; • Desde a versão 1.7.5 é possível contar com um journaling de dados, o que deixa o banco mais robusto.
  • 15. GridFS • Armazenamento de arquivos; • Divide os arquivos em chunks de 256kb; • Armazena os metadados na collection fs.files, e as partes do arquivo na collection fs.chunks; • O MongoDB faz streaming do arquivo para a aplicação; • Facilidade para fazer seek em arquivos.
  • 16. Capped Collections • Collections com tamanho fixo; • Funciona como uma fila FIFO: primeiro a entrar, primeiro a sair; > db.createCollection("last_comments", {capped:true, size: 100000}) > db.last_votes.validate() OBS.: size em bytes
  • 17. Tailable Cursors • Igual a um “tail -f” do Unix, numa Capped collection. >>> finder = db.last_comments.find(tailable=True) >>> while True: >>> time.sleep(1) >>> for doc in finder: >>> print doc
  • 18. Sharding • Particionamento horizontal; • Database sharding: Distribui as collections entre os shards; • Collection sharding: Distribui os documentos de mesma chave entre os Shards; Collection cep: {uf: 'RS', local:'Posto Alegre', logr:'Rua General Câmara', cep: '90010-230'} >db.runCommand({ shardcollection : "cep", key : "uf" })
  • 20. Limitações • Sistemas de 32 bits existe a limitação de 2GB no tamanho do BD (limite de memória por processo, 64 bits é maior); • 4mb por documento JSON, mas pode ser extendido com uso de GridFS; • O número máximo de conexões que o MongoDB aceita, depende do limite de arquivos abertos do sistema operacional (ulimit -n); • Não é muito performático quando se necessita fazer "joins" entre documentos; • Não existe um esquema de locking tradicional e transações complexas.
  • 21. Instalação CentOS5 • http://www.mongodb.org/display/DOCS/CentOS+and+Fedora +Packages • Adicionar os repositórios da 10gen para o MongoDB o Estão no link acima • Com a ajuda do yum: $ yum install mongo-stable mongo-stable-server
  • 22. Teste da instalação $ grep dbpath /etc/mongod.conf dbpath=/var/lib/mongo $ sudo /etc/init.d/mongod start $ sudo /etc/init.d/mongod status mongod (pid 4745) is running... $ mongo MongoDB shell version: 1.6.5 connecting to: test > show dbs admin local test
  • 23. Utilizando o MongoDB > use tiobe; switched to db tiobe > var py = { language: "Python", position: 1, delta: +3 }; > printjson(py); { "language" : "Python", "position" : 1, "delta" : 3 } > db.tiobe.save(py); > db.tiobe.find(); { "_id" : ObjectId("4d63c372bbd24861417f9a19"), "language" : "Python", "position" : 1, "delta" : 3 }
  • 24. Utilizando o MongoDB > db.tiobe.save({language: "C++", position: 3, delta: 1}); > db.tiobe.save({language: "C", position: 2, delta: 0}); > db.tiobe.save({language: "Java", position: 1, delta: 0}); > db.tiobe.find(); { "_id" : ObjectId("4d63c372bbd24861417f9a19"), "language" : "Python", "position" : 1, "delta" : 3 } { "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"), "language" : "C++", "position" : 3, "delta" : 1 } { "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" : "C", "position" : 2, "delta" : 0 } { "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" : "Java", "position" : 1, "delta" : 0 }
  • 25. Utilizando o MongoDB > db.tiobe.find()[0]; { "_id" : ObjectId("4d63c372bbd24861417f9a19"), "language" : "Python", "position" : 1, "delta" : 3 } > var cursor = db.tiobe.find(); > printjson(cursor[3]); { "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" : "Java", "position" : 1, "delta" : 0 }
  • 26. Utilizando o MongoDB > var cursor = db.tiobe.find().limit(2); > cursor.forEach(printjson); { "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"), "delta" : 1, "language" : "C++", "position" : 3, "year" : 2011 } { "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "delta" : 0, "language" : "C", "position" : 2, "year" : 2011 }
  • 27. Utilizando o MongoDB > db.tiobe.update({language: "Python"}, {position: 4}); > db.tiobe.find({delta:0}); { "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" : "C", "position" : 2, "delta" : 0 } { "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" : "Java", "position" : 1, "delta" : 0 } > db.tiobe.find({delta:0}, {language:true}); { "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" : "C" } { "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" : "Java" }
  • 28. Utilizando o MongoDB > db.tiobe.find({position: {$lt: 4}}); { "_id" : ObjectId("4d63c3d1bbd24861417f9a1a"), "language" : "C++", "position" : 3, "delta" : 1 } { "_id" : ObjectId("4d63c3e2bbd24861417f9a1b"), "language" : "C", "position" : 2, "delta" : 0 } { "_id" : ObjectId("4d63c3fbbbd24861417f9a1c"), "language" : "Java", "position" : 1, "delta" : 0 } > db.tiobe.update({}, {$set: {year: 2011}}, false, true); { ... } > db.tiobe.remove({_id: ObjectId ('4d63c372bbd24861417f9a19')}); > db.tiobe.remove({}); TUDO!
  • 29. MongoDB Drivers • Drivers são extensões para uso emlinguagens de programação; • Suporte as linguagens de programação: o C/C++ o Python o Javascript o PHP o + Erlang, Java, Perl, Scala • Python: PyMongo.
  • 30. PyMongo • É o driver recomendado para uso do MongoDB com Python; • Instalação: o sudo pip install pymongo • Uso: >>> import pymongo >>> conn = pymongo.Conection() # localhost >>> db = conn.tiobe >>> print db.tiobe.find_one({'language': 'C++'}) {u'position': 3.0, u'_id': ObjectId('4d63c3d1bbd24861417f9a1a'), u'year': 2011.0, u'language': u'C++', u'delta': 1.0}
  • 31. >>> cursor = db.tiobe.find() >>> for elem in cursor: print elem • {u'_id': ObjectId('4d63c372bbd24861417f9a19'), u'year': 2011.0} • {u'position': 3.0, u'_id': ObjectId('4d63c3d1bbd24861417f9a1a'), u'year': 2011.0, u'language': u'C++', u'delta': 1.0} • {u'position': 2.0, u'_id': ObjectId('4d63c3e2bbd24861417f9a1b'), u'year': 2011.0, u'language': u'C', u'delta': 0.0} • {u'position': 1.0, u'_id': ObjectId('4d63c3fbbbd24861417f9a1c'), u'year': 2011.0, u'language': u'Java', u'delta': 0.0} • {u'position': 5.0, u'_id': ObjectId('4d63cba91d00876348d47b1e'), u'year': 2011.0, u'language': u'PHP', u'delta': -2.0} >>> cursor = db.tiobe.find({'delta': 0}) >>> print cursor.count() 2 Em resumo, total suporte do MongoDB com Python!
  • 32. Persistência de Objetos • ORM ou Object-Relational Mapping (Mapeamento Objeto- relacional) é o mecanismo para mapear modelos de objetos/ classes em armazenamento de banco; • É a maneira de construir persistência de objetos em termos de armazenamento em banco de dados; • Podemos usar o MongoDB para mapear objetos de linguagem de programação em BD; • Naturalmente não faz muito sentido chamar de ORM, porque bem... MongoDB não é relacional!
  • 33. MongoEngine • Mapeamento de objetos no modelo de documentos do MongoDB; • Muito parecido com a modelagem de objetos do Django. • Requer pymongo; • Instalação: $ sudo pip install mongoengine • Uso: o Ver a apresentação do demo "microblog".