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

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
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
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPFelipe Weckx
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosYuri Adams
 

Mais procurados (20)

#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
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
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Mongo db
Mongo dbMongo db
Mongo db
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a Documentos
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 

Destaque

MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dadosJordan Kobellarz
 
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
 
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
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosFabíola Fernandes
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPAricelio Souza
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaGlaucio Scheibel
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 

Destaque (17)

MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dados
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop 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
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
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
 
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
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
NOSQL
NOSQLNOSQL
NOSQL
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 

Semelhante a MongoDB - Apresentação

Semelhante a MongoDB - Apresentação (20)

MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Mongopesl
MongopeslMongopesl
Mongopesl
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Mongo
MongoMongo
Mongo
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
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
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
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
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Fluent NHibernate - Baby Steps
Fluent NHibernate - Baby StepsFluent NHibernate - Baby Steps
Fluent NHibernate - Baby Steps
 
SQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataSQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigData
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Mean Stack
Mean StackMean Stack
Mean Stack
 

MongoDB - Apresentação

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

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n