SlideShare uma empresa Scribd logo
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

PPTX
Apresentação - MongoDB
PPTX
Apresentação MongoDB
PPTX
Introduction to NoSQL
PDF
Migrating from RDBMS to MongoDB
PDF
Introduction to MongoDB
PDF
An introduction to MongoDB
PPT
Migrating to MongoDB: Best Practices
PDF
An introduction to MongoDB
Apresentação - MongoDB
Apresentação MongoDB
Introduction to NoSQL
Migrating from RDBMS to MongoDB
Introduction to MongoDB
An introduction to MongoDB
Migrating to MongoDB: Best Practices
An introduction to MongoDB

Mais procurados (20)

PPTX
MongoDB 101
PPTX
Mongo db intro.pptx
PDF
Common MongoDB Use Cases
PDF
MongoDB Fundamentals
PPTX
NoSQL databases - An introduction
PPTX
Mongodb basics and architecture
PPTX
MongoDB
ODP
Introduction to MongoDB
PPTX
Using Kafka to scale database replication
PDF
AWS 기반 데이터 레이크(Datalake) 구축 및 분석 - 김민성 (AWS 솔루션즈아키텍트) : 8월 온라인 세미나
PPTX
Introducing MongoDB Atlas
PDF
Mongo db dhruba
PDF
Construisez votre première application MongoDB
PDF
[IBM 김상훈] 오브젝트스토리지 | 늘어만 가는 데이터 저장문제로 골 아프신가요? (자료를 다운로드하시면 고화질로 보실 수 있습니다.)
PPTX
PPTX
Introduction to MongoDB
PDF
EMR 플랫폼 기반의 Spark 워크로드 실행 최적화 방안 - 정세웅, AWS 솔루션즈 아키텍트:: AWS Summit Online Ko...
PDF
Aerospike Hybrid Memory Architecture
PPTX
UNIT I Introduction to NoSQL.pptx
MongoDB 101
Mongo db intro.pptx
Common MongoDB Use Cases
MongoDB Fundamentals
NoSQL databases - An introduction
Mongodb basics and architecture
MongoDB
Introduction to MongoDB
Using Kafka to scale database replication
AWS 기반 데이터 레이크(Datalake) 구축 및 분석 - 김민성 (AWS 솔루션즈아키텍트) : 8월 온라인 세미나
Introducing MongoDB Atlas
Mongo db dhruba
Construisez votre première application MongoDB
[IBM 김상훈] 오브젝트스토리지 | 늘어만 가는 데이터 저장문제로 골 아프신가요? (자료를 다운로드하시면 고화질로 보실 수 있습니다.)
Introduction to MongoDB
EMR 플랫폼 기반의 Spark 워크로드 실행 최적화 방안 - 정세웅, AWS 솔루션즈 아키텍트:: AWS Summit Online Ko...
Aerospike Hybrid Memory Architecture
UNIT I Introduction to NoSQL.pptx
Anúncio

Semelhante a Mongo db slides (20)

PDF
Mongodb workshop cinlug
PDF
Mini-Curso de MongoDB
PDF
Curso mongo db com php
PDF
Mongo DB
PPTX
Mongo db
PPTX
Workshop MongoDB
PPT
Desenvolvendo soluções com banco de dados não relacional - MongoDB
PPTX
MongoDB: Uma forma diferente de pensar no desenvolvimento
KEY
Django e MongoDB - Python Brasil 7
PDF
Introdução ao MongoDB em 30 slides
PDF
Introdução ao no sql e mongodb
PPTX
MongoDB Aggregation Framework
PPT
Mongo Db - PHP Day Workshop
PPT
Palestra MongoDB
ODP
MongoDB - Tudo o que você precisa saber - FISL16
KEY
Python e MongoDB - Ensol
KEY
MongoDB na Campus Party
PDF
mongodb.pdf
PDF
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
PPTX
Desenvolvimento de aplicações PHP com MongoDB
Mongodb workshop cinlug
Mini-Curso de MongoDB
Curso mongo db com php
Mongo DB
Mongo db
Workshop MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
MongoDB: Uma forma diferente de pensar no desenvolvimento
Django e MongoDB - Python Brasil 7
Introdução ao MongoDB em 30 slides
Introdução ao no sql e mongodb
MongoDB Aggregation Framework
Mongo Db - PHP Day Workshop
Palestra MongoDB
MongoDB - Tudo o que você precisa saber - FISL16
Python e MongoDB - Ensol
MongoDB na Campus Party
mongodb.pdf
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
Desenvolvimento de aplicações PHP com MongoDB
Anúncio

Último (19)

PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula04-Academia Heri- Tecnologia Geral 2025
Apple Pippin Uma breve introdução. - David Glotz
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e liquidação no SAP Transportation Management, TM130 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Processos na gestão de transportes, TM100 Col18
Aula 18 - Manipulacao De Arquivos python
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

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