SlideShare une entreprise Scribd logo
1  sur  49
The Real-time Web




        Utilizando NoSQL para
         desenvolvimento de
         soluções inteligentes


Christiano Anderson               Nodeware
Diretor de desenvolvimento        http://www.nodeware.com.br
Email: anderson@nodeware.com.br   Twitter: @nodeware
Twitter: @dump
Blog: http://christiano.me
Sobre o autor
•   Trabalha com software livre desde 1995;

•   Diretor de Desenvolvimento da Nodeware;

•   Ex-desenvolvedor do projeto GNU;

•   Trabalha com Python desde 2000;

•   Evangelista NoSQL, Django e Node.JS;

•   Colabora com equipe de tradução do MongoDB;

•   Fundador do MUG-SP;



@dump
Sobre a Nodeware

•   Empresa nova mas com profissionais que
    participaram do início da internet comercial do
    Brasil;

•   Foco em soluções emergentes, cloud, NoSQL,
    Node.JS e gestão de conteúdo (CMS);

•   Parceira 10gen e Amazon AWS;

•   Mais em http://www.nodeware.com.br



      @dump
NoSQL?

•   O termo foi cunhado por Carlo Strozzi e
    reintroduzido por Eric Evans, como referência a
    um tipo de armazenamento de dados;

•   O uso recomendado é Not Only SQL e nunca
    deve ser usado como “Não-SQL” ou “Never SQL”;

•   O movimento NoSQL é distinto do modelo
    relacional, o termo NoREL também é bastante
    apropriado.


      @dump
NoSQL?


“Non-relational next generation operational
       datastores and databases”



                        Dwight Merriman, CEO 10gen




  @dump
NoSQL?


“NoSQL is a movement promoting a loosely defined class of
 non-relational data stores that break with a long history of
relational databases.These data stores may not require fixed
  table schemas, usually avoid join operations and typically
  scale horizontally. Academics and papers typically refer to
            these databases as structured storage.”

                                                  Wikipedia




       @dump
Por que NoSQL?


• É uma questão de escolha, novos
  paradigmas (nem tão novos assim);
• É uma questão de funcionalidades;
• Performance e Escalabilidade;
• Não é questão de “ódio ao modelo SQL”;

    @dump
Por que NoSQL?

•   Para trabalhar com uma massa enorme de dados
    que...

    •   ... crescem exponencialmente;

    •   ... agregam muitos outros valores
        dinamicamente;

    •   ... exigem um formato diferenciado de dados;

    •   ... não exigem um banco relacional, mas podem
        trabalhar em conjunto com um.


        @dump
Por que NoSQL?

•   Para trabalhar com uma massa enorme de dados
    que...

    •   ... crescem exponencialmente;        Enorme é bastante
                                                 relativo

    •   ... agregam muitos outros valores
        dinamicamente;

    •   ... exigem um formato diferenciado de dados;

    •   ... não exigem um banco relacional, mas podem
        trabalhar em conjunto com um.


        @dump
Orientação a documentos




@dump
Orientação a documentos


•   Dados estruturados de forma encadeada, podendo
    ser coleções, tags, metadatas, hierarquias de
    informações, etc.

•   Exemplo de documento:
    nome:”Christiano”,empresa:”Nodeware”,contatos:
    [{twitter:”@dump”},{email:”anderson@nodeware.com.br”}]

•   Bom para aplicações de conteúdo, blogs, análise
    estatísticas, etc.


      @dump
Grafos




Twitter FlockDB




@dump
Grafos?
• Estrutura de nós, bordas e propriedades
  para representar dados;
• Todo elemento possui um apontamento
  direto para outro elemento adjacente;
• Bom para mídias sociais,
  determinar relacionamento
  entre dados e B.I.;



    @dump
Chave/Valor (k/v)



Amazon SimpleDB       MemcacheDB

                      Segue um modelo baseado em
                      colunas, mas que não deixa de
                       ser conceito chave/valor.




   @dump
Chave/Valor (k/v)

• Quase todos os bancos NoSQL possuem o
  conceito de chave/valor;
• Conceito para armazenar dados sem
  precisar de uma modelagem pré-definida;
• Os dados podem estar em colunas;
• A persistência dos dados pode ser em
  memória ou em disco;

    @dump
Qual é o melhor?




@dump
Resposta

  Depende do que você vai fazer!

As vezes pode precisar de mais de
         uma ferramenta




@dump
Motivos para adotar NoSQL
•   Grande quantidade de dados;

•   Ótima performance de escrita;

•   Rápido acesso chave-valor;

•   Modelagem flexível;

•   Migração fácil de dados;

•   Fácil para manter e administrar;

•   Sem pontos únicos de falha;

•   Facilidade no desenvolvimento;

      @dump
Por onde começar?


• Primeiro passo é saber o que você precisa;
• MongoDB possui uma baixa curva de
  aprendizado, ótimo para conhecer os
  conceitos NoSQL;
• MongoDB é o canivete suíço dos bancos
  NoSQL;


    @dump
MongoDB?


• Dois motivos para começar com
  MongoDB:
 • Baixa curva de aprendizado;
 • Agilidade no desenvolvimento;

    @dump
Você deve considerar o uso de MongoDB se...


•   Você está usando muito cache em sua aplicação;

•   Você está armazenando muitos dados em arquivos
    estáticos;

•   Você precisa de processamento em tempo real;

•   Você gosta de desenvolvimento ágil (SCRUM);

•   Você tem dificuldades para modelar sua estrutura
    de dados no conceito relacional;

•   Seu projeto faz muita gravação e leitura em banco
    de dados;

      @dump
O MongoDB substitui o banco relacional?




• Como já foi explicado, é uma questão de
  escolha;
• Uma aplicação pode usar banco relacional e
  NoSQL sem problema;




    @dump
Desenvolvimento

•   O MongoDB e outros bancos NoSQL suportam
    praticamente todas as linguagens de programação;

•   O MongoDB possui suporte oficial para:

    •   C, C++, Erlang, Haskell, Java, JavaScript, Perl, PHP,
        Python, .NET, Ruby, Scala, Go Language, Node.js,
        Lisp, Lua, Smalltalk...

•   Mais em: http://www.mongodb.org/display/DOCS/
    Drivers

        @dump
Modelo de Documento
Um modelo de documento MongoDB possui
          o seguinte formato:

     {‘nome’:‘Christiano’,
     ‘linguagem’:‘node.js’,
     ‘nota’: 10}

           Sim, é praticamente
                um JSON



   @dump
Comparando com SQL
               SQL                              MongoDB
INSERT INTO USERS VALUES(1,1)                db.users.insert({a:1, b:1})


      SELECT a,b FROM users                 db.users.find({}, {a: 1, b: 1})


       SELECT * FROM users                        db.users.find()


   SELECT * FROM users WHERE age=33           db.users.find({age: 33})


SELECT * FROm users WHERE name = “pedro”   db.users.find({name:”pedro”})




      @dump
Comparando com SQL
               SQL                                MongoDB
  SELECT * FROM users WHERE               db.users.find({‘age’:33}).sort({name:
     age=33 ORDER BY name                                 1})
SELECT * FROM users WHERE age
                                            db.users.find({‘age’:{$lt:33}})})
            < 33
CREATE INDEX myindexname ON
                                            db.users.ensureIndex({name:1})
         user(name)
SELECT * FROM users WHERE a = 1 AND b =
                   ‘q’                         db.users.find({a:1, b:’q’})


  SELECT * FROM users LIMIT 10 SKIP 20     db.users.find().limit(10).skip(20)




     @dump
Índices
•   Possui suporte a índices para ganho de
    performance;

•   O conceito é similar a bancos relacionais, como
    MySQL;

•   Exemplo:

    • db.colecao.ensureIndex({nome:1})
•   Mais: http://www.mongodb.org/display/DOCS/
    Indexes
      @dump
Replica Sets
•   Possível dividir a carga em vários servidores, replicando seu conteúdo via
    Replica Sets;


•   Possível crescer o ambiente de forma bastante orgânica;


•   Replica Set consiste em um ou mais node que replicam seus valores entre si.




                Server 1             Server 2

                                                               Somente leitura




                                            Leitura, Escrita
                                Primário
                                                               Cliente



       @dump
Sharding
•   MongoDB escala horizontalmente via auto-
    sharding, particionando pedaço de dados entre
    servidores;

•   Pode adicionar novos nodes facilmente sem
    interromper o sistema;

•   Possível escalar centenas e milhares de servidores;

•   Não tem ponto único de falha;

•   Failover automático;

      @dump
Python e MongoDB


•   Pymongo é o módulo que permite a conexão de
    qualquer aplicativo em Python ao MongoDB;

•   Instalado facilmente via pip ou easy_install:

•   pip install pymongo




      @dump
Código de exemplo



>>> from pymongo import Connection
>>> con = Connection(“localhost”)
>>> db = con[‘blog’]




     @dump
Inserindo um documento
>>> post = {'title':'My first post',
…'author': 'Christiano Anderson',
…'content': 'This is my first
paragraph', … 'tags':
['mongodb','blog','example']}

>>> posts = db['posts']

>>> posts.insert(post)
ObjectId('4cb662f508bf532b1b000000')


     @dump
Inserindo vários documentos

>>> other_posts = [{'title':'Second Post', 'author': 'Christiano
Anderson','tags':['test'], 'content': 'Hey, my second Post'},

{'title':'Third Post', 'author':'Luke Skywalker','tags':
['naboo'],'content':'Hey princess Leya'}]

>>> posts.insert(other_posts) [ObjectId('4cb6651b08bf532b97000000'),
ObjectId('4cb6651b08bf532b97000001')]




             @dump
Realizando pesquisas
>>> my_post = db.posts.find_one({})

{u'content': u'This is my first post at
MongoDB', u'title': u'My first post', u'_id':
ObjectId('4cb662f508bf532b1b000000'), u'tags':
[u'mongodb', u'blog', u'example'], u'author':
u'Christiano Anderson'}

>>> my_post = db.posts.find_one({ 'author':
'Christiano Anderson'})


         @dump
Operadores


•   Também é possível utilizar operadores como $ne,
    $lte, $gte,entre outros...

•   Mais: http://www.mongodb.org/display/DOCS/
    Advanced+Queries




      @dump
Consultas à base


>>> all_posts = db.posts.find({})

>>> for p in all_posts:
... print p['title']
My first post Second Post Third Post




    @dump
Filtros como parâmetros

>>> p = db.posts.find_one({'tags':'naboo'})

{u'content': u'Hey princess Leya', u'title':
u'Third Post', u'_id':
ObjectId('4cb6651b08bf532b97000001'),
u'tags': [u'naboo'], u'author': u'Luke
Skywalker'}




        @dump
Map/Reduce


• Utilizado para criar funções de pesquisa e
  agregadores no MongoDB;
• Utiliza-se JavaScript;
• Pode ser comparado a um Stored Procedure;

    @dump
Exemplo de Map/Reduce
function() {
     this.tags.forEach(function(z)) {
         emit(z, 1);
});}

function(key, value) {
    var total = 0;
    for(var i = 0; i < values.length;
i++) {
        total += values[i]; }
    return total;
}

     @dump
Falando um pouco de Riak




 @dump
Riak

• Implementado a partir de papers do
  Amazon DynamoDB;
• Escrito em Erlang;
• Seu modelo é baseado em chave/valor (kv);
• Muito, mas muito fácil para escalar;
• Riak-search oferece busca estilo Solr/
  Lucene;

    @dump
Buckets

• Buckets são utilizadas para definir um
  espaço virtual de dados;
• Podem ser comparadas a pastas ou tabelas,
  em sistemas operacionais ou banco de
  dados relacionais respectivamente;
• Essa é a única maneira de armazenar dados
  no Riak;


    @dump
Riak - Exemplos em Python

import riak

client = riak.RiakClient()

bucket = client.bucket('nodeware')

p = bucket.new('anderson', data = {
        'nome': 'Christiano Anderson',
        'empresa': 'Nodeware',
        'email': ‘anderson@nodeware.com.br’,
        })
p.store()




    @dump
Riak - Exemplos em Python

import riak                          Definição de Bucket
client = riak.RiakClient()

bucket = client.bucket('nodeware')

p = bucket.new('anderson', data = {
        'nome': 'Christiano Anderson',
        'empresa': 'Nodeware',
        'email': ‘anderson@nodeware.com.br’,
        })
p.store()




    @dump
Riak - Exemplos em Python

import riak                          Definição de Bucket
client = riak.RiakClient()

bucket = client.bucket('nodeware')

p = bucket.new('anderson', data = {
        'nome': 'Christiano Anderson',         Dados
        'empresa': 'Nodeware',
        'email': ‘anderson@nodeware.com.br’,
        })
p.store()




    @dump
Riak - Consultas ao banco
import riak

client = riak.RiakClient()
bucket = client.bucket('nodeware')

u = bucket.get('anderson')

print u.get_data()



     {u'idade': 33, u'empresa': u'Nodeware 3',
     u'nome': u'Christiano Anderson'}




     @dump
Outros bancos...




• Eu gostaria de falar mais dos outros
  bancos, mas o tempo já acabou :-(




    @dump
Fique informado


• http://nosql.mypopescu.com/
• http://nosql-database.org/
• http://christiano.me/
• Twitter: @dump @al3xandru

   @dump
Agora é sua vez!!!
        Christiano Anderson

Mail: anderson@nodeware.com.br

Site: http://www.nodeware.com.br

Blog: http://christiano.me

Twitter: @dump


@dump

Contenu connexe

Tendances

NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDBHugo Souza
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHPTheoziran Lima
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @MovileEiti Kimura
 
Apresentação MongoDB
Apresentação MongoDBApresentação MongoDB
Apresentação MongoDBDavid de Lucca
 
NOSQL uma breve introdução
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introduçãoWise Systems
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)Aryel Tupinambá
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAsRonaldo Leite Martins
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 

Tendances (20)

NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Palestra iv-ensol-nosql
Palestra iv-ensol-nosqlPalestra iv-ensol-nosql
Palestra iv-ensol-nosql
 
CouchDB Presentation
CouchDB PresentationCouchDB Presentation
CouchDB Presentation
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHP
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Apresentação MongoDB
Apresentação MongoDBApresentação MongoDB
Apresentação MongoDB
 
NOSQL uma breve introdução
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introdução
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 

En vedette

MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dadosJordan Kobellarz
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
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
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16Christiano Anderson
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosFabíola Fernandes
 
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
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaGlaucio Scheibel
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 

En vedette (18)

MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dados
 
NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
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
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
 
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
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
NOSQL
NOSQLNOSQL
NOSQL
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 

Similaire à Utilizando NoSQL no desenvolvimento de soluções inteligentes

Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosJoão Helis Bernardo
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Thiago de Azeredo
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Fernando Rizzato
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edtedbrunoaalves
 
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
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkGuilherme Carlos
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 

Similaire à Utilizando NoSQL no desenvolvimento de soluções inteligentes (20)

NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Mongo db
Mongo dbMongo db
Mongo db
 
Bancos de dados NoSQL
Bancos de dados NoSQLBancos de dados NoSQL
Bancos de dados NoSQL
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
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
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao Framework
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 

Plus de Christiano Anderson

Plus de Christiano Anderson (15)

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
Scrum
ScrumScrum
Scrum
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

Utilizando NoSQL no desenvolvimento de soluções inteligentes

  • 1. The Real-time Web Utilizando NoSQL para desenvolvimento de soluções inteligentes Christiano Anderson Nodeware Diretor de desenvolvimento http://www.nodeware.com.br Email: anderson@nodeware.com.br Twitter: @nodeware Twitter: @dump Blog: http://christiano.me
  • 2. Sobre o autor • Trabalha com software livre desde 1995; • Diretor de Desenvolvimento da Nodeware; • Ex-desenvolvedor do projeto GNU; • Trabalha com Python desde 2000; • Evangelista NoSQL, Django e Node.JS; • Colabora com equipe de tradução do MongoDB; • Fundador do MUG-SP; @dump
  • 3. Sobre a Nodeware • Empresa nova mas com profissionais que participaram do início da internet comercial do Brasil; • Foco em soluções emergentes, cloud, NoSQL, Node.JS e gestão de conteúdo (CMS); • Parceira 10gen e Amazon AWS; • Mais em http://www.nodeware.com.br @dump
  • 4. NoSQL? • O termo foi cunhado por Carlo Strozzi e reintroduzido por Eric Evans, como referência a um tipo de armazenamento de dados; • O uso recomendado é Not Only SQL e nunca deve ser usado como “Não-SQL” ou “Never SQL”; • O movimento NoSQL é distinto do modelo relacional, o termo NoREL também é bastante apropriado. @dump
  • 5. NoSQL? “Non-relational next generation operational datastores and databases” Dwight Merriman, CEO 10gen @dump
  • 6. NoSQL? “NoSQL is a movement promoting a loosely defined class of non-relational data stores that break with a long history of relational databases.These data stores may not require fixed table schemas, usually avoid join operations and typically scale horizontally. Academics and papers typically refer to these databases as structured storage.” Wikipedia @dump
  • 7. Por que NoSQL? • É uma questão de escolha, novos paradigmas (nem tão novos assim); • É uma questão de funcionalidades; • Performance e Escalabilidade; • Não é questão de “ódio ao modelo SQL”; @dump
  • 8. Por que NoSQL? • Para trabalhar com uma massa enorme de dados que... • ... crescem exponencialmente; • ... agregam muitos outros valores dinamicamente; • ... exigem um formato diferenciado de dados; • ... não exigem um banco relacional, mas podem trabalhar em conjunto com um. @dump
  • 9. Por que NoSQL? • Para trabalhar com uma massa enorme de dados que... • ... crescem exponencialmente; Enorme é bastante relativo • ... agregam muitos outros valores dinamicamente; • ... exigem um formato diferenciado de dados; • ... não exigem um banco relacional, mas podem trabalhar em conjunto com um. @dump
  • 11. Orientação a documentos • Dados estruturados de forma encadeada, podendo ser coleções, tags, metadatas, hierarquias de informações, etc. • Exemplo de documento: nome:”Christiano”,empresa:”Nodeware”,contatos: [{twitter:”@dump”},{email:”anderson@nodeware.com.br”}] • Bom para aplicações de conteúdo, blogs, análise estatísticas, etc. @dump
  • 13. Grafos? • Estrutura de nós, bordas e propriedades para representar dados; • Todo elemento possui um apontamento direto para outro elemento adjacente; • Bom para mídias sociais, determinar relacionamento entre dados e B.I.; @dump
  • 14. Chave/Valor (k/v) Amazon SimpleDB MemcacheDB Segue um modelo baseado em colunas, mas que não deixa de ser conceito chave/valor. @dump
  • 15. Chave/Valor (k/v) • Quase todos os bancos NoSQL possuem o conceito de chave/valor; • Conceito para armazenar dados sem precisar de uma modelagem pré-definida; • Os dados podem estar em colunas; • A persistência dos dados pode ser em memória ou em disco; @dump
  • 16. Qual é o melhor? @dump
  • 17. Resposta Depende do que você vai fazer! As vezes pode precisar de mais de uma ferramenta @dump
  • 18. Motivos para adotar NoSQL • Grande quantidade de dados; • Ótima performance de escrita; • Rápido acesso chave-valor; • Modelagem flexível; • Migração fácil de dados; • Fácil para manter e administrar; • Sem pontos únicos de falha; • Facilidade no desenvolvimento; @dump
  • 19. Por onde começar? • Primeiro passo é saber o que você precisa; • MongoDB possui uma baixa curva de aprendizado, ótimo para conhecer os conceitos NoSQL; • MongoDB é o canivete suíço dos bancos NoSQL; @dump
  • 20. MongoDB? • Dois motivos para começar com MongoDB: • Baixa curva de aprendizado; • Agilidade no desenvolvimento; @dump
  • 21. Você deve considerar o uso de MongoDB se... • Você está usando muito cache em sua aplicação; • Você está armazenando muitos dados em arquivos estáticos; • Você precisa de processamento em tempo real; • Você gosta de desenvolvimento ágil (SCRUM); • Você tem dificuldades para modelar sua estrutura de dados no conceito relacional; • Seu projeto faz muita gravação e leitura em banco de dados; @dump
  • 22. O MongoDB substitui o banco relacional? • Como já foi explicado, é uma questão de escolha; • Uma aplicação pode usar banco relacional e NoSQL sem problema; @dump
  • 23. Desenvolvimento • O MongoDB e outros bancos NoSQL suportam praticamente todas as linguagens de programação; • O MongoDB possui suporte oficial para: • C, C++, Erlang, Haskell, Java, JavaScript, Perl, PHP, Python, .NET, Ruby, Scala, Go Language, Node.js, Lisp, Lua, Smalltalk... • Mais em: http://www.mongodb.org/display/DOCS/ Drivers @dump
  • 24. Modelo de Documento Um modelo de documento MongoDB possui o seguinte formato: {‘nome’:‘Christiano’, ‘linguagem’:‘node.js’, ‘nota’: 10} Sim, é praticamente um JSON @dump
  • 25. Comparando com SQL SQL MongoDB INSERT INTO USERS VALUES(1,1) db.users.insert({a:1, b:1}) SELECT a,b FROM users db.users.find({}, {a: 1, b: 1}) SELECT * FROM users db.users.find() SELECT * FROM users WHERE age=33 db.users.find({age: 33}) SELECT * FROm users WHERE name = “pedro” db.users.find({name:”pedro”}) @dump
  • 26. Comparando com SQL SQL MongoDB SELECT * FROM users WHERE db.users.find({‘age’:33}).sort({name: age=33 ORDER BY name 1}) SELECT * FROM users WHERE age db.users.find({‘age’:{$lt:33}})}) < 33 CREATE INDEX myindexname ON db.users.ensureIndex({name:1}) user(name) SELECT * FROM users WHERE a = 1 AND b = ‘q’ db.users.find({a:1, b:’q’}) SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20) @dump
  • 27. Índices • Possui suporte a índices para ganho de performance; • O conceito é similar a bancos relacionais, como MySQL; • Exemplo: • db.colecao.ensureIndex({nome:1}) • Mais: http://www.mongodb.org/display/DOCS/ Indexes @dump
  • 28. Replica Sets • Possível dividir a carga em vários servidores, replicando seu conteúdo via Replica Sets; • Possível crescer o ambiente de forma bastante orgânica; • Replica Set consiste em um ou mais node que replicam seus valores entre si. Server 1 Server 2 Somente leitura Leitura, Escrita Primário Cliente @dump
  • 29. Sharding • MongoDB escala horizontalmente via auto- sharding, particionando pedaço de dados entre servidores; • Pode adicionar novos nodes facilmente sem interromper o sistema; • Possível escalar centenas e milhares de servidores; • Não tem ponto único de falha; • Failover automático; @dump
  • 30. Python e MongoDB • Pymongo é o módulo que permite a conexão de qualquer aplicativo em Python ao MongoDB; • Instalado facilmente via pip ou easy_install: • pip install pymongo @dump
  • 31. Código de exemplo >>> from pymongo import Connection >>> con = Connection(“localhost”) >>> db = con[‘blog’] @dump
  • 32. Inserindo um documento >>> post = {'title':'My first post', …'author': 'Christiano Anderson', …'content': 'This is my first paragraph', … 'tags': ['mongodb','blog','example']} >>> posts = db['posts'] >>> posts.insert(post) ObjectId('4cb662f508bf532b1b000000') @dump
  • 33. Inserindo vários documentos >>> other_posts = [{'title':'Second Post', 'author': 'Christiano Anderson','tags':['test'], 'content': 'Hey, my second Post'}, {'title':'Third Post', 'author':'Luke Skywalker','tags': ['naboo'],'content':'Hey princess Leya'}] >>> posts.insert(other_posts) [ObjectId('4cb6651b08bf532b97000000'), ObjectId('4cb6651b08bf532b97000001')] @dump
  • 34. Realizando pesquisas >>> my_post = db.posts.find_one({}) {u'content': u'This is my first post at MongoDB', u'title': u'My first post', u'_id': ObjectId('4cb662f508bf532b1b000000'), u'tags': [u'mongodb', u'blog', u'example'], u'author': u'Christiano Anderson'} >>> my_post = db.posts.find_one({ 'author': 'Christiano Anderson'}) @dump
  • 35. Operadores • Também é possível utilizar operadores como $ne, $lte, $gte,entre outros... • Mais: http://www.mongodb.org/display/DOCS/ Advanced+Queries @dump
  • 36. Consultas à base >>> all_posts = db.posts.find({}) >>> for p in all_posts: ... print p['title'] My first post Second Post Third Post @dump
  • 37. Filtros como parâmetros >>> p = db.posts.find_one({'tags':'naboo'}) {u'content': u'Hey princess Leya', u'title': u'Third Post', u'_id': ObjectId('4cb6651b08bf532b97000001'), u'tags': [u'naboo'], u'author': u'Luke Skywalker'} @dump
  • 38. Map/Reduce • Utilizado para criar funções de pesquisa e agregadores no MongoDB; • Utiliza-se JavaScript; • Pode ser comparado a um Stored Procedure; @dump
  • 39. Exemplo de Map/Reduce function() { this.tags.forEach(function(z)) { emit(z, 1); });} function(key, value) { var total = 0; for(var i = 0; i < values.length; i++) { total += values[i]; } return total; } @dump
  • 40. Falando um pouco de Riak @dump
  • 41. Riak • Implementado a partir de papers do Amazon DynamoDB; • Escrito em Erlang; • Seu modelo é baseado em chave/valor (kv); • Muito, mas muito fácil para escalar; • Riak-search oferece busca estilo Solr/ Lucene; @dump
  • 42. Buckets • Buckets são utilizadas para definir um espaço virtual de dados; • Podem ser comparadas a pastas ou tabelas, em sistemas operacionais ou banco de dados relacionais respectivamente; • Essa é a única maneira de armazenar dados no Riak; @dump
  • 43. Riak - Exemplos em Python import riak client = riak.RiakClient() bucket = client.bucket('nodeware') p = bucket.new('anderson', data = { 'nome': 'Christiano Anderson', 'empresa': 'Nodeware', 'email': ‘anderson@nodeware.com.br’, }) p.store() @dump
  • 44. Riak - Exemplos em Python import riak Definição de Bucket client = riak.RiakClient() bucket = client.bucket('nodeware') p = bucket.new('anderson', data = { 'nome': 'Christiano Anderson', 'empresa': 'Nodeware', 'email': ‘anderson@nodeware.com.br’, }) p.store() @dump
  • 45. Riak - Exemplos em Python import riak Definição de Bucket client = riak.RiakClient() bucket = client.bucket('nodeware') p = bucket.new('anderson', data = { 'nome': 'Christiano Anderson', Dados 'empresa': 'Nodeware', 'email': ‘anderson@nodeware.com.br’, }) p.store() @dump
  • 46. Riak - Consultas ao banco import riak client = riak.RiakClient() bucket = client.bucket('nodeware') u = bucket.get('anderson') print u.get_data() {u'idade': 33, u'empresa': u'Nodeware 3', u'nome': u'Christiano Anderson'} @dump
  • 47. Outros bancos... • Eu gostaria de falar mais dos outros bancos, mas o tempo já acabou :-( @dump
  • 48. Fique informado • http://nosql.mypopescu.com/ • http://nosql-database.org/ • http://christiano.me/ • Twitter: @dump @al3xandru @dump
  • 49. Agora é sua vez!!! Christiano Anderson Mail: anderson@nodeware.com.br Site: http://www.nodeware.com.br Blog: http://christiano.me Twitter: @dump @dump

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n