MAC5855 - NoSQL


       Mauricio De Diana
        mdediana@ime.usp.br
                @mdediana
Web 2.0

Data is the Next Intel Inside

Inteligência Coletiva

Grande volume de dados

Escala global (Internet scale servi...
Web 2.0

Alto grau de paralelização

Hardware comum e barato (commodity)

Software livre, código aberto

Dados semiestrutu...
Soluções para dados

Bigtable (Google)

Dynamo (Amazon)

PNUTS (Yahoo!)


Além de:
GFS, Hadoop, HDFS, MapReduce, Chubby, e...
Soluções para dados

Bigtable (Google)

Dynamo (Amazon)

PNUTS (Yahoo!)


Além de:
GFS, Hadoop, HDFS, MapReduce, Chubby, e...
Escalando relacional
N servidores web
1 db
Mestre / Escravo
Mestre / Escravo
Particionamento funcional
Particionamento horizontal (sharding)




Pritchett, D. (2008). BASE: An Acid Alternative.
Particionamento horizontal (sharding)




            Fonte: http://www.codefutures.com/database-sharding/
Problemas - Sharding

Queries distribuídas

Cross-shard joins

Integridade de entidade e referencial

Transparência de loc...
Dados em larga escala na web - FLOSS


Hadoop

Cassandra

MongoDB

Neo4J

Redis

Riak

...
NoSQL

Definição fraca:
 SGBDs não-relacionais distribuídos muito usados na Web
NoSQL

Definição fraca:
 SGBDs não-relacionais distribuídos muito usados na Web

Definição ainda fraca:
 SGBDs não-relacio...
NoSQL

Definição fraca:
 SGBDs não-relacionais distribuídos muito usados na Web

Definição ainda fraca:
 SGBDs não-relacio...
NoSQL - características

Escalabilidade horizontal

Sem esquema / Esquema flexível

Replicação simples

API simples

Softw...
ACID e escalabilidade

Atomicidade: protocolo distribuído (2PC)

Consistência: problemas com réplicas

Isolamento: locks d...
Exemplos de trocas com ACID em NoSQL


Atomicidade e isolamento: em único banco de dados (Bigtable)

Consistência: em mome...
ACID x BASE

ACID          BASE
Atômico       Basicamente disponível
               (Basically available)
Consistente
    ...
Teorema CAP

Consistência

Disponibilidade

Tolerância à partição




                        Fonte: http://blog.mattwoodw...
Consistência em momento indeterminado
Consertando inconsistências

Fazer nada

Ação de compensação
NoSQL - Principais categorias

SGBDs orientados a documentos
 (Document-oriented databases)

Armazéns chave-valor (DHT)
 (...
SGBDs orientados a documentos

Armazenam coleções de pares de chave-valor

Dados semiestruturados

Esquema flexível

Forma...
Documento (JSON)

{
    autor: 'joao',
    criado : new Date('03-28-2009'),
    titulo : 'Primeiro post',
    texto : 'Aqu...
Documento (JSON)

{
    autor: 'joao',
    criado : new Date('03-28-2009'),
    titulo : 'Primeiro post',
    texto : 'Aqu...
Acesso

MongoDB (exemplo)
> j = { name : "mongo" };
{"name" : "mongo"}

> t = { x : 3 };
{ "x" : 3 }

> db.things.save(j);...
Acesso

MongoDB (exemplo)
> db.things.find({name:"mongo"}).forEach(
                       function(x) { print(tojson(x));...
Armazéns chave-valor

Tabelas de hash distribuídas (DHT)

Exemplos: Dynamo, Redis, Voldemort

Acesso: get / put
SGBDs orientados a colunas

Armazenam dados por colunas, não linhas

Mais eficiência manipulando todos os registros (OLAP)...
Formato

EmpId, Sobrenome, Nome, Salário

Orientado a linha:
1,Silva,João,600;2,Dias,Maria,500;3,Matos,José,440;

Orientad...
Acesso

Bigtable (exemplo)
Linha, coluna (família de coluna, qualificador), timestamp




              Fonte: Bigtable: A...
SGBDs de grafos

Armazenam vértices e arestas (e suas propriedades)

Representam interconectividade entre os dados

Operaç...
Acesso

Neo4J (exemplo)

Traverser friendsTraverser = root.traverse(
         Traverser.Order.
BREADTH_FIRST,             ...
Modelos não-relacionais

Orientado a documentos: dados semiestruturados

Chave-valor: modelo simples

Orientados a coluna:...
NoSQL é a solução?
Cargas de trabalho diferentes precisam de tratamento
diferente (Stonebraker)

OLTP                     ...
Experimentos
OLTP                     OLAP

H-Store (VoltDB)         C-Store (Vertica)

82x mais rápido que um   124x mais...
Tempos em um SGBDR

Logging, locking, latching e gerenciamento de buffer

1/60 das instruções em uma transação são trabalh...
Especializações

Problema não está no modelo relacional, nem na SQL

Ordens de grandeza de diferença

Persistência poliglo...
Tendências

Release 2.0 (fev/09)

Claremont Report (jun/09)

ThoughtWorks Radar (jun/10)
Conclusões

Dois focos:
 Desempenho / Escalabilidade
 Simplicidade

Contexto importa

Necessário balancear vantagens e des...
Referências

http://nosql-database.org/

http://nosql.mypopescu.com/

Varley, Ian Thomas. No Relation: The Mixed Blessings...
Projetos

MongoDB

Redis

Neo4J
MongoDB

"MongoDB bridges the gap between key-value stores (which
are fast and highly scalable) and traditional RDBMS syst...
MongoDB

Home: http://www.mongodb.org/

Download: apt-get install mongodb-stable

Shell: http://www.mongodb.org/display/DO...
MongoDB

Driver Java: http://github.com/downloads/mongodb/mongo-java-driver/mongo-
2.1.jar

Tutorial Mongo Java: http://ww...
Redis

"Redis is an advanced key-value store. It is similar to
memcached but the dataset is not volatile, and values can b...
Redis

Home: http://code.google.com/p/redis/

Download: http://code.google.com/p/redis/downloads/list

Docs: http://code.g...
Neo4j

"Neo4j is a graph database. It is an embedded, disk-based,
fully transactional Java persistence engine that stores ...
Neo4j

Home: http://neo4j.org/

Download: http://dist.neo4j.org/neo4j-apoc-1.1.tar.gz

Tutoriais:
http://dist.neo4j.org/ba...
Código de exemplo

Paca
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
MAC5855 - NoSQL
Upcoming SlideShare
Loading in...5
×

MAC5855 - NoSQL

2,199

Published on

Aula apresentada na disciplina de Desenvolvimento Web do IME-USP.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,199
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
49
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

MAC5855 - NoSQL

  1. 1. MAC5855 - NoSQL Mauricio De Diana mdediana@ime.usp.br @mdediana
  2. 2. Web 2.0 Data is the Next Intel Inside Inteligência Coletiva Grande volume de dados Escala global (Internet scale services)
  3. 3. Web 2.0 Alto grau de paralelização Hardware comum e barato (commodity) Software livre, código aberto Dados semiestruturados e crús
  4. 4. Soluções para dados Bigtable (Google) Dynamo (Amazon) PNUTS (Yahoo!) Além de: GFS, Hadoop, HDFS, MapReduce, Chubby, etc
  5. 5. Soluções para dados Bigtable (Google) Dynamo (Amazon) PNUTS (Yahoo!) Além de: GFS, Hadoop, HDFS, MapReduce, Chubby, etc Enquanto isso, nas startups...
  6. 6. Escalando relacional
  7. 7. N servidores web 1 db
  8. 8. Mestre / Escravo
  9. 9. Mestre / Escravo
  10. 10. Particionamento funcional
  11. 11. Particionamento horizontal (sharding) Pritchett, D. (2008). BASE: An Acid Alternative.
  12. 12. Particionamento horizontal (sharding) Fonte: http://www.codefutures.com/database-sharding/
  13. 13. Problemas - Sharding Queries distribuídas Cross-shard joins Integridade de entidade e referencial Transparência de localização (Opção: MySQL Proxy)
  14. 14. Dados em larga escala na web - FLOSS Hadoop Cassandra MongoDB Neo4J Redis Riak ...
  15. 15. NoSQL Definição fraca: SGBDs não-relacionais distribuídos muito usados na Web
  16. 16. NoSQL Definição fraca: SGBDs não-relacionais distribuídos muito usados na Web Definição ainda fraca: SGBDs não-relacionais, não-ACID e distribuídos
  17. 17. NoSQL Definição fraca: SGBDs não-relacionais distribuídos muito usados na Web Definição ainda fraca: SGBDs não-relacionais, não-ACID e distribuídos "No SQL" x "Not only SQL"
  18. 18. NoSQL - características Escalabilidade horizontal Sem esquema / Esquema flexível Replicação simples API simples Software livre / Código aberto Consistência em momento indeterminado
  19. 19. ACID e escalabilidade Atomicidade: protocolo distribuído (2PC) Consistência: problemas com réplicas Isolamento: locks distribuídos
  20. 20. Exemplos de trocas com ACID em NoSQL Atomicidade e isolamento: em único banco de dados (Bigtable) Consistência: em momento indeterminado (Dynamo) Durabilidade: memória + snapshotting (Redis)
  21. 21. ACID x BASE ACID BASE Atômico Basicamente disponível (Basically available) Consistente Soft-state Isolado Consistente em momento Durável indeterminado (Eventually consistent)
  22. 22. Teorema CAP Consistência Disponibilidade Tolerância à partição Fonte: http://blog.mattwoodward.com/
  23. 23. Consistência em momento indeterminado
  24. 24. Consertando inconsistências Fazer nada Ação de compensação
  25. 25. NoSQL - Principais categorias SGBDs orientados a documentos (Document-oriented databases) Armazéns chave-valor (DHT) (Key-value stores) SGBDs orientados a colunas (Column-oriented databases) SGBDs de grafos (Graph databases)
  26. 26. SGBDs orientados a documentos Armazenam coleções de pares de chave-valor Dados semiestruturados Esquema flexível Formatos: JSON, XML, propriedades, etc Sharding simples: documentos sem referências explícitas Exemplos: MongoDB, CouchDB
  27. 27. Documento (JSON) { autor: 'joao', criado : new Date('03-28-2009'), titulo : 'Primeiro post', texto : 'Aqui está o texto...', tags : [ 'exemplo', 'joao' ], comentarios : [ { autor: 'edu', comentario: 'Ruim' }, { autor: 'maria', comentario: 'Legal' }] }
  28. 28. Documento (JSON) { autor: 'joao', criado : new Date('03-28-2009'), titulo : 'Primeiro post', texto : 'Aqui está o texto...', modificado: new Date('05-06-2009'), modificado por: 'jose', tags : [ 'exemplo', 'joao' 'jose' ], , comentarios : [ { autor: 'edu', comentario: 'Ruim' }, { autor: 'maria', comentario: 'Legal' }] }
  29. 29. Acesso MongoDB (exemplo) > j = { name : "mongo" }; {"name" : "mongo"} > t = { x : 3 }; { "x" : 3 } > db.things.save(j); > db.things.save(t); > db.things.find(); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")}
  30. 30. Acesso MongoDB (exemplo) > db.things.find({name:"mongo"}).forEach( function(x) { print(tojson(x));}); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} > db.things.find({x:3}).forEach( function(x) { print(tojson(x));}); {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")}
  31. 31. Armazéns chave-valor Tabelas de hash distribuídas (DHT) Exemplos: Dynamo, Redis, Voldemort Acesso: get / put
  32. 32. SGBDs orientados a colunas Armazenam dados por colunas, não linhas Mais eficiência manipulando todos os registros (OLAP) Linhas não têm a mesma quantidades de colunas Esquema flexível Exemplos: Bigtable, Cassandra, HBase
  33. 33. Formato EmpId, Sobrenome, Nome, Salário Orientado a linha: 1,Silva,João,600;2,Dias,Maria,500;3,Matos,José,440; Orientado a coluna: 1,2,3;Silva,Dias,Matos;João,Maria,José;600,500,440;
  34. 34. Acesso Bigtable (exemplo) Linha, coluna (família de coluna, qualificador), timestamp Fonte: Bigtable: A Distributed Storage System for Structured Data
  35. 35. SGBDs de grafos Armazenam vértices e arestas (e suas propriedades) Representam interconectividade entre os dados Operações sobre grafos: percorrer caminho Exemplos: Infogrid, Neo4J
  36. 36. Acesso Neo4J (exemplo) Traverser friendsTraverser = root.traverse( Traverser.Order. BREADTH_FIRST, StopEvaluator. END_OF_GRAPH, ReturnableEvaluator. ALL_BUT_START_NODE, RelTypes.KNOWS, Direction.OUTGOING);
  37. 37. Modelos não-relacionais Orientado a documentos: dados semiestruturados Chave-valor: modelo simples Orientados a coluna: OLAP Grafos: interconectividade dos dados é tão ou mais importante quanto os dados em si
  38. 38. NoSQL é a solução? Cargas de trabalho diferentes precisam de tratamento diferente (Stonebraker) OLTP OLAP Operação Informação (BI) CRUD pequeno e rápido Batches demorados Consultas simples Consultas complexas
  39. 39. Experimentos OLTP OLAP H-Store (VoltDB) C-Store (Vertica) 82x mais rápido que um 124x mais rápido que um SGBD comercial SGBD comercial orientado a linha 21x mais rápido que um SGBD comercial orientado a coluna
  40. 40. Tempos em um SGBDR Logging, locking, latching e gerenciamento de buffer 1/60 das instruções em uma transação são trabalho útil 20x mais rápido sem esses sub-subsistemas 41/45
  41. 41. Especializações Problema não está no modelo relacional, nem na SQL Ordens de grandeza de diferença Persistência poliglota
  42. 42. Tendências Release 2.0 (fev/09) Claremont Report (jun/09) ThoughtWorks Radar (jun/10)
  43. 43. Conclusões Dois focos: Desempenho / Escalabilidade Simplicidade Contexto importa Necessário balancear vantagens e desvantagens Futuro incerto (mas promissor)
  44. 44. Referências http://nosql-database.org/ http://nosql.mypopescu.com/ Varley, Ian Thomas. No Relation: The Mixed Blessings of Non-Relational Databases Introdução aos Bancos de Dados Não-Relacionais e NoSQL: Vantagens, Desvantagens e Compromissos (http://www.slideshare.net/mdediana)
  45. 45. Projetos MongoDB Redis Neo4J
  46. 46. MongoDB "MongoDB bridges the gap between key-value stores (which are fast and highly scalable) and traditional RDBMS systems (which provide rich queries and deep functionality)." "O novo M em LAMP"
  47. 47. MongoDB Home: http://www.mongodb.org/ Download: apt-get install mongodb-stable Shell: http://www.mongodb.org/display/DOCS/mongo+-+The+Interactive+Shell WebAdmin: http://localhost:28017/ Comandos: db.listCommands() no shell ou http://localhost:28017/_commands
  48. 48. MongoDB Driver Java: http://github.com/downloads/mongodb/mongo-java-driver/mongo- 2.1.jar Tutorial Mongo Java: http://www.mongodb.org/display/DOCS/Java+Tutorial API: http://api.mongodb.org/java/2.1/index.html No lab: mongod / mongo
  49. 49. Redis "Redis is an advanced key-value store. It is similar to memcached but the dataset is not volatile, and values can be strings, exactly like in memcached, but also lists, sets, and ordered sets. All this data types can be manipulated with atomic operations to push/pop elements, add/remove elements, perform server side union, intersection, difference between sets, and so forth. Redis supports different kind of sorting abilities."
  50. 50. Redis Home: http://code.google.com/p/redis/ Download: http://code.google.com/p/redis/downloads/list Docs: http://code.google.com/p/redis/wiki/index?tm=6 Comandos: http://code.google.com/p/redis/wiki/CommandReference Jedis: http://github.com/downloads/xetorthio/jedis/jedis-1.1.1.jar No lab: /opt/redis-2.0.1/redis-server e /opt/redis-2.0.1/redis-cli
  51. 51. Neo4j "Neo4j is a graph database. It is an embedded, disk-based, fully transactional Java persistence engine that stores data structured in graphs rather than in tables. A graph (mathematical lingo for a network) is a flexible data structure that allows a more agile and rapid style of development."
  52. 52. Neo4j Home: http://neo4j.org/ Download: http://dist.neo4j.org/neo4j-apoc-1.1.tar.gz Tutoriais: http://dist.neo4j.org/basic-neo4j-code-examples-2008-05-08.pdf http://www. infoq.com/articles/graph-nosql-neo4j
  53. 53. Código de exemplo Paca
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×