Upload
thiago-de-azeredo
View
213
Download
1
Embed Size (px)
Citation preview
Um banco de dados noSQL
MSc. Thiago Ribeiro de AzeredoProfessor 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 New York
Times• eBay• Google• PEBBLE
Como funciona?• Armazena todas as informações em formato JSON (JavaScript Object Notation)
• Pode-se fazer analogias entre:• Coleções e Tabelas• 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 complexosdb.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 documentosdb.alunos.update( {"cr“ : { $gt : 8 } }, { $set : { "cr“ : 9 } } )db.alunos.remove({“cr”:9})