palestra couchdb iii ensol

40
20/06/09 CouchDB: Um banco de dados orientado a documento Allisson Azevedo http://blog.allisson.eti.br [email protected]

Upload: allisson-azevedo

Post on 30-Jun-2015

1.575 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Palestra CouchDB III ENSOL

20/06/09

CouchDB:Um banco de dados orientado a documento

Allisson Azevedohttp://[email protected]

Page 2: Palestra CouchDB III ENSOL

2

Agenda

□ História do CouchDB□ Problemas RDBMS□ Construído para o futuro□ Documentos (Documents)□ HTTP REST API□ Visões (Views)□ Replicação (Replication)

Page 3: Palestra CouchDB III ENSOL

3

História do CouchDB

□ Damien Katz◊ Trabalhos anteriores: Lotus Notes, MySQL◊ Iniciou o CouchDB em 2005◊ C++ -> Erlang◊ XML -> JSON◊ OpenSource◊ Funcionário da IBM

◊ Trabalho em tempo integral no CouchDB

Page 4: Palestra CouchDB III ENSOL

4

História do CouchDB (Cont)

□ Versão atual 0.9.0 □ Projeto oficial da Apache.org

Page 5: Palestra CouchDB III ENSOL

5

Problemas RDBMS

□ Foram projetados originalmente para:◊ Um usuário◊ Uma máquina (Escala verticalmente)◊ Uma operação por vez◊ Maior uso em aplicações científicas

Page 6: Palestra CouchDB III ENSOL

6

Problemas RDBMS (Cont)

□ Necessidades atuais (Web)◊ Milhares de usuários simultâneos◊ Várias máquinas (Escala horizontalmente)◊ Processamento em paralelo (Multicore)◊ Maior uso em aplicações na internet

Page 7: Palestra CouchDB III ENSOL

7

Problemas RDBMS (Cont)

□ Como escalar um RDBMS?◊ Replicação Master-Slave◊ Replicação Master-Master◊ Sharding◊ Qual o custo de usar uma dessas

técnicas?□ Locking□ Normalização/Denormalização

Page 8: Palestra CouchDB III ENSOL

8

Constuído para o Futuro

□ Erlang◊ Desenvolvida para aplicações distribuídas

e tolerante a falhas◊ Suporte poderoso a concorrência◊ Originalmente proprietária da Ericsson◊ Opensource em 1998

Page 9: Palestra CouchDB III ENSOL

9

Constuído para o Futuro (Cont)

□ Non-locking multi-version concurrency control (MVCC)

◊ Uso de versionamento, os dados nunca são sobrescritos

◊ Leituras não são corrompidas por escritas durante a leitura de dados

◊ Requisições concorrentes (Non-locking)◊ Compactação elimina versões anteriores

dos documentos

Page 10: Palestra CouchDB III ENSOL

10

Documentos

□ Local onde os dados são mantidos□ Não tem schema definido

◊ Um documento pode ter um campo que outro documento não têm

□ Formato JSON◊ Pode incluir todo tipo de dados: números,

strings, arrays, null, boolean□ Podem ter anexos (attachments)

Page 11: Palestra CouchDB III ENSOL

11

Documentos (Cont)

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569"}

Page 12: Palestra CouchDB III ENSOL

12

Documentos (Cont)

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569"}

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26}

Page 13: Palestra CouchDB III ENSOL

13

Documentos (Cont)

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "3-3762716971", "name": "Allisson Azevedo", "age": 26, "type": "person"}

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26}

Page 14: Palestra CouchDB III ENSOL

14

Documentos (Cont)

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "3-3762716971", "name": "Allisson Azevedo", "age": 26, "type": "person"}

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 }}

Page 15: Palestra CouchDB III ENSOL

15

Documentos (Cont)

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "5-3162066707", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 }, "_attachments": { "Imagem102.jpg": { "stub": true, "content_type": "image/jpeg", "length": 18223 } }}

{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 }}

Page 16: Palestra CouchDB III ENSOL

16

HTTP REST API

□ Todas as operações são feitas via RESTful Web Services

□ Quatro operações básicas para trabalhar com documentos

◊ Create: HTTP PUT /db/docid◊ Create: HTTP POST /db

◊ Read: HTTP GET /db/docid◊ Update: HTTP PUT /db/docid◊ Delete: HTTP DELETE /db/docid

Page 17: Palestra CouchDB III ENSOL

17

HTTP REST API (Cont)

□ Toda linguagem de programação tem as ferramentas necessárias para fazer requisições HTTP

□ A maioria das linguagens já conta com ferramentas específicas para tratar com RESTful Web Services

Page 18: Palestra CouchDB III ENSOL

18

HTTP REST API (Cont)

curl -X PUT http://127.0.0.1:5984/teste2{"ok":true}

curl -X GET http://127.0.0.1:5984/_all_dbs["teste2","teste"]

curl -X DELETE http://127.0.0.1:5984/teste2{"ok":true}

curl -X GET http://127.0.0.1:5984/_all_dbs["teste"]

Page 19: Palestra CouchDB III ENSOL

19

HTTP REST API (Cont)

curl -X GET http://127.0.0.1:5984/teste/4a3d08ad999378959437f91d2d8fe647

{"_id":"4a3d08ad999378959437f91d2d8fe647","_rev":"5-3162066707","name":"Allisson Azevedo","age":26,"type":"person","measures":{"height":169,"weight":68},"_attachments":{"Imagem102.jpg":{"stub":true,"content_type":"image/jpeg","length":18223}}}

Page 20: Palestra CouchDB III ENSOL

20

HTTP REST API (Cont)

curl -X PUT -d '{"name":"Steven Seagal", "age":58}' http://127.0.0.1:5984/teste/steven-seagal

{"ok":true,"id":"steven-seagal","rev":"1-2296068035"}

curl -X POST -d '{"name":"Chuck Norris", "age":69}' http://127.0.0.1:5984/teste

{"ok":true,"id":"6ae18b5516ccac7abe3eaf07b86b8ec8","rev":"1-3534466899"}

Page 21: Palestra CouchDB III ENSOL

21

HTTP REST API (Cont)

curl -X PUT -d '{"_id":"steven-seagal","_rev":"1-2296068035","name":"Steven Seagal","age":58, "roundhousekick":false}' http://127.0.0.1:5984/teste/steven-seagal

{"ok":true,"id":"steven-seagal","rev":"2-3346317691"}

curl -X GET http://127.0.0.1:5984/teste/steven-seagal

{"_id":"steven-seagal","_rev":"2-3346317691","name":"Steven Seagal","age":58,"roundhousekick":false}

Page 22: Palestra CouchDB III ENSOL

22

HTTP REST API (Cont)

curl -X DELETE http://127.0.0.1:5984/teste/steven-seagal?rev=2-3346317691

{"ok":true,"id":"steven-seagal","rev":"3-793968873"}

curl -X GET http://127.0.0.1:5984/teste/steven-seagal

{"error":"not_found","reason":"deleted"}

Page 23: Palestra CouchDB III ENSOL

23

Visões

□ Extrair data dos documentos□ Map/Reduce

◊ Map: Extrai dados dos documentos◊ Reduce: Realiza cálculos com os valores

obtidos no Map□ Visões podem ser temporárias ou fixas

Page 24: Palestra CouchDB III ENSOL

24

Visões (Cont)

Exemplo de função Map

function(doc) { if (doc.name && doc.age) { emit(doc.name, doc.age); }}

Page 25: Palestra CouchDB III ENSOL

25

Visões (Cont)

Exemplo de função Map

function(doc) { if (doc.name && doc.age) { emit(doc.name, doc.age); }}

Exemplo de função Reduce

function(keys, values, rereduce) { return sum(values);}

Page 26: Palestra CouchDB III ENSOL

26

Visões (Cont)

Page 27: Palestra CouchDB III ENSOL

27

Visões (Cont)

Page 28: Palestra CouchDB III ENSOL

28

Visões (Cont)

Page 29: Palestra CouchDB III ENSOL

29

Visões (Cont)

Page 30: Palestra CouchDB III ENSOL

30

Replicação

□ Replicação uni-direcional□ A cópia de dados utiliza apenas as

últimas versões dos documentos□ A operação é realizada enviando uma

requisição POST para a url /_replicate◊ Banco de origem◊ Banco de destino

Page 31: Palestra CouchDB III ENSOL

31

Replicação (Cont)

□ Resolução automática de conflitos◊ Seleciona um documento como sendo o

mais atual e os outros conflitos são armazenados como versões anteriores

Page 32: Palestra CouchDB III ENSOL

32

Replicação (Cont)

Page 33: Palestra CouchDB III ENSOL

33

Replicação (Cont)

Page 34: Palestra CouchDB III ENSOL

34

Replicação (Cont)

Page 35: Palestra CouchDB III ENSOL

35

Replicação (Cont)

Page 36: Palestra CouchDB III ENSOL

36

Replicação (Cont)

Page 37: Palestra CouchDB III ENSOL

37

Replicação (Cont)

Page 38: Palestra CouchDB III ENSOL

38

Perguntas?

Page 39: Palestra CouchDB III ENSOL

39

Referências

□ http://couchdb.apache.org/□ http://wiki.apache.org/couchdb/□ http://books.couchdb.org/relax/

Page 40: Palestra CouchDB III ENSOL

40

Obrigado!