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)

mongodb
July 25, 2012
610

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. BREAKING
    PARADIGMS
    How I used
    in my graduation project
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. sexta-feira, 6 de julho de 12

    View full-size slide

  6. sexta-feira, 6 de julho de 12

    View full-size slide

  7. sexta-feira, 6 de julho de 12

    View full-size slide

  8. sexta-feira, 6 de julho de 12

    View full-size slide

  9. sexta-feira, 6 de julho de 12

    View full-size slide

  10. sexta-feira, 6 de julho de 12

    View full-size slide

  11. sexta-feira, 6 de julho de 12

    View full-size slide

  12. sexta-feira, 6 de julho de 12

    View full-size slide

  13. sexta-feira, 6 de julho de 12

    View full-size slide

  14. sexta-feira, 6 de julho de 12

    View full-size slide

  15. sexta-feira, 6 de julho de 12

    View full-size slide

  16. sexta-feira, 6 de julho de 12

    View full-size slide

  17. sexta-feira, 6 de julho de 12

    View full-size slide

  18. sexta-feira, 6 de julho de 12

    View full-size slide

  19. sexta-feira, 6 de julho de 12

    View full-size slide

  20. sexta-feira, 6 de julho de 12

    View full-size slide

  21. sexta-feira, 6 de julho de 12

    View full-size slide

  22. sexta-feira, 6 de julho de 12

    View full-size slide

  23. sexta-feira, 6 de julho de 12

    View full-size slide

  24. sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  35. IT`S A SELFISH TALK
    you’re right...
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  38. sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  44. while you seek
    your graduation
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  47. There is not enough time
    to teach everything.
    sexta-feira, 6 de julho de 12

    View full-size slide

  48. And it all comes down to
    your graduation project.
    If you're doing IT.
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  51. LET’S GET OUR HANDS DIRTY.
    sexta-feira, 6 de julho de 12

    View full-size slide

  52. LET’S GET OUR HANDS DIRTY.
    I HAD TO GRADUATE, TOO.
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  59. I didn’t know Rails.
    Nice challenge. And paradigm.
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  65. WHY IT WAS HARD #3
    requirements are still
    unstable...
    …development needs
    to be fast.
    sexta-feira, 6 de julho de 12

    View full-size slide

  66. WHY IT WAS HARD #4
    business rules are
    complicated...
    …many relations
    and joins.
    sexta-feira, 6 de julho de 12

    View full-size slide

  67. sexta-feira, 6 de julho de 12

    View full-size slide

  68. WHY IT WAS HARD #5
    FIXED
    SCHEMA
    …objects can be
    unique.
    sexta-feira, 6 de julho de 12

    View full-size slide

  69. REVIEW
    Unstable requirements
    Hard to model the business rules
    Slow development
    WHY IT WAS HARD
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

  71. MySQL
    Firebird
    PostgreSQL
    SQLite
    Oracle
    DB2
    CouchDB
    BigData
    Vertica
    Cassandra
    MemcacheDB
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  83. WHY IT SHINES
    Secondary indexes
    Up to 64 indexes per collection
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  90. WHY IT SHINES
    Scaling
    Horizontal scaling is plain easy
    sexta-feira, 6 de julho de 12

    View full-size slide

  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

    View full-size slide

  92. how it
    HELPED ME
    sexta-feira, 6 de julho de 12

    View full-size slide

  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

    View full-size slide

  94. "With great power
    comes great responsibility"
    - Uncle Ben
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

  96. RELATIONAL MODEL
    DOCUMENTS
    no redundancy,
    normal forms
    no joins,
    redundancy is ok
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  100. LINKED DOCUMENTS
    Mostly used for many to many
    relationships;
    Good when data duplication is
    a problem;
    sexta-feira, 6 de julho de 12

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  107. DOCUMENTS
    Work with data as it is
    Development is fast
    Consistency is up to you
    REVIEW
    sexta-feira, 6 de julho de 12

    View full-size slide

  108. MAP REDUCE IS HOT!
    ALSO
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  111. SOME LIMITATIONS
    It uses memory-mapped files
    Best to run on 64-bit
    sexta-feira, 6 de julho de 12

    View full-size slide

  112. SOME LIMITATIONS
    It uses memory-mapped files
    Memory for the data will be
    allocated automatically
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  118. SOME LIMITATIONS
    Work with 1 document at once
    No transactions support
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  123. our idea...
    WAS BUILT FROM THE GROUND UP
    USING MONGODB
    sexta-feira, 6 de julho de 12

    View full-size slide

  124. sexta-feira, 6 de julho de 12

    View full-size slide

  125. IT WORKS VERY WELL
    MongoDB was a great choice
    sexta-feira, 6 de julho de 12

    View full-size slide

  126. IT WORKS VERY WELL
    Even for ‘small’ projects
    MongoDB was a great choice
    sexta-feira, 6 de julho de 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  134. Thanks!
    JEFFERSON Q. VENERANDO
    @shamanime
    Thanks Stephanie Pellegrino for the illustrations
    http://shamani.me
    sexta-feira, 6 de julho de 12

    View full-size slide