Conhecendo o CouchDB - TDC2011
-
Upload
henrique-gogo -
Category
Documents
-
view
1.409 -
download
1
description
Transcript of Conhecendo o CouchDB - TDC2011
![Page 1: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/1.jpg)
Conhecendo o
Henrique Gogó - www.gogs.com.br
![Page 2: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/2.jpg)
Henrique Gogó?
![Page 3: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/3.jpg)
#fail
Professor de violão
Músico
Publicitário
Licenciatura em Letras
![Page 4: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/4.jpg)
#win
Fortaleza/Ce
HTML + CSS
Ruby
Front-end developer(jQuery e tal)
Node.js
CouchDB
![Page 5: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/5.jpg)
![Page 6: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/6.jpg)
![Page 7: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/7.jpg)
Simbó!
![Page 8: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/8.jpg)
Por que CouchDB?
EscalabilidadeReplicaçãoMaster/MasterMVCC (Multiversion concurrency control)
Schema freeHTTP / RESTfulJavaScript
![Page 9: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/9.jpg)
Controle de usuário
Validação
CouchApp
Nuvem
![Page 10: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/10.jpg)
Futon
![Page 11: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/11.jpg)
Quem usa?
![Page 12: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/12.jpg)
Como eles usam?
![Page 13: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/13.jpg)
Nuvem e serviços
![Page 14: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/14.jpg)
Característica de bancos NoSQL
http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid
![Page 15: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/15.jpg)
Erlang
Linguagem funcional criada desenvolvimento de sistema distribuídos.
Flexível e de fácil escalabilidade e extensibilidade.
![Page 16: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/16.jpg)
É ACID!
![Page 17: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/17.jpg)
Em disco, nunca sobrescreve dados.
Leitura e escrita nunca interfere em outros clientes (MVCC).
B-tree sempre incremental (append only).
Crash-only conception. (Deu pau? Esquece).
![Page 18: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/18.jpg)
How doesconcurrency work
MongoDB uses a read/write lock for many operations. “ ”
http://www.mongodb.org/display/DOCS/How+does+concurrency+work
![Page 19: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/19.jpg)
MVCCMultiversion concurrency control
Database readers are never locked out and never have to wait on writers or other readers.“
”http://couchdb.apache.org/docs/overview.html
![Page 20: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/20.jpg)
![Page 21: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/21.jpg)
O teorema CAP
ConsistencyTodos os clientes do banco de dados devem ver o mesmos dados, mesmo com atualizações simultâneas.
AvailabilityTodos os clientes do banco de dados podem acessar uma versão dos dados.
Partition toleranceO banco pode ser dividido em vários servidores.
![Page 22: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/22.jpg)
![Page 23: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/23.jpg)
Se disponibilidade é prioridade, podemos escrever um node no banco de dados sem
esperar outros nodes estarem prontos.
Se o banco souber como conciliar essas operações entre os nodes, alcançamos a “consistência eventual” em troca da alta
disponibilidade.
![Page 24: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/24.jpg)
Replicação
![Page 25: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/25.jpg)
![Page 26: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/26.jpg)
![Page 27: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/27.jpg)
![Page 28: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/28.jpg)
API RESTful
![Page 29: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/29.jpg)
JSON
![Page 32: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/32.jpg)
Deletar banco de dados
DELETE http://localhost:5984/database
{"ok":true}
![Page 33: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/33.jpg)
Criar documento
PUT http://localhost:5984/database/doc-d '{"nome":"Henrique","apelido":"Gogó"}'
{"ok":true,"id":"doc","rev":"1-446a0c701e94053b4c3baaa5ef3fe68c"}
![Page 34: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/34.jpg)
Criar documento gerando o id automaticamente
POST http://localhost:5984/database/-d '{"site":"http://www.gogs.com.br"}'
-H "Content-Type: application/json"
{"ok":true,"id":"468df12f72c2629fd9319b6dfd0009dd","rev":"1-
0a48dec3e05fc52dae8b2943a4a55864"}
![Page 35: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/35.jpg)
Ver documento
GET http://localhost:5984/database/doc
{"_id":"doc","_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c","no
me":"Henrique","apelido":"Gog\u00f3"}
![Page 36: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/36.jpg)
Atualizar documento
PUT http://localhost:5984/database/doc-d '{"_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c",
"apelido":"Gogs"}'
{"ok":true,"id":"doc","rev":"2-191182436ca9a532ec1124aa91b5a8da"}
![Page 37: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/37.jpg)
Deletar documento
DELETE http://localhost:5984/database/doc?rev=2-
191182436ca9a532ec1124aa91b5a8da
{"ok":true,"id":"doc","rev":"3-4c1033574d7d38e57fe92a1b51fc667d"}
![Page 38: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/38.jpg)
MapReduce
![Page 39: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/39.jpg)
Map
function(doc) { if (doc.city == "Fortaleza") emit(doc.title, doc.month+"/"+doc.year);}
![Page 40: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/40.jpg)
Map
![Page 41: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/41.jpg)
![Page 42: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/42.jpg)
Map
![Page 43: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/43.jpg)
Reduce
function(keys, values) { return values;}
![Page 44: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/44.jpg)
Reduce
![Page 45: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/45.jpg)
Reduce
![Page 46: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/46.jpg)
validate_doc_update
function(newDoc, oldDoc, userCtx) { function require(field, message) { message = message || "Precisa do campo " + field; if (!newDoc[field]) throw({forbidden : message}); };
if (newDoc.type == "post") { require("title"); }}
![Page 47: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/47.jpg)
validate_doc_update
POST http://localhost:5984/database -d '{"type": "post"}' -H "Content-type: application/json"
{"error":"forbidden","reason":"Document must have a title"}
![Page 48: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/48.jpg)
_changes
GET http://localhost:5984/database/_changes?feed=continuous
![Page 49: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/49.jpg)
Para as linguagens
CouchRest (Ruby)
Biblioteca CouchDB (Python)
Cradle (JavaScript server-side – node.js)
jquery.couch.js (JavaScript client-side)
![Page 50: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/50.jpg)
import couchdb
couch = couchdb.Server('http://example.com:5984/')
db = couch['mydb']
doc = {'foo': 'bar'}db.save(doc)
![Page 51: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/51.jpg)
![Page 52: Conhecendo o CouchDB - TDC2011](https://reader035.fdocumentos.com/reader035/viewer/2022070302/5481d053b47959dd0c8b45fe/html5/thumbnails/52.jpg)
Perguntas?
@henriquegogo
www.gogs.com.br