SlideShare une entreprise Scribd logo
1  sur  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/

Contenu connexe

Tendances

HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance ImprovementBiju Nair
 
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike SteenbergenMeet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergendistributed matters
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQLEric Silva
 
Ingesting Data at Blazing Speed Using Apache Orc
Ingesting Data at Blazing Speed Using Apache OrcIngesting Data at Blazing Speed Using Apache Orc
Ingesting Data at Blazing Speed Using Apache OrcDataWorks Summit
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike ArchitecturePeter Milne
 
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...Edureka!
 
A Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerA Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerMongoDB
 
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
 
Apache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsApache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsAlluxio, Inc.
 
Introduction to Apache Sqoop
Introduction to Apache SqoopIntroduction to Apache Sqoop
Introduction to Apache SqoopAvkash Chauhan
 
Hadoop Backup and Disaster Recovery
Hadoop Backup and Disaster RecoveryHadoop Backup and Disaster Recovery
Hadoop Backup and Disaster RecoveryCloudera, Inc.
 
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DB
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DBDistributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DB
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DBYugabyteDB
 
MariaDB Administrator 교육
MariaDB Administrator 교육 MariaDB Administrator 교육
MariaDB Administrator 교육 Sangmo Kim
 
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...Simplilearn
 
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookTech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookThe Hive
 

Tendances (20)

HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance Improvement
 
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike SteenbergenMeet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQL
 
Hive: Loading Data
Hive: Loading DataHive: Loading Data
Hive: Loading Data
 
Ingesting Data at Blazing Speed Using Apache Orc
Ingesting Data at Blazing Speed Using Apache OrcIngesting Data at Blazing Speed Using Apache Orc
Ingesting Data at Blazing Speed Using Apache Orc
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike Architecture
 
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...
Spark Hadoop Tutorial | Spark Hadoop Example on NBA | Apache Spark Training |...
 
A Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerA Technical Introduction to WiredTiger
A Technical Introduction to WiredTiger
 
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
 
Apache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsApache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic Datasets
 
Introduction to Apache Sqoop
Introduction to Apache SqoopIntroduction to Apache Sqoop
Introduction to Apache Sqoop
 
Hadoop Backup and Disaster Recovery
Hadoop Backup and Disaster RecoveryHadoop Backup and Disaster Recovery
Hadoop Backup and Disaster Recovery
 
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DB
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DBDistributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DB
Distributed Databases Deconstructed: CockroachDB, TiDB and YugaByte DB
 
MariaDB Administrator 교육
MariaDB Administrator 교육 MariaDB Administrator 교육
MariaDB Administrator 교육
 
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...
What Is Hadoop? | What Is Big Data & Hadoop | Introduction To Hadoop | Hadoop...
 
Greenplum User Case
Greenplum User Case Greenplum User Case
Greenplum User Case
 
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookTech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
 
Mongo db intro.pptx
Mongo db intro.pptxMongo db intro.pptx
Mongo db intro.pptx
 
ORC Files
ORC FilesORC Files
ORC Files
 
Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 

Similaire à 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
 

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