Um banco de dados noSQL
MSc.Thiago Ribeiro de Azeredo
Professor do curso de Engenharia da Computação
O que é um banco noSQL?
• NoSQL abrange uma grande variedade de diferentes tecnologias de banco de
dados que foram desenvolvidos em resposta a um aumento do volume de dados
armazenados sobre usuários, objetos e produtos, a frequência em que esses dados
são acessados, e desempenho de processamento e necessidades. Bancos de
dados relacionais, por outro lado, não foram projetados para lidar com os desafios
de escala e agilidade que enfrentam aplicações modernas, nem foram construídos
para tirar proveito do armazenamento barato e poder de processamento
disponível hoje.
https://www.mongodb.com/nosql-explained
Quais as vantagens de um banco noSQL?
• Quando comparado com bancos de dados relacionais, bancos de dados NoSQL
são mais escaláveis e proporcionam um desempenho superior.
• Seu modelo de dados aborda várias questões que o modelo relacional não é
projetado para lidar com:
• Grandes volumes de dados estruturados, semi-estruturados, não-estruturados e
• Sprints ágeis, iteração rápida e empurrões código frequentes
• Programação orientada a objetos
• Arquitetura escalável no lugar de arquitetura monolítica
https://www.mongodb.com/nosql-explained
Como são tão rápidos e escaláveis?
Auto-sharding!
Nativamente e automaticamente propagam dados entre um número arbitrário de
servidores, sem exigir a aplicação ao mesmo esteja ciente da composição do pool
de servidores. Dados e carga de consulta são automaticamente equilibrada entre
servidores, e quando um servidor cair, ela pode ser rápida e transparente substituído
sem interrupção do aplicativo.
https://www.mongodb.com/nosql-explained
Quais são os tipos de bancos noSQL?
• Chave/Valor
• Grafo
• Colunas
• Documentos
Chave/Valor
• São os mais simples bancos NoSQL.
• Todo item é armazenado com uma chave que o identifica
• Muito útil para desenvolvimento de aplicações na nuvem
• Exemplos: CouchDB, Oracle NoSQL Database, Dynamo, FoundationDB,
HyperDex, MemcacheDB, Redis, Riak, FairCom c-treeACE, Aerospike, OrientDB,
MUMPS, Voldemort
Grafo
• Armazenam de forma natural informações interligada
• Conexões em redes sociais, mapa de ruas, topologia de redes são bons exemplo
de utilização
• Exemplos: Allegro, Neo4J, InfiniteGraph, OrientDB,Virtuoso, Stardog
Colunas
• Otimizados para fazer consultas em grandes conjuntos de dados
• Armazena os dados em colunas ao invés de linhas
• Exemplos: Cassandra, HBase
Documentos
• Cada registro é uma estrutura complexa chamada de documento
• Cada documento contém um identificador único
• Cada documento pode conter uma enorme quantidade chaves e valores
• Um valor pode ser um vetor de valores
• Um valor também pode ser um outro documento
• Exemplos: Clusterpoint, Apache CouchDB, Couchbase,
DocumentDB, HyperDex, Lotus Notes, MarkLogic,
MongoDB, OrientDB, Qizx
Documentos
• Cada registro é uma estrutura complexa chamada de documento
• Cada documento contém um identificador único
• Cada documento pode conter uma enorme quantidade chaves e valores
• Um valor pode ser um vetor de valores
• Um valor também pode ser um outro documento
• Exemplos: Clusterpoint, Apache CouchDB, Couchbase,
DocumentDB, HyperDex, Lotus Notes, MarkLogic,
MongoDB, OrientDB, Qizx
MongoDB
• Do inglês humongous (gigantesco)
• Primeira versão publicada em 2009
• Quem usa?
• Cidade de Chicago
• Expedia
• Adobe
• Facebook
• MTV
• EA
• CISCO
• Verizon
• The NewYorkTimes
• eBay
• Google
• PEBBLE
Como funciona?
• Armazena todas as informações em formato JSON (JavaScript Object Notation)
• Pode-se fazer analogias entre:
• Coleções eTabelas
• Documentos e Linhas
Iniciando o banco
•http://pastebin.com/Qd11K4xw
Primeiros passos
• Shell do mongoDB aceita comandos javascript
• Não existe comando para criar um novo database. É criado automaticamente.
• Não existe comando para criar uma coleção. É criada automaticamente
• Automaticamente quando?
• Quando um documento for inserido!
• show dbs
• show collections
• use fsma
• db.alunos.insert({"nome":"Thiago",“sexo":”Masculino”})
• db.alunos.find()
Inserindo documentos complexos
db.alunos.insert(
{
"nome":"Thiago",
"nascimento": new ISODate("1990-01-01"),
“cr”:8.72,
"materias":[
{
"nome":"matemática",
"créditos":3
},
{
"nome":"programação",
"créditos":2
}
]
}
)
Como fazer buscas?
• db.alunos.find()
• db.alunos.find({“nome”:”Thiago”})
• db.alunos.find({“cr”:{$gt:8}})
• db.alunos.find({"materias":{$elemMatch: { "nome":"matemática"} } })
• db.alunos.find({},{“nome”:1})
• db.alunos.find({“cr”:{$gt:8}},{“materias”:1,_id:0})
$eq
$gt
$gte
$lt
$lte
$ne
$in
$nin
-
$or
$and
$not
$nor
-
$exists
$type
https://docs.mongodb.org/manual/reference/operator/query/
Alterando/Removendo documentos
db.alunos.update( {"cr“ : { $gt : 8 } }, { $set : { "cr“ : 9 } } )
db.alunos.remove({“cr”:9})

Introdução ao MongoDB (NoSQL)

  • 1.
    Um banco dedados noSQL MSc.Thiago Ribeiro de Azeredo Professor do curso de Engenharia da Computação
  • 2.
    O que éum banco noSQL? • NoSQL abrange uma grande variedade de diferentes tecnologias de banco de dados que foram desenvolvidos em resposta a um aumento do volume de dados armazenados sobre usuários, objetos e produtos, a frequência em que esses dados são acessados, e desempenho de processamento e necessidades. Bancos de dados relacionais, por outro lado, não foram projetados para lidar com os desafios de escala e agilidade que enfrentam aplicações modernas, nem foram construídos para tirar proveito do armazenamento barato e poder de processamento disponível hoje. https://www.mongodb.com/nosql-explained
  • 3.
    Quais as vantagensde um banco noSQL? • Quando comparado com bancos de dados relacionais, bancos de dados NoSQL são mais escaláveis e proporcionam um desempenho superior. • Seu modelo de dados aborda várias questões que o modelo relacional não é projetado para lidar com: • Grandes volumes de dados estruturados, semi-estruturados, não-estruturados e • Sprints ágeis, iteração rápida e empurrões código frequentes • Programação orientada a objetos • Arquitetura escalável no lugar de arquitetura monolítica https://www.mongodb.com/nosql-explained
  • 4.
    Como são tãorápidos e escaláveis? Auto-sharding! Nativamente e automaticamente propagam dados entre um número arbitrário de servidores, sem exigir a aplicação ao mesmo esteja ciente da composição do pool de servidores. Dados e carga de consulta são automaticamente equilibrada entre servidores, e quando um servidor cair, ela pode ser rápida e transparente substituído sem interrupção do aplicativo. https://www.mongodb.com/nosql-explained
  • 5.
    Quais são ostipos de bancos noSQL? • Chave/Valor • Grafo • Colunas • Documentos
  • 6.
    Chave/Valor • São osmais simples bancos NoSQL. • Todo item é armazenado com uma chave que o identifica • Muito útil para desenvolvimento de aplicações na nuvem • Exemplos: CouchDB, Oracle NoSQL Database, Dynamo, FoundationDB, HyperDex, MemcacheDB, Redis, Riak, FairCom c-treeACE, Aerospike, OrientDB, MUMPS, Voldemort
  • 7.
    Grafo • Armazenam deforma natural informações interligada • Conexões em redes sociais, mapa de ruas, topologia de redes são bons exemplo de utilização • Exemplos: Allegro, Neo4J, InfiniteGraph, OrientDB,Virtuoso, Stardog
  • 8.
    Colunas • Otimizados parafazer consultas em grandes conjuntos de dados • Armazena os dados em colunas ao invés de linhas • Exemplos: Cassandra, HBase
  • 9.
    Documentos • Cada registroé uma estrutura complexa chamada de documento • Cada documento contém um identificador único • Cada documento pode conter uma enorme quantidade chaves e valores • Um valor pode ser um vetor de valores • Um valor também pode ser um outro documento • Exemplos: Clusterpoint, Apache CouchDB, Couchbase, DocumentDB, HyperDex, Lotus Notes, MarkLogic, MongoDB, OrientDB, Qizx
  • 10.
    Documentos • Cada registroé uma estrutura complexa chamada de documento • Cada documento contém um identificador único • Cada documento pode conter uma enorme quantidade chaves e valores • Um valor pode ser um vetor de valores • Um valor também pode ser um outro documento • Exemplos: Clusterpoint, Apache CouchDB, Couchbase, DocumentDB, HyperDex, Lotus Notes, MarkLogic, MongoDB, OrientDB, Qizx
  • 11.
    MongoDB • Do inglêshumongous (gigantesco) • Primeira versão publicada em 2009 • Quem usa? • Cidade de Chicago • Expedia • Adobe • Facebook • MTV • EA • CISCO • Verizon • The NewYorkTimes • eBay • Google • PEBBLE
  • 12.
    Como funciona? • Armazenatodas as informações em formato JSON (JavaScript Object Notation) • Pode-se fazer analogias entre: • Coleções eTabelas • Documentos e Linhas
  • 13.
  • 14.
    Primeiros passos • Shelldo mongoDB aceita comandos javascript • Não existe comando para criar um novo database. É criado automaticamente. • Não existe comando para criar uma coleção. É criada automaticamente • Automaticamente quando? • Quando um documento for inserido! • show dbs • show collections • use fsma • db.alunos.insert({"nome":"Thiago",“sexo":”Masculino”}) • db.alunos.find()
  • 15.
    Inserindo documentos complexos db.alunos.insert( { "nome":"Thiago", "nascimento":new ISODate("1990-01-01"), “cr”:8.72, "materias":[ { "nome":"matemática", "créditos":3 }, { "nome":"programação", "créditos":2 } ] } )
  • 16.
    Como fazer buscas? •db.alunos.find() • db.alunos.find({“nome”:”Thiago”}) • db.alunos.find({“cr”:{$gt:8}}) • db.alunos.find({"materias":{$elemMatch: { "nome":"matemática"} } }) • db.alunos.find({},{“nome”:1}) • db.alunos.find({“cr”:{$gt:8}},{“materias”:1,_id:0}) $eq $gt $gte $lt $lte $ne $in $nin - $or $and $not $nor - $exists $type https://docs.mongodb.org/manual/reference/operator/query/
  • 17.
    Alterando/Removendo documentos db.alunos.update( {"cr“: { $gt : 8 } }, { $set : { "cr“ : 9 } } ) db.alunos.remove({“cr”:9})