conhecendo o couchdb - tdc2011

52
Conhecendo o Henrique Gogó - www.gogs.com.br

Upload: henrique-gogo

Post on 05-Dec-2014

1.409 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Conhecendo o CouchDB - TDC2011

Conhecendo o

Henrique Gogó - www.gogs.com.br

Page 2: Conhecendo o CouchDB - TDC2011

Henrique Gogó?

Page 3: Conhecendo o CouchDB - TDC2011

#fail

Professor de violão

Músico

Publicitário

Licenciatura em Letras

Page 4: Conhecendo o CouchDB - TDC2011

#win

Fortaleza/Ce

HTML + CSS

Ruby

Front-end developer(jQuery e tal)

Node.js

CouchDB

Page 5: Conhecendo o CouchDB - TDC2011
Page 6: Conhecendo o CouchDB - TDC2011
Page 7: Conhecendo o CouchDB - TDC2011

Simbó!

Page 8: Conhecendo o CouchDB - TDC2011

Por que CouchDB?

EscalabilidadeReplicaçãoMaster/MasterMVCC (Multiversion concurrency control)

Schema freeHTTP / RESTfulJavaScript

Page 9: Conhecendo o CouchDB - TDC2011

Controle de usuário

Validação

CouchApp

Nuvem

Page 10: Conhecendo o CouchDB - TDC2011

Futon

Page 11: Conhecendo o CouchDB - TDC2011

Quem usa?

Page 12: Conhecendo o CouchDB - TDC2011

Como eles usam?

Page 13: Conhecendo o CouchDB - TDC2011

Nuvem e serviços

Page 14: Conhecendo o CouchDB - TDC2011

Característica de bancos NoSQL

http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid

Page 15: Conhecendo o CouchDB - TDC2011

Erlang

Linguagem funcional criada desenvolvimento de sistema distribuídos.

Flexível e de fácil escalabilidade e extensibilidade.

Page 16: Conhecendo o CouchDB - TDC2011

É ACID!

Page 17: Conhecendo o CouchDB - TDC2011

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

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

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
Page 21: Conhecendo o CouchDB - TDC2011

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
Page 23: Conhecendo o CouchDB - TDC2011

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

Replicação

Page 25: Conhecendo o CouchDB - TDC2011
Page 26: Conhecendo o CouchDB - TDC2011
Page 27: Conhecendo o CouchDB - TDC2011
Page 28: Conhecendo o CouchDB - TDC2011

API RESTful

Page 29: Conhecendo o CouchDB - TDC2011

JSON

Page 30: Conhecendo o CouchDB - TDC2011

GET http://localhost:5984/

{"couchdb":"Welcome","version":"1.0.1"}

Page 31: Conhecendo o CouchDB - TDC2011

Criar banco de dados

PUT http://localhost:5984/database

{"ok":true}

Page 32: Conhecendo o CouchDB - TDC2011

Deletar banco de dados

DELETE http://localhost:5984/database

{"ok":true}

Page 33: Conhecendo o CouchDB - TDC2011

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

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

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

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

Deletar documento

DELETE http://localhost:5984/database/doc?rev=2-

191182436ca9a532ec1124aa91b5a8da

{"ok":true,"id":"doc","rev":"3-4c1033574d7d38e57fe92a1b51fc667d"}

Page 38: Conhecendo o CouchDB - TDC2011

MapReduce

Page 39: Conhecendo o CouchDB - TDC2011

Map

function(doc) { if (doc.city == "Fortaleza") emit(doc.title, doc.month+"/"+doc.year);}

Page 40: Conhecendo o CouchDB - TDC2011

Map

Page 41: Conhecendo o CouchDB - TDC2011
Page 42: Conhecendo o CouchDB - TDC2011

Map

Page 43: Conhecendo o CouchDB - TDC2011

Reduce

function(keys, values) { return values;}

Page 44: Conhecendo o CouchDB - TDC2011

Reduce

Page 45: Conhecendo o CouchDB - TDC2011

Reduce

Page 46: Conhecendo o CouchDB - TDC2011

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

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

_changes

GET http://localhost:5984/database/_changes?feed=continuous

Page 49: Conhecendo o CouchDB - TDC2011

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

import couchdb

couch = couchdb.Server('http://example.com:5984/')

db = couch['mydb']

doc = {'foo': 'bar'}db.save(doc)

Page 51: Conhecendo o CouchDB - TDC2011
Page 52: Conhecendo o CouchDB - TDC2011

Perguntas?

@henriquegogo

www.gogs.com.br