4. 4
Apresentação – Pablo Juan
• 1º Torneio de Robótica Lego Brasil
• Técnico em Informática com ênfase em programação(ETEC de Itaquera).
• Graduação em Analise e desenvolvimento de sistemas(FIAP)
• Mais de 6 anos de experiência
• CEO & Founder For Your System
• Consultor .Net Sênior WorkInside
• Microsoft Student Partner
“Que o teu orgulho e objetivo consistam em pôr no teu trabalho
algo que se assemelhe a um milagre”
Leonardo da Vinci.
18. MongoDB
• C++
• Schemaless
• JSON/BSON (Orientado a documentos)
• Replicação
• Sharding
• GridFS
• Busca/Geolocalização
19.
20.
21.
22. Terminologia
SQL MongoDB
database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary key
Specify any unique column or column combination as
primary key.
primary key
In MongoDB, the primary key is automatically set to
the _idfield.
aggregation (e.g. group by)
aggregation pipeline
See the SQL to Aggregation Mapping Chart.
29. Primeiros Comandos
• Listando dataBase
– Show dbs;
• Criando dataBase/usando dataBase já criado
– Use NomeD ataBase()
• Criando e inserindo dado em uma coleção
– db.nomeColecao.insert({dado1:’’,dado2:true}
• Listando o conteúdo de uma coleção
– db.nomeColecao.find()
33. Operadores
• $eq -- Equal(Igual)
– valores que são iguais a um outro valor especificado.
• $gt – Great Than(Maior)
– Valores que são maiores do que um outro valor especificado.
• $gte – Great Than or Equal(Maior ou Igual)
– Valores que são maiores ou iguais a um outro valor especificado.
• $lt - less than
– Valores que são menores do que um outro valor especificado.
• $lte less than or equal
– Valores que são menores ou iguais a um outro valor especificado.
• $ne Not Equal
– Combina todos os valores que não são iguais a um valor especificado
{"campo" : { $operador: valor} }
db.teste.find({idade:{$gt:18}}).pretty()
34. Operadaroes array
• $in
– Corresponde a qualquer um dos valores especificados em uma matriz.
• $nin - (Not In)
– Nenhum dos valores especificados em uma matriz.
db.teste.find({tags : {$in: ['teste','ok']}}).pretty()
Resultado:
{
"_id" : ObjectId("5605893fa3a64169cc4622d2"),
"nome" : "TJ",
"idade" : 24,
"tags" : [
"teste",
"ok"
]
}
36. Update
• Query
– os critérios de seleção para a atualização. Os mesmos seletores de consulta como no
método find () estão disponíveis. O “where” do SQL.
• Update
– Campo: valor que desejamos alterar.
• UpSert
– Opcional. Se definido como verdadeiro, cria um novo documento quando nenhum coincide
com os critérios de consulta. O valor padrão é falso, o que significa que não irá inserir um
novo documento quando não for encontrada nenhuma correspondência.
• Multi
– Opcional. Se definido como verdadeiro, atualiza vários documentos que atendem aos
critérios de consulta. Se definido como false, atualiza um documento. O valor padrão é falso.
Para obter informações adicionais, consulte multiparâmetro.
• WriteResult
– Número de documentos que combinam com a consulta.
db.coleção.update( {editor:{$in:[/a/]}} , {preco:19}, { upsert: true, multi: false })
39. Você ainda não conhece?
{ nome: ‘Pablo Juan’,
Titulo: ‘Microsoft Student Partner’,
Blog:‘pablojuancruz.wordpress.com’
Códigos: ‘github.com/pablojuancruz’
email: ‘pablojuan@foryoursystem.com’ }
Notas do Editor
O termo NoSQL foi usado pela primeira vez em 1998,como o nome de um banco de dados relacional de código aberto que nãopossuía um interface SQL. Seu autor, Carlo Strozzi, alega que omovimento NoSQL “é completamente distinto do modelo relacionale, portanto, deveria ser mais apropriadamente chamado ‘NoREL’ou algo que produzisse o mesmo efeito”. Porém, o termo sóvoltou a ser assunto em 2009, por um funcionário do Rackspace, EricEvans, quando Johan Oskarsson, da Last.fm, queria organizar um eventopara discutir bancos de dados open source distribuídos.
http://nosql-database.org/
Now have the option to scale both vertically as well as horizontally
Ele é feito em C++
Antes ele utilizava a interface js do FireMonkey que era da Mozilla
Na versão 2.2 ele mudou para a engine V8 do Google, atualmente a maquina de interpretação de javascript mais rápida do mercado.
MongoDb nasceu para trabalhar na web
Escalabilidade Horizontal.
Schemaless – Sem estrutura física definida a Mesma coleção pode ter modelo de dados diferentes.
JSON/BSOn – JSon um modelo de comunicação de dados, BSON é a implementação binaria desse JSON, o MongoDB quando vc cria uma database ele pré aloca uma quantidade de espaço no seu hd para persistir seus Dados Sequencialmente. MongoDb não faz nada no seu HD ele joga tudo na memoria ram o que vc ta buscando pra ai depois ele fazer as operações lá e ai depois fazer a persistência física dos dados no seu HD/Storage.
O Servidor na verdade ele pode ter a mesma quantidade de RAM do HD pq se vc tiver mais hd do que RAM, você vai ficar persistindo os dados e quando esses arquivos não tiverem na memoria RAM ele vai ter que fazer uma troca de pagina aí ele vai ter um custo de performance.
Replica SET = Espelhamento dos dados Bancos relacionais tem.
Sharding: Voce divide a sua coleção que esta passando da sua memoria ram em diversos servidores, pq ai aquele seu dado que não cabe na memoria ram ele faz o sharding dessa coleção.
Ex: Uma coleção que tem mais de 12 GB de memoria e seu server só tem 8GB. Você vai colocar mais Gigas na sua memoria ram? Não você pode colocar um outro servidor e colocar 8GB de memoria ram nele ai vc faz o sharding na sua memoria ram onde ele vai dividir os seus dados que estão sobrando no seu servidor ele quebra entre outros servidores. Quando você tiver esse cluster de sharding pq é muito melhor pq vc divide seus dados você pode fazer uma busca na completude dos seus dados em cada pai: como um Torrent você vai receber uma parte de cada servidor diferente e vai jogar num só que é o Mongo Router.
Gridfs = BLOOB
N:N podem ser traduzida para o MongoDb na forma de um array com os valores agregados diretamente no documento
MongoDb não possui JOINS e o forte dele é sua velocidade na busca, quanto mais dados agregados serem entregues em uma única query mais performático seu sistema será.
ERRO QUANDO VOCE AINDA NÃO TEM O SERVIÇO INSTALADO
Pra solucionar você tem que rodar em um cmd o comando Mongod
Pronto agora sim em um cmd rodando o comando mongod no outro vc roda o comando mongo que ira te dar acesso ao mongo shell
1 -Executar comando use Nomedatabase
2 – showdbs novamente ele não vai mostrar
3 – Explicar que o banco só é criado de fato quando inserimos alguma coisa em uma collection.,
4 – explicar variável DB.db.
5 – Insert, explicar o tempo que demora para inserir primeiro registro. Mostrar a tabela na pasta c data db
6 – explicar system index que guarda os index das coleções do teste
7 – Demonstrar SchemaLess.
8 – Mostrar db.nomeColecao.find().pretty();
9-Explicar ObjectID: _ID é gerado sempre automaticamente no mongodb nao temos autoIncremento, no mongodb cada json tem um identificador universal unico(Universally unique identifier UUID)
ObjectId is a 12-byte BSON type, constructed using:
a 4-byte TimeStamp gerado
a 3-byte identificador da sua maquina
a 2-byte id do processo
a 3-byte Contador randomico exadecimal
var query = db.teste.findOne()
query.idade = 23
db.teste.save(query)
Avisar que não existe findLast
db.teste.find({nome:{$regex: /a/}})
Como não usamos uma linguagem de query como SQL utilizaos objetos JSON para passar como parâmetros para funções.
Então ><= se transformaram em literais
db.teste.find({idade:{$ne:14}}).pretty()
Fazer um teste adicionando um array com alguns valores explicar o in e o notin
Ex:
db.teste.find({tags : {$in: ['teste','oka']}}).pretty()
{
"_id" : ObjectId("5605893fa3a64169cc4622d2"),
"nome" : "TJ",
"idade" : 24,
"tags" : [
"teste",
"ok"
]