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

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

D8fc2580cfaca035f666d9e4ee79a7f7?s=47 mongodb
July 25, 2012
570

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.

D8fc2580cfaca035f666d9e4ee79a7f7?s=128

mongodb

July 25, 2012
Tweet

Transcript

  1. BREAKING PARADIGMS How I used in my graduation project sexta-feira,

    6 de julho de 12
  2. BREAK PARADIGMS ING sexta-feira, 6 de julho de 12

  3. PARADIGM pattern or model; assumptions, concepts, values and practices; sexta-feira,

    6 de julho de 12
  4. how a paradigm is created sexta-feira, 6 de julho de

    12
  5. sexta-feira, 6 de julho de 12

  6. sexta-feira, 6 de julho de 12

  7. sexta-feira, 6 de julho de 12

  8. sexta-feira, 6 de julho de 12

  9. sexta-feira, 6 de julho de 12

  10. sexta-feira, 6 de julho de 12

  11. sexta-feira, 6 de julho de 12

  12. sexta-feira, 6 de julho de 12

  13. sexta-feira, 6 de julho de 12

  14. sexta-feira, 6 de julho de 12

  15. sexta-feira, 6 de julho de 12

  16. sexta-feira, 6 de julho de 12

  17. sexta-feira, 6 de julho de 12

  18. sexta-feira, 6 de julho de 12

  19. sexta-feira, 6 de julho de 12

  20. sexta-feira, 6 de julho de 12

  21. sexta-feira, 6 de julho de 12

  22. sexta-feira, 6 de julho de 12

  23. sexta-feira, 6 de julho de 12

  24. sexta-feira, 6 de julho de 12

  25. is about... this talk sexta-feira, 6 de julho de 12

  26. paradigms is about... this talk sexta-feira, 6 de julho de

    12
  27. college paradigms is about... this talk sexta-feira, 6 de julho

    de 12
  28. monkeys college paradigms is about... this talk sexta-feira, 6 de

    julho de 12
  29. dragon ball z monkeys college paradigms is about... this talk

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

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

    talk sexta-feira, 6 de julho de 12
  32. a cool software is about... this talk mongoDB dragon ball

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

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

    college paradigms a cool software challenges sexta-feira, 6 de julho de 12
  35. IT`S A SELFISH TALK you’re right... sexta-feira, 6 de julho

    de 12
  36. @shamanime Jefferson Queiroz Venerando sexta-feira, 6 de julho de 12

  37. @shamanime Jefferson Queiroz Venerando sexta-feira, 6 de julho de 12

  38. sexta-feira, 6 de julho de 12

  39. COLLEGE it all starts with sexta-feira, 6 de julho de

    12
  40. THERE’S A TRUTH ABOUT COLLEGE sexta-feira, 6 de julho de

    12
  41. how I think it will be... sexta-feira, 6 de julho

    de 12
  42. how I think it will be... what my mom thinks...

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

    what it really is... sexta-feira, 6 de julho de 12
  44. while you seek your graduation sexta-feira, 6 de julho de

    12
  45. You face a lot of paradigms. sexta-feira, 6 de julho

    de 12
  46. 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
  47. There is not enough time to teach everything. sexta-feira, 6

    de julho de 12
  48. And it all comes down to your graduation project. If

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

    6 de julho de 12
  50. 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
  51. LET’S GET OUR HANDS DIRTY. sexta-feira, 6 de julho de

    12
  52. LET’S GET OUR HANDS DIRTY. I HAD TO GRADUATE, TOO.

    sexta-feira, 6 de julho de 12
  53. I worked at an advertising agency sexta-feira, 6 de julho

    de 12
  54. I worked at an advertising agency it lacked good software

    sexta-feira, 6 de julho de 12
  55. I worked at an advertising agency it lacked good software

    too much hard labour to compensate it sexta-feira, 6 de julho de 12
  56. 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
  57. a software for control of advertising agencies + Ruby on

    Rails and a relational database sexta-feira, 6 de julho de 12
  58. 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
  59. I didn’t know Rails. Nice challenge. And paradigm. sexta-feira, 6

    de julho de 12
  60. I learned it. And it wasn’t that bad. sexta-feira, 6

    de julho de 12
  61. the BIG PROBLEM really sexta-feira, 6 de julho de 12

  62. DATA MODELING sexta-feira, 6 de julho de 12

  63. WHY IT WAS HARD #1 requirements are NOT fully defined

    in the start... …it changes over development. sexta-feira, 6 de julho de 12
  64. 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
  65. WHY IT WAS HARD #3 requirements are still unstable... …development

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

    relations and joins. sexta-feira, 6 de julho de 12
  67. sexta-feira, 6 de julho de 12

  68. WHY IT WAS HARD #5 FIXED SCHEMA …objects can be

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

    development WHY IT WAS HARD sexta-feira, 6 de julho de 12
  70. LET’S LOOK AT THE OTHER SIDE OF THE COIN sexta-feira,

    6 de julho de 12
  71. MySQL Firebird PostgreSQL SQLite Oracle DB2 CouchDB BigData Vertica Cassandra

    MemcacheDB sexta-feira, 6 de julho de 12
  72. WHY SHINES sexta-feira, 6 de julho de 12

  73. WHY IT SHINES Document data model sexta-feira, 6 de julho

    de 12
  74. WHY IT SHINES Document data model It’s schema free sexta-feira,

    6 de julho de 12
  75. WHY IT SHINES Document data model It’s n-dimensional sexta-feira, 6

    de julho de 12
  76. WHY IT SHINES Document data model No joins sexta-feira, 6

    de julho de 12
  77. WHY IT SHINES Document data model It has a... sexta-feira,

    6 de julho de 12
  78. JSON STRUCTURE sexta-feira, 6 de julho de 12

  79. JSON STRUCTURE FRIDAY 13 sexta-feira, 6 de julho de 12

  80. WHY IT SHINES Ad hoc queries sexta-feira, 6 de julho

    de 12
  81. WHY IT SHINES Ad hoc queries Dynamic queries sexta-feira, 6

    de julho de 12
  82. WHY IT SHINES Secondary indexes sexta-feira, 6 de julho de

    12
  83. WHY IT SHINES Secondary indexes Up to 64 indexes per

    collection sexta-feira, 6 de julho de 12
  84. WHY IT SHINES Replication sexta-feira, 6 de julho de 12

  85. WHY IT SHINES Replication Used for redundancy sexta-feira, 6 de

    julho de 12
  86. WHY IT SHINES Replication Automated failover sexta-feira, 6 de julho

    de 12
  87. WHY IT SHINES Speed and durability sexta-feira, 6 de julho

    de 12
  88. WHY IT SHINES Speed and durability Journaling or replication sexta-feira,

    6 de julho de 12
  89. WHY IT SHINES Scaling sexta-feira, 6 de julho de 12

  90. WHY IT SHINES Scaling Horizontal scaling is plain easy sexta-feira,

    6 de julho de 12
  91. WHY IT SHINES REVIEW Document data model Ad hoc queries

    Secondary indexes Replication Speed and durability Scaling sexta-feira, 6 de julho de 12
  92. how it HELPED ME sexta-feira, 6 de julho de 12

  93. 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
  94. "With great power comes great responsibility" - Uncle Ben sexta-feira,

    6 de julho de 12
  95. DON’T LET YOUR DOCUMENTS BECOME A MESS sexta-feira, 6 de

    julho de 12
  96. RELATIONAL MODEL DOCUMENTS no redundancy, normal forms no joins, redundancy

    is ok sexta-feira, 6 de julho de 12
  97. DOCUMENTS They are self-contained One query returns the whole thing

    sexta-feira, 6 de julho de 12
  98. DOCUMENTS Performance++ One query returns all I need sexta-feira, 6

    de julho de 12
  99. DOCUMENTS Can be liked or embed sexta-feira, 6 de julho

    de 12
  100. LINKED DOCUMENTS Mostly used for many to many relationships; Good

    when data duplication is a problem; sexta-feira, 6 de julho de 12
  101. 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
  102. 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
  103. 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
  104. 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
  105. { "_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
  106. { "_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
  107. DOCUMENTS Work with data as it is Development is fast

    Consistency is up to you REVIEW sexta-feira, 6 de julho de 12
  108. MAP REDUCE IS HOT! ALSO sexta-feira, 6 de julho de

    12
  109. not everything is FLOWERS sexta-feira, 6 de julho de 12

  110. SOME LIMITATIONS It uses memory-mapped files sexta-feira, 6 de julho

    de 12
  111. SOME LIMITATIONS It uses memory-mapped files Best to run on

    64-bit sexta-feira, 6 de julho de 12
  112. SOME LIMITATIONS It uses memory-mapped files Memory for the data

    will be allocated automatically sexta-feira, 6 de julho de 12
  113. SOME LIMITATIONS It uses memory-mapped files Replication is important sexta-feira,

    6 de julho de 12
  114. SOME LIMITATIONS Document size limit 16 MB in MongoDB v2.0

    sexta-feira, 6 de julho de 12
  115. SOME LIMITATIONS Document size limit #1 discourage documents with deep

    levels of nesting sexta-feira, 6 de julho de 12
  116. SOME LIMITATIONS Document size limit #2 performance sexta-feira, 6 de

    julho de 12
  117. SOME LIMITATIONS No transactions support sexta-feira, 6 de julho de

    12
  118. SOME LIMITATIONS Work with 1 document at once No transactions

    support sexta-feira, 6 de julho de 12
  119. SOME LIMITATIONS No BEGIN, COMMIT or ROLLBACK No transactions support

    sexta-feira, 6 de julho de 12
  120. SOME LIMITATIONS Make sure to understand it, too. There are

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

    No transactions, really REVIEW sexta-feira, 6 de julho de 12
  122. in the end WHAT WAS DONE sexta-feira, 6 de julho

    de 12
  123. our idea... WAS BUILT FROM THE GROUND UP USING MONGODB

    sexta-feira, 6 de julho de 12
  124. sexta-feira, 6 de julho de 12

  125. IT WORKS VERY WELL MongoDB was a great choice sexta-feira,

    6 de julho de 12
  126. IT WORKS VERY WELL Even for ‘small’ projects MongoDB was

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

    a great choice sexta-feira, 6 de julho de 12
  128. I GRADUATED sexta-feira, 6 de julho de 12

  129. AND BROKE THE COLLEGE PARADIGM sexta-feira, 6 de julho de

    12
  130. the BECAME A PRODUCT sexta-feira, 6 de julho de 12

  131. WORKING IN PRODUCTION sexta-feira, 6 de julho de 12

  132. LEARNING NEVER ENDS REVIEW sexta-feira, 6 de julho de 12

  133. QUESTIONS? sexta-feira, 6 de julho de 12

  134. Thanks! JEFFERSON Q. VENERANDO @shamanime Thanks Stephanie Pellegrino for the

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