• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Palestra CouchDB III ENSOL
 

Palestra CouchDB III ENSOL

on

  • 2,562 views

 

Statistics

Views

Total Views
2,562
Views on SlideShare
2,285
Embed Views
277

Actions

Likes
2
Downloads
36
Comments
2

2 Embeds 277

http://blog.allisson.eti.br 264
http://www.slideshare.net 13

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Ah sim do C para erlang para a distribuir eh bem melhor tb apesar que as 2 linguagens stand alone sao otimas!
    Are you sure you want to
    Your message goes here
    Processing…
  • Ter mudado do xml para o JSON foi a melhor coisa!
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Palestra CouchDB III ENSOL Palestra CouchDB III ENSOL Presentation Transcript

    • CouchDB: Um banco de dados orientado a documento Allisson Azevedo http://blog.allisson.eti.br allisson@gmail.com 20/06/09
    • Agenda □ História do CouchDB □ Problemas RDBMS □ Construído para o futuro □ Documentos (Documents) □ HTTP REST API □ Visões (Views) □ Replicação (Replication) 2
    • 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
    • História do CouchDB (Cont) □ Versão atual 0.9.0 □ Projeto oficial da Apache.org 4
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569" } 11
    • Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26 } 12
    • Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "3-3762716971", "name": "Allisson Azevedo", "age": 26, "type": "person" } 13
    • Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 } } 14
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Visões (Cont) Exemplo de função Map function(doc) { if (doc.name && doc.age) { emit(doc.name, doc.age); } } 24
    • Visões (Cont) Exemplo de função Reduce function(keys, values, rereduce) { return sum(values); } 25
    • Visões (Cont) 26
    • Visões (Cont) 27
    • Visões (Cont) 28
    • Visões (Cont) 29
    • 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
    • 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
    • Replicação (Cont) 32
    • Replicação (Cont) 33
    • Replicação (Cont) 34
    • Replicação (Cont) 35
    • Replicação (Cont) 36
    • Replicação (Cont) 37
    • Perguntas? 38
    • Referências □ http://couchdb.apache.org/ □ http://wiki.apache.org/couchdb/ □ http://books.couchdb.org/relax/ 39
    • Obrigado! 40