Slide 1

Slide 1 text

BREAKING PARADIGMS How I used in my graduation project sexta-feira, 6 de julho de 12

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

sexta-feira, 6 de julho de 12

Slide 6

Slide 6 text

sexta-feira, 6 de julho de 12

Slide 7

Slide 7 text

sexta-feira, 6 de julho de 12

Slide 8

Slide 8 text

sexta-feira, 6 de julho de 12

Slide 9

Slide 9 text

sexta-feira, 6 de julho de 12

Slide 10

Slide 10 text

sexta-feira, 6 de julho de 12

Slide 11

Slide 11 text

sexta-feira, 6 de julho de 12

Slide 12

Slide 12 text

sexta-feira, 6 de julho de 12

Slide 13

Slide 13 text

sexta-feira, 6 de julho de 12

Slide 14

Slide 14 text

sexta-feira, 6 de julho de 12

Slide 15

Slide 15 text

sexta-feira, 6 de julho de 12

Slide 16

Slide 16 text

sexta-feira, 6 de julho de 12

Slide 17

Slide 17 text

sexta-feira, 6 de julho de 12

Slide 18

Slide 18 text

sexta-feira, 6 de julho de 12

Slide 19

Slide 19 text

sexta-feira, 6 de julho de 12

Slide 20

Slide 20 text

sexta-feira, 6 de julho de 12

Slide 21

Slide 21 text

sexta-feira, 6 de julho de 12

Slide 22

Slide 22 text

sexta-feira, 6 de julho de 12

Slide 23

Slide 23 text

sexta-feira, 6 de julho de 12

Slide 24

Slide 24 text

sexta-feira, 6 de julho de 12

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

sexta-feira, 6 de julho de 12

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

DATA MODELING sexta-feira, 6 de julho de 12

Slide 63

Slide 63 text

WHY IT WAS HARD #1 requirements are NOT fully defined in the start... …it changes over development. sexta-feira, 6 de julho de 12

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

sexta-feira, 6 de julho de 12

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

WHY SHINES sexta-feira, 6 de julho de 12

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

JSON STRUCTURE sexta-feira, 6 de julho de 12

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

WHY IT SHINES REVIEW Document data model Ad hoc queries Secondary indexes Replication Speed and durability Scaling sexta-feira, 6 de julho de 12

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

{ "_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

Slide 106

Slide 106 text

{ "_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

Slide 107

Slide 107 text

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

Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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

Slide 122

Slide 122 text

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

Slide 123

Slide 123 text

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

Slide 124

Slide 124 text

sexta-feira, 6 de julho de 12

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

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

Slide 128

Slide 128 text

I GRADUATED sexta-feira, 6 de julho de 12

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

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

Slide 131

Slide 131 text

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

Slide 132

Slide 132 text

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

Slide 133

Slide 133 text

QUESTIONS? sexta-feira, 6 de julho de 12

Slide 134

Slide 134 text

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