Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB Sao Paulo 2012: Usando <<atomic modifie...

mongodb
July 13, 2012
230

MongoDB Sao Paulo 2012: Usando <<atomic modifiers>> para estatísticas de acessos no Projeto SciELO

Fabio Batalha, IT Manager +Developer, SciELO FapUNIFESP
Study of Case of MongoDB Atomic Operators to register logaccess according to Apache HTTP Server logs. This project is a study case even for us, that was trying to figure out how to use the MongoDB Atomic Operators.

mongodb

July 13, 2012
Tweet

Transcript

  1. Sobre SciELO Publicação de Periódicos Científicos no contexto Open Access.

    Atuando na América Latina, Caribe, Portugal, Espanha e Africa do Sul O SciELO Brasil representa a maior coleção da Rede SciELO com: 32 milhões de acessos mensal • • • •
  2. Analytics SciELO Projeto criado para atender a demanda de obter

    uma ferramenta confiável para contabilizar acessos ao site SciELO Periódicos. MongoDB foi inserido no contexto em novembro de 2011com o objetivo de realizar uma prova de conceito. Os “Atomic Modifiers” do MongoDB viabilizaram o projeto. • • •
  3. Analytics SciELO Criar um sistema capaz de: contabilizar acessos as

    páginas do SciELO que se classificam em: Páginas de Revistas Páginas de Fascículos Páginas de Artigos permitir contextualizar os acessos por: Revistas (Páginas de Revistas, Fascículos e Artigos) • • • • • • •
  4. Atomic Modifiers Porque os “Atomic Modifiers” foram decisivos para este

    projeto? Estatísticas de Acesso possuem uma crescimento orgânico. Os “Atomic Modifiers” do MongoDB são ideais para registrar estatísticas de acessos pois com eles é possível criar/atualizar documentos sem que eles existam previamente. A recuperação das estatísticas também é muito facil. • • •
  5. Atomic Modifiers update( ) db.collection.update( criteria, objNew, upsert, multi )

    “Modifier Operators” existentes $inc, $set, $unset, $push, $pushAll, $adToSet, $each, $pop, $pull, $pullAll, $rename, $bit “Modifier Operators” em uso no projeto $inc, $set $inc Incrementa o campo associado ao modificador pelo valor inteiro indicado. { ‘$inc’ : { field : value } } $set Define um valor ao campo associado ao modificador. Qualquer valor é permitido. { ‘$set’ : { field : value } }
  6. Atomic Modifiers update( ) db.collection.update( criteria, objNew, upsert, multi )

    criteria Seleção de documentos a serem modificados. objNew Objeto que atualizará o documento recuperado por “criteria”. upsert (True) É o segredo para viabilizar registros de estatísticas de acessos, upsert significa: “atualiza se existir, caso contrário cria (um único documento)” multi Indica se todos documentos recuperados por “criteria” serão atualizados.
  7. Atomic Modifiers update( ) db.collection.update( criteria, objNew, upsert, multi )

    >>> analytics.find_one({'site':'www.scielo.br'}) >>> analytics.update({'site':'www.scielo.br'},{'$inc':{'201201':1}}) >>> analytics.find_one({'site':'www.scielo.br'}) >>> analytics.update({'site':'www.scielo.br'},{'$inc':{'201201':1}},True) >>> analytics.find_one({'site':'www.scielo.br'}) {u'_id': ObjectId('4ff5fc800646b427a8b778ed'), u'201201': 1, u'site': u'www.scielo.br'} >>> analytics.update({'site':'www.scielo.br'},{'$inc':{'201201':1}}) >>> analytics.find_one({'site':'www.scielo.br'}) {u'_id': ObjectId('4ff6009e0646b427a8b778ee'), u'201201': 2, u'site': u'www.scielo.br'}
  8. Atomic Modifiers save( ) db.collection.save( objNew ) save é apenas

    uma atalho para facilitar o uso do upsert. O upsert é definido com true por padrão quando usamos o metodo save. >>> analytics.find_one({'site':'www.scielo.br'}) >>> analytics.save({'site':'www.scielo.br'}) ObjectId('4ff5ffbe1156c130c1000007') >>> analytics.find_one({'site':'www.scielo.br'}) {u'_id': ObjectId('4ff5ffbe1156c130c1000007'), u'site': u'www.scielo.br'}