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

MongoDB Sao Paulo 2012: Como usei MongoDB no me...

mongodb
July 25, 2012
620

MongoDB Sao Paulo 2012: Como usei MongoDB no meu projeto de graduação (English)

Jefferson Queiroz Venerando, CTO, Bras Sun
O produto é um sistema integrado de gestão empresarial para agências de publicidade e propaganda. Foi desenvolvido usando Ruby on Rails e MongoDB, o banco não-relacional que escolhi. Usei um banco de dados sem esquemas porque tive dificuldades em modelar o banco com relacionamentos, e MongoDB resolveu todos os problemas que surgiram durante o caminho. A modelagem foi fácil e o acesso aos dados é simples e sem complicações. Essa palestra vai mostrar alguns paradigmas e problemas comuns que surgiram durante o início do desenvolvimento e como MongoDB foi a melhor solução. Também mostrará os problemas que alguém pode ter ao começar a usar NoSQL e como quebrar o gelo e abraçar a solução com bons resultados.

mongodb

July 25, 2012
Tweet

Transcript

  1. a cool software is about... this talk mongoDB dragon ball

    z monkeys college paradigms sexta-feira, 6 de julho de 12
  2. challenges is about... this talk mongoDB dragon ball z monkeys

    college paradigms a cool software sexta-feira, 6 de julho de 12
  3. me is about... this talk mongoDB dragon ball z monkeys

    college paradigms a cool software challenges sexta-feira, 6 de julho de 12
  4. how I think it will be... what my mom thinks...

    sexta-feira, 6 de julho de 12
  5. how I think it will be... what my mom thinks...

    what it really is... sexta-feira, 6 de julho de 12
  6. YOU LEARN PRETTY MUCH... one way to code. one way

    to model your database. one way to document. sexta-feira, 6 de julho de 12
  7. And it all comes down to your graduation project. If

    you're doing IT. sexta-feira, 6 de julho de 12
  8. So you come back to what you have learned. }

    Can you find some paradigms in your way here? sexta-feira, 6 de julho de 12
  9. I worked at an advertising agency it lacked good software

    too much hard labour to compensate it sexta-feira, 6 de julho de 12
  10. I worked at an advertising agency it lacked good software

    too much hard labour to compensate it why not solve this? sexta-feira, 6 de julho de 12
  11. a software for control of advertising agencies + Ruby on

    Rails and a relational database sexta-feira, 6 de julho de 12
  12. a software for control of advertising agencies + Ruby on

    Rails and a relational database LET’S DO IT! sexta-feira, 6 de julho de 12
  13. WHY IT WAS HARD #1 requirements are NOT fully defined

    in the start... …it changes over development. sexta-feira, 6 de julho de 12
  14. WHY IT WAS HARD #2 changes requires migrations... …hard to

    keep track, …a pain to go back and redo. sexta-feira, 6 de julho de 12
  15. WHY IT WAS HARD #3 requirements are still unstable... …development

    needs to be fast. sexta-feira, 6 de julho de 12
  16. WHY IT WAS HARD #4 business rules are complicated... …many

    relations and joins. sexta-feira, 6 de julho de 12
  17. WHY IT WAS HARD #5 FIXED SCHEMA …objects can be

    unique. sexta-feira, 6 de julho de 12
  18. REVIEW Unstable requirements Hard to model the business rules Slow

    development WHY IT WAS HARD sexta-feira, 6 de julho de 12
  19. WHY IT SHINES Secondary indexes Up to 64 indexes per

    collection sexta-feira, 6 de julho de 12
  20. WHY IT SHINES REVIEW Document data model Ad hoc queries

    Secondary indexes Replication Speed and durability Scaling sexta-feira, 6 de julho de 12
  21. SCHEMALESS represent data as it really is; no migrations =

    more time developing; one query gives all you need; sexta-feira, 6 de julho de 12
  22. LINKED DOCUMENTS Mostly used for many to many relationships; Good

    when data duplication is a problem; sexta-feira, 6 de julho de 12
  23. EMBED DOCUMENTS Yo dawg, I heard you like documents so

    I put a document in your document so you can have many documents in your document. sexta-feira, 6 de julho de 12
  24. MAKING IT REAL #1 // representação de um job {

    "_id" : ObjectId( "4fa969cef8955b304e000056" ), "campanha" : "Promoção de férias sup. Thiago", "cliente_id" : ObjectId( "4f271132f8955b177a000019" ), "data_entrada" : Date( 1337040000000 ), "data_entrega" : Date( 1337040000000 ), "func_nome" : "Jefferson Queiroz", "func_usuario" : "jefferson", "funcionario_id" : ObjectId( "4f271132f8955b177a000004" ), "numero" : 4, "status" : "produção", "titulo" : "Férias legais", "updated_at" : Date( 1336502734000 ), "verba" : "4500.0" } sexta-feira, 6 de julho de 12
  25. MAKING IT REAL #1 // representação de um job {

    "_id" : ObjectId( "4fa969cef8955b304e000056" ), "campanha" : "Promoção de férias sup. Thiago", "cliente_id" : ObjectId( "4f271132f8955b177a000019" ), "data_entrada" : Date( 1337040000000 ), "data_entrega" : Date( 1337040000000 ), "func_nome" : "Jefferson Queiroz", "func_usuario" : "jefferson", "funcionario_id" : ObjectId( "4f271132f8955b177a000004" ), "numero" : 4, "status" : "produção", "titulo" : "Férias legais", "updated_at" : Date( 1336502734000 ), "verba" : "4500.0" } sexta-feira, 6 de julho de 12
  26. MAKING IT REAL #2 // inserir cliente e telefones >

    db.clientes.insert({ nome: 'Jefferson Queiroz Venerando', cidade: 'Iturama', telefones: [ numero: '34 5687-1432', op: 'TIM'}, numero: '34 3442-4321', op: 'Vivo'} ] }) sexta-feira, 6 de julho de 12
  27. { "_id" : ObjectId( "4f2c0bec740e950417000038" ), "created_at" : Date( 1328286700000

    ), "desconto_cliente" : 0, "formato" : "40x50", "func_nome" : "Jefferson", "func_usuario" : "jefferson", "funcionario_id" : ObjectId( "4f271132f8955b177a000001" ), "job_id" : ObjectId( "4f2acb2d740e950417000017" ), "servico_id" : ObjectId( "4f271133f8955b177a00002e" ), "status" : "criação", "titulo" : "Outdoor", "updated_at" : Date( 1334175800000 ), "valor_fornecedores" : [ { "_id" : ObjectId( "4f457739f8955b5420000001" ), "fornecedor_id" : ObjectId( "4f271132f8955b177a00001a" ), "valor" : "321.0" }, { "_id" : ObjectId( "4f457739f8955b5420000002" ), "fornecedor_id" : ObjectId( "4f271132f8955b177a00001b" ), "valor" : "123.0" } ], "vlr_com_desconto" : "50.0", "vlr_fornecedores" : "444.0", "vlr_servico" : "50.0", "vlr_total" : "494.0" } sexta-feira, 6 de julho de 12
  28. { "_id" : ObjectId( "4f2c0bec740e950417000038" ), "created_at" : Date( 1328286700000

    ), "desconto_cliente" : 0, "formato" : "40x50", "func_nome" : "Jefferson", "func_usuario" : "jefferson", "funcionario_id" : ObjectId( "4f271132f8955b177a000001" ), "job_id" : ObjectId( "4f2acb2d740e950417000017" ), "servico_id" : ObjectId( "4f271133f8955b177a00002e" ), "status" : "criação", "titulo" : "Outdoor", "updated_at" : Date( 1334175800000 ), "valor_fornecedores" : [ { "_id" : ObjectId( "4f457739f8955b5420000001" ), "fornecedor_id" : ObjectId( "4f271132f8955b177a00001a" ), "valor" : "321.0" }, { "_id" : ObjectId( "4f457739f8955b5420000002" ), "fornecedor_id" : ObjectId( "4f271132f8955b177a00001b" ), "valor" : "123.0" } ], "vlr_com_desconto" : "50.0", "vlr_fornecedores" : "444.0", "vlr_servico" : "50.0", "vlr_total" : "494.0" } sexta-feira, 6 de julho de 12
  29. DOCUMENTS Work with data as it is Development is fast

    Consistency is up to you REVIEW sexta-feira, 6 de julho de 12
  30. SOME LIMITATIONS It uses memory-mapped files Memory for the data

    will be allocated automatically sexta-feira, 6 de julho de 12
  31. SOME LIMITATIONS Document size limit #1 discourage documents with deep

    levels of nesting sexta-feira, 6 de julho de 12
  32. SOME LIMITATIONS Make sure to understand it, too. There are

    more... sexta-feira, 6 de julho de 12
  33. SOME LIMITATIONS No ACID Be sure to have enough memory

    No transactions, really REVIEW sexta-feira, 6 de julho de 12
  34. IT WORKS VERY WELL Even for ‘small’ projects MongoDB was

    a great choice sexta-feira, 6 de julho de 12
  35. IT WORKS VERY WELL No headaches so far MongoDB was

    a great choice sexta-feira, 6 de julho de 12
  36. Thanks! JEFFERSON Q. VENERANDO @shamanime Thanks Stephanie Pellegrino for the

    illustrations http://shamani.me sexta-feira, 6 de julho de 12