Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Palestra CouchDB III ENSOL

Palestra CouchDB III ENSOL

Uma visão geral sobre o CouchDB

Allisson Azevedo

November 02, 2011
Tweet

More Decks by Allisson Azevedo

Other Decks in Technology

Transcript

  1. 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 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. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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)
  9. 14 Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson

    Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 } }
  10. 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 } } }
  11. 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
  12. 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
  13. 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"]
  14. 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}}}
  15. 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"}
  16. 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}
  17. 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"}
  18. 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
  19. 24 Visões (Cont) Exemplo de função Map function(doc) { if

    (doc.name && doc.age) { emit(doc.name, doc.age); } }
  20. 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
  21. 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