SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
Big Blog Analysis
Sharding e Map/Reduce
com MongoDB

MongoSP                      Henrique Dias
Julho 13, 2012          Universidade Federal do
                              Rio Grande do Sul
Roteiro
Sharding
(distribuição)




Map/Reduce
(paralelismo)

Ex.: TF-IDF , PageRank
Trabalho
 Analista de T.I. na UFRGS
 Sistemas em PHP
 Banco de dados Relacional
Trabalho
 Analista de T.I. na UFRGS
 Sistemas em PHP
 Banco de dados Relacional
Pesquisa
 Mestrando na UFRGS
 Mineração de Dados
 Cluster, Paralelismo, Distribuído
Pesquisa
 Mestrando na UFRGS
 Mineração de Dados
 Cluster, Paralelismo, Distribuído
Projeto de Mestrado
Análise de Blogs
Projeto de Mestrado
Análise de Blogs
●   Dados de posts, sem esquema
●   Milhões de posts
●   Dados distribuídos
●   Processamento Paralelo
Projeto de Mestrado
Análise de Blogs
●   Dados de posts, sem esquema
●   Milhões de posts
●   Dados distribuídos
●   Processamento Paralelo


MongoDB serve!
"Não há bala de prata"
     Fred Brooks '86
Problema
Autores de Blogs Populares em Tópicos
Problema
Autores de Blogs Populares em Tópicos




 Coleta de Blogs
 para o MongoDB
Problema
Autores de Blogs
                   Populares em Tópicos



 Coleta de Blogs
 para o MongoDB
                   Map/Reduce
                    PageRank
Problema
Autores de Blogs
                   Populares
                                 em Tópicos

 Coleta de Blogs
 para o MongoDB
                   Map/Reduce
                    PageRank
                                recomendação de
                                 Tags com TF-IDF
                                   distribuído
Sharding




           Shard London Bridge
Processos MongoDB
mongod   --shardsvr

                       Mongo   Mongo        Mongo
                       Shard   Shard        Shard
mongod   --configsvr


                               Mongo    tolerância
                               Config   à falhas
mongos   --configdb



                               mongos
                               router
Sharding
mongod   --shardsvr
         --dbpath /home/mongodb/base
         --port 27018


mongod   --shardsvr
         --dbpath /home/mongodb/base2
         --port 27010


mongod   --configsvr
         --dbpath /home/mongodb/config
         --port 27019
Sharding
mongos --configdb localhost:27019

mongo
> use admin

> db.runCommand({ addshard: "localhost:27018" });
> db.runCommand({ addshard: "localhost:27010" });
Sharding
> db.runCommand( { enablesharding : "blogdb" } );
> db.runCommand( { shardcollection : "posts",
                     key : "shardKey" });
Shard Key?
blogID, content, publishedDate
tags, postID, comments
authorID, title
Shard Key!
blogID, content, publishedDate
tags, postID, comments
authorID, title
Virtual Shards
   VM (8GB 4vP)                   VM (8GB 4vP)

   Mongo   Mongo                  Mongo   Mongo
   Shard   Shard                  Shard   Shard




                   VM (8GB 4vP)

              Mongo    Mongo   Mongo
              Config   Shard   Shard
Conjunto de Dados
758,102 blogs
30,635,902 posts
21,467,340 comments
tam. méd. obj: 1.8mb
Post em JSON
{
    "_id" : ObjectId("4e92239ee4b020f5ff0041fb"),
    "authorID" : "10757528238954720127",
    "blogID" : "1000004267813776424",
    "postID" : "4057761886666222842",
    "published" : ISODate("2011-03-24T12:00:00Z"),
    "title" : "Quis autem vel eum",
    "content" : "Lorem ipsum dolor sit amet...",
    "tags" : [ "voluptatem" , "accusantium" ],
    "comments" : [
       {
       "commentID" : "77618861000004262228",
       "authorID" : "00627699636039248506",
       "published" : ISODate("2011-03-24T12:12:11.645Z"),
       "content" : "Neque porro quisquam est,..."
       }]
}
Map/Reduce
Map/Reduce
                   Local
            MAP            Reduce
                  Reduce
registros
Map/Reduce
                         Local
               MAP               Reduce
                        Reduce
registros



            key,value




            key,value




            key,value
Map/Reduce
                                    Local
               MAP                          Reduce
                                   Reduce
registros
                         shuffle
                        combine

            key,value




            key,value




            key,value
Map/Reduce
                                    Local
               MAP                          Reduce
                                   Reduce
registros
                         shuffle
                        combine

            key,value




            key,value                                saída




            key,value
Map/Reduce
  documentos
                   MAP            Reduce

 política ...
 saúde ...
                saúde, 1
 carros ...
                              saúde, 143
 cinema ...
                futebol, 1
                              futebol, 230
 moda ...
 futebol ...
                              política, 85
 livros ...                   ...
                política, 1
 filmes ...
 ...
                  ...
Map/Reduce MongoDB
Funções JavaScript
> map = function() {
     this.content.split(' ').forEach(
        function(word){ emit( word, 1 ); });
   }

> reduce = function(key, values) {
    var count = 0;
    values.forEach(function(value) { count += value; } );
    return count;
  }

> db.posts.mapReduce(map, reduce, {out: { inline : 1}});
Map/Reduce MongoDB

 Mongo   Mongo     Mongo
 Shard   Shard     Shard




         mongos

         dispara
Map/Reduce MongoDB
  map      map      map
 reduce   reduce   reduce

 Mongo    Mongo    Mongo
 Shard    Shard    Shard




          mongos
Map/Reduce MongoDB
 reduce

 Mongo    Mongo    Mongo
 Shard    Shard    Shard




          mongos
Tópicos
TF-IDF Distribuído
para recomendação de Tags
TF-IDF
Métrica de Relevância
Palavra x Tag x Global
TF-IDF
TF: Frequência do Termo
               |t|
   tf(t,d) =
               |T|
IDF: Frequência inversa nos documentos
                        |D|
   idf(t,D) = log
                  |{d ∈ D : t ∈ d}|

tf x idf (t,d,D) = tf(t,d) x idf(t,D)
TF-IDF
Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.
Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.
Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
N = 70, D = 100

Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.
Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
N = 70, D = 100

Lorem ipsum dolor sit amet, consectetur
                                                  tf(magma,d) = 2/70
                                                  idf(magma,D) = 100/4
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.
Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
N = 70, D = 100

Lorem ipsum dolor sit amet, consectetur
                                                  tf(magma,d) = 2/70
                                                  idf(magma,D) = 100/4
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
                                                  tf-idf(magna,d,D) = 0,09
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.
Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
N = 70, D = 100

Lorem ipsum dolor sit amet, consectetur
                                                  tf(magma,d) = 2/70
                                                  idf(magma,D) = 100/4
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
                                                  tf-idf(magna,d,D) = 0,09
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.                             tf(in,d) = 3/70
Duis aute irure dolor in reprehenderit in         idf(in,D) = 100/65
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF
N = 70, D = 100

Lorem ipsum dolor sit amet, consectetur
                                                  tf(magma,d) = 2/70
                                                  idf(magma,D) = 100/4
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
                                                  tf-idf(magna,d,D) = 0,09
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.                             tf(in,d) = 3/70
Duis aute irure dolor in reprehenderit in         idf(in,D) = 100/65
voluptate velit esse cillum dolore eu fugiat
nulla pariatur.                                   tf-idf(in,d,D) = 0,01
Excepteur sint magna occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
TF-IDF Map/Reduce
Valores necessários:

n: Ocorrências de p em uma tag ( Tarefa 1 )
N: Nº palavras em uma tag ( Tarefa 2 )
d: Nº de tags que p aparece ( Tarefa 3 )
D: Total de tags ( Tarefa 2 )
TF-IDF Tarefa 1
    Entrada                 MAP                   Reduce

       Posts
{ tags, conteúdo }


                     { tag , palavra } , 1

                                       somatório da palavra para a tag

                                             { tag , palavra } , n
TF-IDF Tarefa 1
Map

function(){
   var tags = this.tags;
   this.content.split(' ').
      forEach(function(sWord){
         tags.forEach(function(sTag){
           emit ( { tag: sTag , word: sWord } , 1 );
         });
   });
};
TF-IDF Tarefa 1
Reduce

function( key , values ){
   var count = 0;
   values.forEach( function(value) {
       count += value;
   });
   return count;
};
TF-IDF Tarefa 1
Resultado

{_id:   {tag:"saúde", word:"doença" } values : 98 }
{_id:   {tag:"política", word:"leis" } values : 13 }
{_id:   {tag:"saúde", word:"saúde" } values : 32 }
{_id:   {tag:"política", word:"crise" } values : 45 }
{_id:   {tag:"saúde", word:"corpo" } values : 98 }
{_id:   {tag:"saúde", word:"para" } values : 34 }
{_id:   {tag:"2012", word:"de" } values : 65 }
...
TF-IDF Tarefa 2
    Entrada            MAP             Reduce

{ tag, palavra } , n



                       tag , n

                                 somatório dos contadores

                                        tag , N
TF-IDF Tarefa 2
Resultado

{_id:   "saúde", values : 670 }
{_id:   "política", values : 830 }
{_id:   "futebol", values : 700 }
{_id:   "2012", values : 1500 }
...


Combina o resultado com o anterior
TF-IDF Tarefa 2
Resultado

{tag:"saúde", word:"doença" } n:98, N:670
{tag:"política", word:"leis" } n:13, N:830
{tag:"saúde", word:"saúde" } n:32, N:670
{tag:"política", word:"crise" } n:45, N:830
{tag:"saúde", word:"corpo" } n:98, N:670
{tag:"saúde", word:"para" } n:34, N:670
{tag:"2012", word:"de" } n:65, N:1500
...
TF-IDF Tarefa 3
    Entrada              MAP                   Reduce

{ tag, palavra } , n



                       palavra , 1

                                     documentos que a palavra aparece

                                              palavra , d
TF-IDF Tarefa 3
Resultado

{_id:   "doença", values : 45 }
{_id:   "leis", values : 23 }
{_id:   "saúde", values : 80 }
{_id:   "crise", values : 41 }
{_id:   "corpo", values : 30 }
{_id:   "para", values : 350 }
{_id:   "de", values : 480 }
...


Combina resultados anteriores
TF-IDF Cálculo
Resultado

{tag:"saúde", word:"doença" } n:98, N:670, d:45
{tag:"política", word:"leis" } n:13, N:830, d:23
{tag:"saúde", word:"saúde" } n:32, N:670, d:80
{tag:"política", word:"crise" } n:45, N:830, d:41
{tag:"saúde", word:"corpo" } n:98, N:670, d:30
...

> D = db.TFIDF_Tarefa2.count();
> db.TagsTFIDF.find().forEach(function(item){
      item.tfidf = (item.n/item.N)*Math.log(D/item.d)
  });
TF-IDF Resultado
 Saúde       Política     Futebol
   saúde     deputado        gols
    água     presidente      time
  doenças     governo      futebol
     pele      contra       equipe
    corpo      Dilma          gol
 sintomas     ministro     jogador
  animais    Ministério      Copa
 alimentos     Estado       contra
  crianças    política     rodada
   células    Câmara       partida
      ...        ...          ...
Popularidade
PageRank Distribuído
_    __
_    _
_    _
_    _
    PageRank
_    __
_    _
_    _
_    _
    PageRank
_    __
_    _
_    _
_    _
    PageRank
_    __
_    _
_    _
_    _
    PageRank
PageRank
     80   _   _
          _   _




     9_       _
      __      _
PageRank
     80   _   40       _
          _            _

              40

     9_        3       _
      __               _
                   3
                   3
PageRank
     80   _   40       40   _
          _                 _

              40

     9_        3       43   _
      __                    _
                   3
                   3
PageRank Map/Reduce

Tarefa 1:
  Lista de ID usuário x IDs Autores comentados


Tarefa 2:
  Iterações propagando os valores de PageRank
PageRank Tarefa 1
     Entrada                 MAP                     Reduce

        Post
authorID, Comentários



                        userID , authorID


                                            lista de autores comentados por

                                              userID , [authorIDs]
PageRank Tarefa 1
Query
{tags: "saúde"}


Map
function(){
   var idAuthor = this.authorID;
   this.comments.forEach ( function (comment) {
       if (comment.userID!=idAuthor) {
          emit ( comment.userID , [ idAuthor ] );
       }
   });
};
PageRank Tarefa 1
Reduce
function( key , values ){
   var outL = [];
   values.forEach( function(value) {
       outL = outL.concat(value);
   });
   return outL;
};
PageRank Tarefa 1
Resultado
{ _id: "00627699636039248506" ,
  values: [
      "10757528238954720121",
      "40577618866662228425",
      "10000042678137764244",
      ...
  ]
}
PageRank Tarefa 2
    Entrada                MAP                    Reduce

userID , [authorIDs]



                       authorID , PR/N


                                         valor do PageRank de cada Autor

                                           authorID , PageRank
PageRank Tarefa 2
Map

function(){
     var prK = this.value.pr/this.value.outL.length;

     this.value.outL.forEach ( function (authorID) {
         emit ( authorID, { pr:prK , outL:[] , prOld: 0 } );
     });

     if (this.value.outL.length + prK > 0)
        emit ( this._id , {
                  pr: 0 ,
                  outL: this.value.outL ,
                  prOld: this.value.pr } );
};
PageRank Tarefa 2
Reduce
function( key , values ){
   var result = { pr:0 , outL:[] , prOld:0 };
   values.forEach(function(value) {
       result.pr += value.pr;
       result.outL = result.outL.concat(value.outL);
       result.prOld += value.prOld;
   });
   return result;
};


Processo deve executar até PageRank convergir
PageRank Resultado
 Saúde       Política    Futebol
 refugiad      bigbost    medob
  stardoll     militar   valcabra
 coturnon      polibio    gesptec
 welovefr       fator    hugogoes
  fcoelies     tribodo   novoblog
 angelori     hempada    bigbothe
 forbidde     blogdop    blogdoma
     ...          ...       ...
Processo Offline
Desempenho?
Tempo Execução
PageRank: 65.650.470ms (~18h)
TF-IDF: 108.213.056ms (~30h)
Por que?
Memória Compartilhada
Disco Virtual Sata

JS Single-Thread
Map/Reduce JS Locks
Tamanho do Objeto BSON
$olução!
Cloud
Fiber Channel

Dividir em mais $hards
"ticket SERVER-4258 will allow multi-threading"
Reduzir o tamanho do BSON
Próximos Passos
150 Milhões de Posts
Processo Online com mais $hard$
NMF, K-Means em Map/Reduce
Obrigado! Dúvidas?
inf.ufrgs.br/~hdpsantos
(código-fonte e dados)

hdpsantos@inf.ufrgs.br

MongoSP                        Henrique Dias
Julho 13, 2012            Universidade Federal do
                                Rio Grande do Sul
Durabilidade?
Reparar os Dados
repairDatabase()
versões anteriores

hoje: journaling
Backup dos Dados
mongoexport - json, csv
mongodump - bson
Google
Compute Engine
AWS Free Usage Tier

Teste com Single Shard
● EC2 m1.xlarge
● EBS 20GB
AWS Free Usage Tier

Teste com Single Shard
● EC2 m1.xlarge
● EBS 20GB


     Mesmo desempenho!
            (para single shard)
Nossa Infra-estrutura?
Um Dell Server

          4 Xeon Quad-core
          24 GB RAM
          2 x 1TB SATA
Coleta
 Mongo      Mongo                  Mongo
 Shard      Shard                  Shard

  Mongo        Mongo                       Mongo
  Shard        Shard                       Shard




   Mongo
                     7x mongos
   Config
                    70 Coletores

Mais conteúdo relacionado

Destaque

Acta constitucion
Acta constitucionActa constitucion
Acta constitucionlancord2000
 
Ugur KayserilioğLu Tr Rev5
Ugur KayserilioğLu Tr Rev5Ugur KayserilioğLu Tr Rev5
Ugur KayserilioğLu Tr Rev5ukayserilioglu
 
Angry birds na vida real
Angry birds na vida realAngry birds na vida real
Angry birds na vida realhumorA2011
 
Yokohama.rb Kaja推薦
Yokohama.rb Kaja推薦Yokohama.rb Kaja推薦
Yokohama.rb Kaja推薦joker1007
 
Ebooster6 1
Ebooster6 1Ebooster6 1
Ebooster6 1Fren Yin
 
Consumo de comida chatarra semanal
Consumo de comida chatarra semanalConsumo de comida chatarra semanal
Consumo de comida chatarra semanalJack Ampuero
 
Pnl 2 ceb - sonho-ou_realidade
Pnl   2 ceb - sonho-ou_realidadePnl   2 ceb - sonho-ou_realidade
Pnl 2 ceb - sonho-ou_realidadeO Ciclista
 
Turk Savunma Sanayii Ürünleri 2012
Turk Savunma Sanayii Ürünleri 2012Turk Savunma Sanayii Ürünleri 2012
Turk Savunma Sanayii Ürünleri 2012teknoport
 
52 fatos sobre mídias socias 2012
52 fatos sobre mídias socias 201252 fatos sobre mídias socias 2012
52 fatos sobre mídias socias 2012Aline Fonseca
 
2012 06-06 - momentos musicais
2012 06-06 - momentos musicais2012 06-06 - momentos musicais
2012 06-06 - momentos musicaisO Ciclista
 
Natalie 句子
Natalie 句子Natalie 句子
Natalie 句子sulien0701
 
Clase 2 construccion9_2013_informes
Clase 2 construccion9_2013_informesClase 2 construccion9_2013_informes
Clase 2 construccion9_2013_informesLuis Stolz
 
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012coffeesofi
 
Como crear una blog en blogger marcony
Como crear una blog en blogger marconyComo crear una blog en blogger marcony
Como crear una blog en blogger marconymarcopapa
 

Destaque (17)

Memeliharaalat
MemeliharaalatMemeliharaalat
Memeliharaalat
 
Acta constitucion
Acta constitucionActa constitucion
Acta constitucion
 
Ugur KayserilioğLu Tr Rev5
Ugur KayserilioğLu Tr Rev5Ugur KayserilioğLu Tr Rev5
Ugur KayserilioğLu Tr Rev5
 
Angry birds na vida real
Angry birds na vida realAngry birds na vida real
Angry birds na vida real
 
Yokohama.rb Kaja推薦
Yokohama.rb Kaja推薦Yokohama.rb Kaja推薦
Yokohama.rb Kaja推薦
 
Ebooster6 1
Ebooster6 1Ebooster6 1
Ebooster6 1
 
ระดับครูผู้ช่วยนวัตกรรม
ระดับครูผู้ช่วยนวัตกรรมระดับครูผู้ช่วยนวัตกรรม
ระดับครูผู้ช่วยนวัตกรรม
 
Consumo de comida chatarra semanal
Consumo de comida chatarra semanalConsumo de comida chatarra semanal
Consumo de comida chatarra semanal
 
Pnl 2 ceb - sonho-ou_realidade
Pnl   2 ceb - sonho-ou_realidadePnl   2 ceb - sonho-ou_realidade
Pnl 2 ceb - sonho-ou_realidade
 
Turk Savunma Sanayii Ürünleri 2012
Turk Savunma Sanayii Ürünleri 2012Turk Savunma Sanayii Ürünleri 2012
Turk Savunma Sanayii Ürünleri 2012
 
52 fatos sobre mídias socias 2012
52 fatos sobre mídias socias 201252 fatos sobre mídias socias 2012
52 fatos sobre mídias socias 2012
 
Sampel
SampelSampel
Sampel
 
2012 06-06 - momentos musicais
2012 06-06 - momentos musicais2012 06-06 - momentos musicais
2012 06-06 - momentos musicais
 
Natalie 句子
Natalie 句子Natalie 句子
Natalie 句子
 
Clase 2 construccion9_2013_informes
Clase 2 construccion9_2013_informesClase 2 construccion9_2013_informes
Clase 2 construccion9_2013_informes
 
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012
DXN - ΑΝΑΛΥΤΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ΠΡΟΙΟΝΤΩΝ 2012
 
Como crear una blog en blogger marcony
Como crear una blog en blogger marconyComo crear una blog en blogger marcony
Como crear una blog en blogger marcony
 

Semelhante a Análise de Blogs com MongoDB

(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDDomingos Teruel
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Lidando com Código Duplicado - DevInSantos 2013
Lidando com Código Duplicado - DevInSantos 2013Lidando com Código Duplicado - DevInSantos 2013
Lidando com Código Duplicado - DevInSantos 2013Evaldo Junior
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...Vinícius M. Kern
 
Lidando com Código Duplicado - PHP Conference Brasil 2013
Lidando com Código Duplicado - PHP Conference Brasil 2013Lidando com Código Duplicado - PHP Conference Brasil 2013
Lidando com Código Duplicado - PHP Conference Brasil 2013Evaldo Junior
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPaulino Michelazzo
 
Usando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizadosUsando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizadostdc-globalcode
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)PAULO R. DEOLINDO JUNIOR
 

Semelhante a Análise de Blogs com MongoDB (18)

(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDD
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Lidando com Código Duplicado - DevInSantos 2013
Lidando com Código Duplicado - DevInSantos 2013Lidando com Código Duplicado - DevInSantos 2013
Lidando com Código Duplicado - DevInSantos 2013
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...
O que Martinho da Vila entende de BD? (sobre abstrações de abstrações e model...
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides
 
Lidando com Código Duplicado - PHP Conference Brasil 2013
Lidando com Código Duplicado - PHP Conference Brasil 2013Lidando com Código Duplicado - PHP Conference Brasil 2013
Lidando com Código Duplicado - PHP Conference Brasil 2013
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
 
Usando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizadosUsando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizados
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 

Mais de Henrique Dias

No sql system_survey
No sql system_surveyNo sql system_survey
No sql system_surveyHenrique Dias
 
Previsor de Aprovação
Previsor de AprovaçãoPrevisor de Aprovação
Previsor de AprovaçãoHenrique Dias
 
Repositório Social de Serviços Web
Repositório Social de Serviços WebRepositório Social de Serviços Web
Repositório Social de Serviços WebHenrique Dias
 
Web site credibility
Web site credibilityWeb site credibility
Web site credibilityHenrique Dias
 

Mais de Henrique Dias (6)

No sql system_survey
No sql system_surveyNo sql system_survey
No sql system_survey
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Previsor de Aprovação
Previsor de AprovaçãoPrevisor de Aprovação
Previsor de Aprovação
 
Projeto BD
Projeto BDProjeto BD
Projeto BD
 
Repositório Social de Serviços Web
Repositório Social de Serviços WebRepositório Social de Serviços Web
Repositório Social de Serviços Web
 
Web site credibility
Web site credibilityWeb site credibility
Web site credibility
 

Análise de Blogs com MongoDB

  • 1. Big Blog Analysis Sharding e Map/Reduce com MongoDB MongoSP Henrique Dias Julho 13, 2012 Universidade Federal do Rio Grande do Sul
  • 3. Trabalho Analista de T.I. na UFRGS Sistemas em PHP Banco de dados Relacional
  • 4. Trabalho Analista de T.I. na UFRGS Sistemas em PHP Banco de dados Relacional
  • 5. Pesquisa Mestrando na UFRGS Mineração de Dados Cluster, Paralelismo, Distribuído
  • 6. Pesquisa Mestrando na UFRGS Mineração de Dados Cluster, Paralelismo, Distribuído
  • 8. Projeto de Mestrado Análise de Blogs ● Dados de posts, sem esquema ● Milhões de posts ● Dados distribuídos ● Processamento Paralelo
  • 9. Projeto de Mestrado Análise de Blogs ● Dados de posts, sem esquema ● Milhões de posts ● Dados distribuídos ● Processamento Paralelo MongoDB serve!
  • 10. "Não há bala de prata" Fred Brooks '86
  • 11. Problema Autores de Blogs Populares em Tópicos
  • 12. Problema Autores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB
  • 13. Problema Autores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB Map/Reduce PageRank
  • 14. Problema Autores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB Map/Reduce PageRank recomendação de Tags com TF-IDF distribuído
  • 15. Sharding Shard London Bridge
  • 16. Processos MongoDB mongod --shardsvr Mongo Mongo Mongo Shard Shard Shard mongod --configsvr Mongo tolerância Config à falhas mongos --configdb mongos router
  • 17. Sharding mongod --shardsvr --dbpath /home/mongodb/base --port 27018 mongod --shardsvr --dbpath /home/mongodb/base2 --port 27010 mongod --configsvr --dbpath /home/mongodb/config --port 27019
  • 18. Sharding mongos --configdb localhost:27019 mongo > use admin > db.runCommand({ addshard: "localhost:27018" }); > db.runCommand({ addshard: "localhost:27010" });
  • 19. Sharding > db.runCommand( { enablesharding : "blogdb" } ); > db.runCommand( { shardcollection : "posts", key : "shardKey" });
  • 20. Shard Key? blogID, content, publishedDate tags, postID, comments authorID, title
  • 21. Shard Key! blogID, content, publishedDate tags, postID, comments authorID, title
  • 22. Virtual Shards VM (8GB 4vP) VM (8GB 4vP) Mongo Mongo Mongo Mongo Shard Shard Shard Shard VM (8GB 4vP) Mongo Mongo Mongo Config Shard Shard
  • 23. Conjunto de Dados 758,102 blogs 30,635,902 posts 21,467,340 comments tam. méd. obj: 1.8mb
  • 24. Post em JSON { "_id" : ObjectId("4e92239ee4b020f5ff0041fb"), "authorID" : "10757528238954720127", "blogID" : "1000004267813776424", "postID" : "4057761886666222842", "published" : ISODate("2011-03-24T12:00:00Z"), "title" : "Quis autem vel eum", "content" : "Lorem ipsum dolor sit amet...", "tags" : [ "voluptatem" , "accusantium" ], "comments" : [ { "commentID" : "77618861000004262228", "authorID" : "00627699636039248506", "published" : ISODate("2011-03-24T12:12:11.645Z"), "content" : "Neque porro quisquam est,..." }] }
  • 26. Map/Reduce Local MAP Reduce Reduce registros
  • 27. Map/Reduce Local MAP Reduce Reduce registros key,value key,value key,value
  • 28. Map/Reduce Local MAP Reduce Reduce registros shuffle combine key,value key,value key,value
  • 29. Map/Reduce Local MAP Reduce Reduce registros shuffle combine key,value key,value saída key,value
  • 30. Map/Reduce documentos MAP Reduce política ... saúde ... saúde, 1 carros ... saúde, 143 cinema ... futebol, 1 futebol, 230 moda ... futebol ... política, 85 livros ... ... política, 1 filmes ... ... ...
  • 31. Map/Reduce MongoDB Funções JavaScript > map = function() { this.content.split(' ').forEach( function(word){ emit( word, 1 ); }); } > reduce = function(key, values) { var count = 0; values.forEach(function(value) { count += value; } ); return count; } > db.posts.mapReduce(map, reduce, {out: { inline : 1}});
  • 32. Map/Reduce MongoDB Mongo Mongo Mongo Shard Shard Shard mongos dispara
  • 33. Map/Reduce MongoDB map map map reduce reduce reduce Mongo Mongo Mongo Shard Shard Shard mongos
  • 34. Map/Reduce MongoDB reduce Mongo Mongo Mongo Shard Shard Shard mongos
  • 37. TF-IDF TF: Frequência do Termo |t| tf(t,d) = |T| IDF: Frequência inversa nos documentos |D| idf(t,D) = log |{d ∈ D : t ∈ d}| tf x idf (t,d,D) = tf(t,d) x idf(t,D)
  • 38. TF-IDF Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 39. TF-IDF Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 40. TF-IDF N = 70, D = 100 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 41. TF-IDF N = 70, D = 100 Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4 adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 42. TF-IDF N = 70, D = 100 Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4 adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 43. TF-IDF N = 70, D = 100 Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4 adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. tf(in,d) = 3/70 Duis aute irure dolor in reprehenderit in idf(in,D) = 100/65 voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 44. TF-IDF N = 70, D = 100 Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4 adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. tf(in,d) = 3/70 Duis aute irure dolor in reprehenderit in idf(in,D) = 100/65 voluptate velit esse cillum dolore eu fugiat nulla pariatur. tf-idf(in,d,D) = 0,01 Excepteur sint magna occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 45. TF-IDF Map/Reduce Valores necessários: n: Ocorrências de p em uma tag ( Tarefa 1 ) N: Nº palavras em uma tag ( Tarefa 2 ) d: Nº de tags que p aparece ( Tarefa 3 ) D: Total de tags ( Tarefa 2 )
  • 46. TF-IDF Tarefa 1 Entrada MAP Reduce Posts { tags, conteúdo } { tag , palavra } , 1 somatório da palavra para a tag { tag , palavra } , n
  • 47. TF-IDF Tarefa 1 Map function(){ var tags = this.tags; this.content.split(' '). forEach(function(sWord){ tags.forEach(function(sTag){ emit ( { tag: sTag , word: sWord } , 1 ); }); }); };
  • 48. TF-IDF Tarefa 1 Reduce function( key , values ){ var count = 0; values.forEach( function(value) { count += value; }); return count; };
  • 49. TF-IDF Tarefa 1 Resultado {_id: {tag:"saúde", word:"doença" } values : 98 } {_id: {tag:"política", word:"leis" } values : 13 } {_id: {tag:"saúde", word:"saúde" } values : 32 } {_id: {tag:"política", word:"crise" } values : 45 } {_id: {tag:"saúde", word:"corpo" } values : 98 } {_id: {tag:"saúde", word:"para" } values : 34 } {_id: {tag:"2012", word:"de" } values : 65 } ...
  • 50. TF-IDF Tarefa 2 Entrada MAP Reduce { tag, palavra } , n tag , n somatório dos contadores tag , N
  • 51. TF-IDF Tarefa 2 Resultado {_id: "saúde", values : 670 } {_id: "política", values : 830 } {_id: "futebol", values : 700 } {_id: "2012", values : 1500 } ... Combina o resultado com o anterior
  • 52. TF-IDF Tarefa 2 Resultado {tag:"saúde", word:"doença" } n:98, N:670 {tag:"política", word:"leis" } n:13, N:830 {tag:"saúde", word:"saúde" } n:32, N:670 {tag:"política", word:"crise" } n:45, N:830 {tag:"saúde", word:"corpo" } n:98, N:670 {tag:"saúde", word:"para" } n:34, N:670 {tag:"2012", word:"de" } n:65, N:1500 ...
  • 53. TF-IDF Tarefa 3 Entrada MAP Reduce { tag, palavra } , n palavra , 1 documentos que a palavra aparece palavra , d
  • 54. TF-IDF Tarefa 3 Resultado {_id: "doença", values : 45 } {_id: "leis", values : 23 } {_id: "saúde", values : 80 } {_id: "crise", values : 41 } {_id: "corpo", values : 30 } {_id: "para", values : 350 } {_id: "de", values : 480 } ... Combina resultados anteriores
  • 55. TF-IDF Cálculo Resultado {tag:"saúde", word:"doença" } n:98, N:670, d:45 {tag:"política", word:"leis" } n:13, N:830, d:23 {tag:"saúde", word:"saúde" } n:32, N:670, d:80 {tag:"política", word:"crise" } n:45, N:830, d:41 {tag:"saúde", word:"corpo" } n:98, N:670, d:30 ... > D = db.TFIDF_Tarefa2.count(); > db.TagsTFIDF.find().forEach(function(item){ item.tfidf = (item.n/item.N)*Math.log(D/item.d) });
  • 56. TF-IDF Resultado Saúde Política Futebol saúde deputado gols água presidente time doenças governo futebol pele contra equipe corpo Dilma gol sintomas ministro jogador animais Ministério Copa alimentos Estado contra crianças política rodada células Câmara partida ... ... ...
  • 58. _ __ _ _ _ _ _ _ PageRank
  • 59. _ __ _ _ _ _ _ _ PageRank
  • 60. _ __ _ _ _ _ _ _ PageRank
  • 61. _ __ _ _ _ _ _ _ PageRank
  • 62. PageRank 80 _ _ _ _ 9_ _ __ _
  • 63. PageRank 80 _ 40 _ _ _ 40 9_ 3 _ __ _ 3 3
  • 64. PageRank 80 _ 40 40 _ _ _ 40 9_ 3 43 _ __ _ 3 3
  • 65. PageRank Map/Reduce Tarefa 1: Lista de ID usuário x IDs Autores comentados Tarefa 2: Iterações propagando os valores de PageRank
  • 66. PageRank Tarefa 1 Entrada MAP Reduce Post authorID, Comentários userID , authorID lista de autores comentados por userID , [authorIDs]
  • 67. PageRank Tarefa 1 Query {tags: "saúde"} Map function(){ var idAuthor = this.authorID; this.comments.forEach ( function (comment) { if (comment.userID!=idAuthor) { emit ( comment.userID , [ idAuthor ] ); } }); };
  • 68. PageRank Tarefa 1 Reduce function( key , values ){ var outL = []; values.forEach( function(value) { outL = outL.concat(value); }); return outL; };
  • 69. PageRank Tarefa 1 Resultado { _id: "00627699636039248506" , values: [ "10757528238954720121", "40577618866662228425", "10000042678137764244", ... ] }
  • 70. PageRank Tarefa 2 Entrada MAP Reduce userID , [authorIDs] authorID , PR/N valor do PageRank de cada Autor authorID , PageRank
  • 71. PageRank Tarefa 2 Map function(){ var prK = this.value.pr/this.value.outL.length; this.value.outL.forEach ( function (authorID) { emit ( authorID, { pr:prK , outL:[] , prOld: 0 } ); }); if (this.value.outL.length + prK > 0) emit ( this._id , { pr: 0 , outL: this.value.outL , prOld: this.value.pr } ); };
  • 72. PageRank Tarefa 2 Reduce function( key , values ){ var result = { pr:0 , outL:[] , prOld:0 }; values.forEach(function(value) { result.pr += value.pr; result.outL = result.outL.concat(value.outL); result.prOld += value.prOld; }); return result; }; Processo deve executar até PageRank convergir
  • 73. PageRank Resultado Saúde Política Futebol refugiad bigbost medob stardoll militar valcabra coturnon polibio gesptec welovefr fator hugogoes fcoelies tribodo novoblog angelori hempada bigbothe forbidde blogdop blogdoma ... ... ...
  • 75. Tempo Execução PageRank: 65.650.470ms (~18h) TF-IDF: 108.213.056ms (~30h)
  • 76. Por que? Memória Compartilhada Disco Virtual Sata JS Single-Thread Map/Reduce JS Locks Tamanho do Objeto BSON
  • 77. $olução! Cloud Fiber Channel Dividir em mais $hards "ticket SERVER-4258 will allow multi-threading" Reduzir o tamanho do BSON
  • 78. Próximos Passos 150 Milhões de Posts Processo Online com mais $hard$ NMF, K-Means em Map/Reduce
  • 79. Obrigado! Dúvidas? inf.ufrgs.br/~hdpsantos (código-fonte e dados) hdpsantos@inf.ufrgs.br MongoSP Henrique Dias Julho 13, 2012 Universidade Federal do Rio Grande do Sul
  • 81. Reparar os Dados repairDatabase() versões anteriores hoje: journaling
  • 82. Backup dos Dados mongoexport - json, csv mongodump - bson
  • 84. AWS Free Usage Tier Teste com Single Shard ● EC2 m1.xlarge ● EBS 20GB
  • 85. AWS Free Usage Tier Teste com Single Shard ● EC2 m1.xlarge ● EBS 20GB Mesmo desempenho! (para single shard)
  • 87. Um Dell Server 4 Xeon Quad-core 24 GB RAM 2 x 1TB SATA
  • 88. Coleta Mongo Mongo Mongo Shard Shard Shard Mongo Mongo Mongo Shard Shard Shard Mongo 7x mongos Config 70 Coletores