Sem limites com
NoSQL
Modelagem com MongoDB
• Jhonathan de Souza Soares
• Bacharel Ciência da Computação - UNIFENAS
• Pós Graduado em Arquitetura de Software - IGTI
• MBA em Gestão de TI - UNIS
• Most Valuable Professional (MVP) - Microsoft
• Top 50 World Certified - Neo4j
• Evangelist e Ambassador - MongoDB
• Scrum Master PSM – Scrum.org
• Professor na FIAP e Bandtec
• Lead Architect na Lumini IT Solutions
About me
Surgimento NOSQL
• Primeiramente introduzido em 1998 por Carlo Strozzi,
como NoREL
• Conceito BigTable – 2006 Google Inc
• NÃO ACID ( Atomicidade, Consistência, Isolamento e
Durabilidade )
• SIM BASE (Basic Availability , Soft-state , Eventual
consistency )
BASE - Basically Available, Soft state, Eventual consistency
• Basic Availability
• Caracteriza-se por ser basicamente disponível, ou
seja, o sistema parece estar funcionando o tempo
todo;
• Soft-state
• Em estado leve, o sistema não precisa ser
consistente o tempo todo nem possuir esquema
rígido
• Eventual consistency
• Eventualmente consistente, o sistema torna-se
consistente no momento devido, priorizando a
disponibilidade do que a consistência.
Fundamentos NoSQL
• BIG DATA – Grande volume de dados
• BIG DATA – Velocidade para análise de dados
• BIG DATA – Capturar, armazenar e analisar dados não
estruturados
• Flexibilidade no desenvolvimento
• “Nova” Arquitetura em Nuvem
• Internet of things – tudo conectado
• Demandas por escalabilidade é cada vez maior
Fundamentos NoSQL
90% das empresas top 100 que mais faturam no mundo
utilizam algum NoSQL!
Fundamentos NoSQL
NoSQL
Não Relacional, distribuído,
alta performance para e alta
escalabilidade;
SQL
Relacional, processamento
de transações, concorrência,
consistência, baixíssima
latência;
Dificuldades para escalar; Não serve para tudo;
Fundamentos NoSQL
NoSQL não substitui SQL, e sim trabalha em conjunto -
POLIGLOTA
Teorema de CAP
MongoDB – quem é?
• Origem do nome: Humongous – Gigantesco
MongoDB – quem é?
• Escrito em C++
• Document Model / Multi-model
• Alta disponibilidade
• Alta escalabilidade
• Json Like
• Não possui schema definido
• Não é relacional
MongoDB – quem é?
• Criado pelo 10gen em 2007 e lançado em 2009
• Criado para dar suporte à restful API’s (que era algo
novo na época)
• Mantido pela MongoDB como Open Source
• Altamente escalável e disponível
• Projetado para velocidade de leitura
• Curva de aprendizagem pequena
• Altamente abrangente em inúmeras aplicações
MongoDB – quem é?
MongoDB – quando usar?
Dados para armazenar
• 60 ~ 80% das aplicações
• Sistemas via Restfull API
• Aplicações com dados não estruturados, semi-
estruturados e polimórficos
• Integração ou suporte à outros bancos
• Alta leitura
MongoDB – quando usar?
Os documentos BSON (JSON binário) do
Mongo são schemaless e aceitam quase
qualquer coisa que você quiser armazenar.
MongoDB – quando não usar?
Dados para não armazenar
• Relatórios
• Sistemas de busca complexos
• Alta conectividade
• ACID
MongoDB – quem usa?
• Google
• Twitter
• Adobe
• Ebay
• Gap
• SAP
• Forbes
• Expedia
• EA sports
• PES e Crysis utilizam MongoDB
MongoDB – principais características
MongoDB – principais características
MongoDB – modelagem
MongoDB – modelagem
Conseguimos separar em 3 contextos diferentes nosso
sistema:
• Produto
• Pedido
• Usuário
MongoDB – modelagem - Produto
products: [{
_id: '21321321',
name: 'MongoDB Product',
type: 'ebook',
price: 10.00,
description: 'Produto da eloja da mongodb',
tags: ['mongodb', 'nosql', 'db'],
stock: 2000
}]
MongoDB – modelagem - Pedido
orders: [{
_id: '234423432',
user: users._id,
type: 'ebook',
products: [{
product_id: products._id,
quantity: 1
}],
date_created: '01-01-2017'
}]
MongoDB – modelagem - Usuário
users: [{
_id: ‘768675’,
name: ‘Jhonathan’,
email: ‘jhonathan@email.com’,
address: [{
street: ‘Rua X’,
number: 1
}],
password: ‘XYZ'
}]
MongoDB – Final users: [{
_id: ‘768675’,
name: ‘Jhonathan’,
email: ‘jhonathan@email.com’,
address: [{
street: ‘Rua X’,
number: 1
}],
password: ‘XYZ’
}, orders: [{
products: [{
product_id: products._id,
quantity: 1,
tags: [“x”,”y”]
}],
date_created: '01-01-2017'}]]
Não confie em ninguém, nem em você mesmo!
Benchmarks are not trustful
MongoDB – não siga a modinha
Our database is too
slow and is not big
enough!
We need NoSql!
MongoDB – KISS
KISS
• Avoid complexity
• Product First
• MVP
• Baby Step
MongoDB – Dúvidas?
OBRIGADO!
http://codigosimples.net

Introdução ao NoSQL e modelagem de dados com MongoDB

  • 1.
  • 2.
    • Jhonathan deSouza Soares • Bacharel Ciência da Computação - UNIFENAS • Pós Graduado em Arquitetura de Software - IGTI • MBA em Gestão de TI - UNIS • Most Valuable Professional (MVP) - Microsoft • Top 50 World Certified - Neo4j • Evangelist e Ambassador - MongoDB • Scrum Master PSM – Scrum.org • Professor na FIAP e Bandtec • Lead Architect na Lumini IT Solutions About me
  • 3.
    Surgimento NOSQL • Primeiramenteintroduzido em 1998 por Carlo Strozzi, como NoREL • Conceito BigTable – 2006 Google Inc • NÃO ACID ( Atomicidade, Consistência, Isolamento e Durabilidade ) • SIM BASE (Basic Availability , Soft-state , Eventual consistency )
  • 4.
    BASE - BasicallyAvailable, Soft state, Eventual consistency • Basic Availability • Caracteriza-se por ser basicamente disponível, ou seja, o sistema parece estar funcionando o tempo todo; • Soft-state • Em estado leve, o sistema não precisa ser consistente o tempo todo nem possuir esquema rígido • Eventual consistency • Eventualmente consistente, o sistema torna-se consistente no momento devido, priorizando a disponibilidade do que a consistência.
  • 6.
    Fundamentos NoSQL • BIGDATA – Grande volume de dados • BIG DATA – Velocidade para análise de dados • BIG DATA – Capturar, armazenar e analisar dados não estruturados • Flexibilidade no desenvolvimento • “Nova” Arquitetura em Nuvem • Internet of things – tudo conectado • Demandas por escalabilidade é cada vez maior
  • 7.
    Fundamentos NoSQL 90% dasempresas top 100 que mais faturam no mundo utilizam algum NoSQL!
  • 8.
    Fundamentos NoSQL NoSQL Não Relacional,distribuído, alta performance para e alta escalabilidade; SQL Relacional, processamento de transações, concorrência, consistência, baixíssima latência; Dificuldades para escalar; Não serve para tudo;
  • 9.
    Fundamentos NoSQL NoSQL nãosubstitui SQL, e sim trabalha em conjunto - POLIGLOTA
  • 10.
  • 11.
    MongoDB – quemé? • Origem do nome: Humongous – Gigantesco
  • 12.
    MongoDB – quemé? • Escrito em C++ • Document Model / Multi-model • Alta disponibilidade • Alta escalabilidade • Json Like • Não possui schema definido • Não é relacional
  • 13.
    MongoDB – quemé? • Criado pelo 10gen em 2007 e lançado em 2009 • Criado para dar suporte à restful API’s (que era algo novo na época) • Mantido pela MongoDB como Open Source • Altamente escalável e disponível • Projetado para velocidade de leitura • Curva de aprendizagem pequena • Altamente abrangente em inúmeras aplicações
  • 14.
  • 15.
    MongoDB – quandousar? Dados para armazenar • 60 ~ 80% das aplicações • Sistemas via Restfull API • Aplicações com dados não estruturados, semi- estruturados e polimórficos • Integração ou suporte à outros bancos • Alta leitura
  • 16.
    MongoDB – quandousar? Os documentos BSON (JSON binário) do Mongo são schemaless e aceitam quase qualquer coisa que você quiser armazenar.
  • 17.
    MongoDB – quandonão usar? Dados para não armazenar • Relatórios • Sistemas de busca complexos • Alta conectividade • ACID
  • 18.
    MongoDB – quemusa? • Google • Twitter • Adobe • Ebay • Gap • SAP • Forbes • Expedia • EA sports • PES e Crysis utilizam MongoDB
  • 19.
    MongoDB – principaiscaracterísticas
  • 20.
    MongoDB – principaiscaracterísticas
  • 21.
  • 22.
    MongoDB – modelagem Conseguimosseparar em 3 contextos diferentes nosso sistema: • Produto • Pedido • Usuário
  • 23.
    MongoDB – modelagem- Produto products: [{ _id: '21321321', name: 'MongoDB Product', type: 'ebook', price: 10.00, description: 'Produto da eloja da mongodb', tags: ['mongodb', 'nosql', 'db'], stock: 2000 }]
  • 24.
    MongoDB – modelagem- Pedido orders: [{ _id: '234423432', user: users._id, type: 'ebook', products: [{ product_id: products._id, quantity: 1 }], date_created: '01-01-2017' }]
  • 25.
    MongoDB – modelagem- Usuário users: [{ _id: ‘768675’, name: ‘Jhonathan’, email: ‘jhonathan@email.com’, address: [{ street: ‘Rua X’, number: 1 }], password: ‘XYZ' }]
  • 26.
    MongoDB – Finalusers: [{ _id: ‘768675’, name: ‘Jhonathan’, email: ‘jhonathan@email.com’, address: [{ street: ‘Rua X’, number: 1 }], password: ‘XYZ’ }, orders: [{ products: [{ product_id: products._id, quantity: 1, tags: [“x”,”y”] }], date_created: '01-01-2017'}]]
  • 27.
    Não confie emninguém, nem em você mesmo! Benchmarks are not trustful
  • 28.
    MongoDB – nãosiga a modinha Our database is too slow and is not big enough! We need NoSql!
  • 29.
    MongoDB – KISS KISS •Avoid complexity • Product First • MVP • Baby Step
  • 30.