Palestra CouchDB III ENSOL

1,793 views
1,711 views

Published on

Published in: Technology, News & Politics
2 Comments
2 Likes
Statistics
Notes
  • Ah sim do C para erlang para a distribuir eh bem melhor tb apesar que as 2 linguagens stand alone sao otimas!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Ter mudado do xml para o JSON foi a melhor coisa!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,793
On SlideShare
0
From Embeds
0
Number of Embeds
290
Actions
Shares
0
Downloads
42
Comments
2
Likes
2
Embeds 0
No embeds

No notes for slide

Palestra CouchDB III ENSOL

  1. 1. CouchDB: Um banco de dados orientado a documento Allisson Azevedo http://blog.allisson.eti.br allisson@gmail.com 20/06/09
  2. 2. Agenda □ História do CouchDB □ Problemas RDBMS □ Construído para o futuro □ Documentos (Documents) □ HTTP REST API □ Visões (Views) □ Replicação (Replication) 2
  3. 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 3
  4. 4. História do CouchDB (Cont) □ Versão atual 0.9.0 □ Projeto oficial da Apache.org 4
  5. 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 5
  6. 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 6
  7. 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 7
  8. 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 8
  9. 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 9
  10. 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) 10
  11. 11. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569" } 11
  12. 12. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26 } 12
  13. 13. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "3-3762716971", "name": "Allisson Azevedo", "age": 26, "type": "person" } 13
  14. 14. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 } } 14
  15. 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 } } } 15
  16. 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 16
  17. 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 17
  18. 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"] 18
  19. 19. HTTP REST API (Cont) curl -X GET http://127.0.0.1:5984/teste/4a3d08ad99937 8959437f91d2d8fe647 {"_id":"4a3d08ad999378959437f91d2d8fe64 7","_rev":"5-3162066707","name":"Allisson Azevedo","age":26,"type":"person","measure s": {"height":169,"weight":68},"_attachments": {"Imagem102.jpg": {"stub":true,"content_type":"image/jpeg","l ength":18223}}} 19
  20. 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":"6ae18b5516ccac7abe3eaf07 b86b8ec8","rev":"1-3534466899"} 20
  21. 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} 21
  22. 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"} 22
  23. 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 23
  24. 24. Visões (Cont) Exemplo de função Map function(doc) { if (doc.name && doc.age) { emit(doc.name, doc.age); } } 24
  25. 25. Visões (Cont) Exemplo de função Reduce function(keys, values, rereduce) { return sum(values); } 25
  26. 26. Visões (Cont) 26
  27. 27. Visões (Cont) 27
  28. 28. Visões (Cont) 28
  29. 29. Visões (Cont) 29
  30. 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 30
  31. 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 31
  32. 32. Replicação (Cont) 32
  33. 33. Replicação (Cont) 33
  34. 34. Replicação (Cont) 34
  35. 35. Replicação (Cont) 35
  36. 36. Replicação (Cont) 36
  37. 37. Replicação (Cont) 37
  38. 38. Perguntas? 38
  39. 39. Referências □ http://couchdb.apache.org/ □ http://wiki.apache.org/couchdb/ □ http://books.couchdb.org/relax/ 39
  40. 40. Obrigado! 40

×