Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

69
Pepe Legal Python e Babalu MongoDB http://about.me/fmasanori

description

Vídeo: https://www.youtube.com/watch?v=iLTm5K2LJvI Introdução ao banco orientado à documentos MongoDB. NoSQL é um novo paradigma para banco de dados semi-estruturados. MongoDB e Python possuem a mesma "melodia" de desenvolvimento: flexibilidade no schema combina bem com tipagem dinâmica, ambas ajudando na produtividade do desenvolvedor. Entenda como esse banco orientado à documentos funciona na prática com um cliente Python.

Transcript of Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Page 1: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Pepe Legal Python e Babalu MongoDB

http://about.me/fmasanori

Page 2: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Agenda

• Why this title?

• NoSQL

• Flexible Schema

• Horizontal Scalability

• MongoDB

• Some demos

• BI special case

• References

Page 3: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Why this title?

Desenho fez sucesso no início dos anos 60 Mesma época em que SQL teve início

Palestra para old developer’s (or not so old)

Page 4: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Como comecei com NoSQL

Page 5: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Na faculdade me ensinaram que tudo deveria ser normalizado

• E que o mundo era SQL

• No entanto:

– Comecei a dar aulas de BI (analytics), e denormalizar era incentivado

– Persistir dados de redes sociais bastante trabalhoso num relacional

Origem

Page 6: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

VENDAS

CLIENTE

TEMPO

PRODUTO

LOJAPROMOÇÃO

(Luiz H. N. Lorena, 2011)

Star Schema

Page 7: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

(Kimball, 2002)

Denormalizing

Page 8: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

(Kimball, 2002)

Denormalizing

Page 9: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Operacional Analítico

Propósito Executar um processo Avaliar um processo

Estilo interação Insert, update, delete, query Query (read-only)

Escopo interação Transação individual Agregação

Padrão query Previsível e estável Imprevisível

Foco temporal Atual Histórico e atual

Otimização Update concorrente Query (agregação)

Projeto ER na 3FN Star Schema ou Cubo

(Adamson, 2010)

Operational x Analytics

Page 10: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

JSON persistence

Page 11: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Casdinho

Page 12: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Sentiment Analysis (Twitter)

menina: aaaaaaaaaaaaaa eu NAO GOSTO DELE

amiga: e vc ficará rica , e irá dividir sua riqueza cm sua amg aq *u*

menina: kkkkkk como assim eu fikar rica pq?

amiga: pq ele é inteligente , e vai arranjar um ótimo emprego , e

ganhar mt dinheiro rs

menina: kkkkk ele é inteligente como assim ??

amiga: AQUELE VIADO PASSOU NO CASDINHO, E EU NÃO !

Page 13: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Sentiment Analysis (Twitter)

Obs.: não é o mesmo registro...

Page 14: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Sentiment Analysis (Facebook)

Sabe o que é ter vontade de acordar cedo no domingo para estudar?!?

Bom, eu também não sei explicar, mas é o que estou sentindo no momento .-.

Bora Casdinho!

Page 15: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Sentiment Analysis (Facebook)

Obs.: não é o mesmo registro...

Page 16: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Campos opcionais

https://gist.github.com/4667205

Campo opcional no Facebook

Page 17: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Social Data changes fast

Page 18: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Snowflakes like documents

“Snowflakes represent documents, since every document is beautiful

and unique”.

MongoDB, The Definitive Guide.

Page 19: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Non Relational

Non Relational

JSON DataBase

Dev like data

Page 20: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

JSON persistence

• MongoDB

• CouchDB

• RethinkDB

• PostgreSQL (SQL?)

Page 21: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Como persistir dados sem normalizar, sem um BD relacional?

• Somos “formatados” a pensar no modelo relacional

• “One size fits all”

NoSQL ?

Page 22: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

One Size Fits All

Page 23: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

“It’s better to think of NoSQL as a

movement rather

than a technology” Martin Fowler

NoSQL

Page 24: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Dynamic Schema

O que as empresas esperam de um NoSQL?

Page 25: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Flexible Schema

O que as empresas esperam de um NoSQL?

Page 26: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Flexible Schema

Flexible Schema

Dev Productivity

Page 27: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Relational DB

Page 28: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Martin Fowler

Relational DB

Page 29: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• The difference between the relational model and the in-memory data structures (Fowler)

• Limitations of relational DB: values only in tuples

• We need a more complex structure than a set of tuples as a data unit

Impedance mismatch

Page 30: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Costumers Orders

Martin Fowler

Aggregate Model

Page 31: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Costumers

Martin Fowler

Aggregate Model

Page 32: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Questions vs Answers

RDBMS MongoDB

Data Storage Data Use

Answers Questions

Botton Up Top Down

Page 33: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Scalability

Page 34: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

If I had asked people what they wanted, they would have said faster

horses. Henry Ford.

Scalability

Page 35: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Escalabilidade para leituras num banco relacional: trabalhoso

• Escalabilidade para escritas num banco relacional: MUITO, MUITO, trabalhoso

• (se conseguir seu BD deixou de ser relacional...)

Escalabilidade vertical

Page 36: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Escalabilidade vertical

Page 37: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Escalabilidade horizontal

Page 38: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Escalabilidade horizontal

Page 39: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

“Eventual” pt-br: pode não ocorrer

“Eventual” inglês: irá ocorrer em breve

Eventually Consistent

Page 40: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Eventually Consistent

Offline ATM have Eventually Consistent transactions

Page 41: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Teorema CAP

Partition

Availability

Consistency

Page 42: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

NoSQL vale a pena

Page 43: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Bigtable: A distributed storage system for structured data, 2006

• Dynamo: Amazon’s highly available key-value store, 2007

Dois artigos famosos

Page 44: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Apache Hadoop

Page 45: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Not Only SQL

Page 46: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Specialized Databases No “one size fits for all” DB

Page 47: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Open Source

• Document (JSON)

• Distributed

• Rich Query Language

• Great Community

• Full Text Search

MongoDB

Page 48: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Schema Design

• Full Featured Indexes

• Aggregation Framework

• Replication and Sharding

MongoDB

Page 49: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Terminology

RDBMS MongoDB

Database Database

Table Collection

Row Document

Index Index

Join Embedded Doc

Foreign Key Reference

By 10gen

Page 50: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Dynamic and Flexible

Page 51: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

MongoDB

Funcionalidade

Perf

orm

ance

memcached

relational

mongodb

Page 52: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

MongoDB

By MongoLab

Page 53: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

MongoDB

By MongoLab

Page 54: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Easy Taxi Case

Demos

Obs.: link para seguir a oficina completa que dei no FISL

Page 55: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

MongoDB for BI

• Analytics are now popular among proprietary vendors

• SAP Sybase columnar In-Memory

• Oracle columnar In-Memory

• Why columnar for analytics?

• There is a advantage?

Page 57: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

• Which movie genres generate the most revenue? (Q1)

• How is our revenue evolving over time? (Q2)

• At which time of day do costumers place the most orders? (Q3)

• How effective are the promotions we launch? (Q4)

Queries

Page 58: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

0

5000

10000

15000

20000

25000

30000

35000

Q1 Q2 Q3 Q4

LucidDB

MySQL

Average time (ms)

Page 59: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

(Timo Elliott, SAP)

Relational DB (row full scan)

Page 60: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

(Timo Elliott, SAP)

Columnar DB

Page 61: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

MongoDB for BI

• Is possible to MongoDB create indexes in any attribute

• Sharding Fact Table and duplicating Dimensions across replicas

• Perhaps there is no memory for all attribute indexes you need…

Page 62: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

https://education.mongodb.com/

Page 63: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Material para aprofundamento

Page 65: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Material para aprofundamento

Page 66: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Bigliografia

Page 67: Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica

Bigliografia