Palestra CouchDB III ENSOL
-
Upload
allisson-azevedo -
Category
Technology
-
view
1.574 -
download
0
Transcript of Palestra CouchDB III ENSOL
![Page 2: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/4.jpg)
4
História do CouchDB (Cont)
□ Versão atual 0.9.0 □ Projeto oficial da Apache.org
![Page 5: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/6.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/7.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/11.jpg)
11
Documentos (Cont)
{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569"}
![Page 12: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/12.jpg)
12
Documentos (Cont)
{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569"}
{ "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26}
![Page 13: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/26.jpg)
26
Visões (Cont)
![Page 27: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/27.jpg)
27
Visões (Cont)
![Page 28: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/28.jpg)
28
Visões (Cont)
![Page 29: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/29.jpg)
29
Visões (Cont)
![Page 30: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/32.jpg)
32
Replicação (Cont)
![Page 33: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/33.jpg)
33
Replicação (Cont)
![Page 34: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/34.jpg)
34
Replicação (Cont)
![Page 35: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/35.jpg)
35
Replicação (Cont)
![Page 36: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/36.jpg)
36
Replicação (Cont)
![Page 37: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/37.jpg)
37
Replicação (Cont)
![Page 38: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/38.jpg)
38
Perguntas?
![Page 39: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/39.jpg)
39
Referências
□ http://couchdb.apache.org/□ http://wiki.apache.org/couchdb/□ http://books.couchdb.org/relax/
![Page 40: Palestra CouchDB III ENSOL](https://reader033.fdocuments.us/reader033/viewer/2022052907/5591fa981a28abea658b4641/html5/thumbnails/40.jpg)
40
Obrigado!