Conhecendo oHenrique Gogó - www.gogs.com.br
Henrique Gogó?
#failProfessor de violãoMúsicoPublicitárioLicenciatura em Letras
#winFortaleza/CeHTML + CSSRubyFront-end developer(jQuery e tal)Node.jsCouchDB
Simbó!
Por que CouchDB?EscalabilidadeReplicaçãoMaster/MasterMVCC (Multiversion concurrency control)Schema freeHTTP / RESTfulJavaS...
Controle de usuário    Validação    CouchApp      Nuvem
Futon
Quem usa?
Como eles usam?
Nuvem e serviços
Característica de bancos NoSQLhttp://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,                +MySQL+Compare+Grid
Erlang      Linguagem funcional criadadesenvolvimento de sistema distribuídos.   Flexível e de fácil escalabilidade e     ...
É ACID!
Em disco, nunca sobrescreve dados.Leitura e escrita nunca interfere em outrosclientes (MVCC).B-tree sempre incremental (ap...
How does                           concurrency work“    MongoDB uses a read/write                                         ...
MVCC          Multiversion concurrency control“    Database readers are neverlocked out and never have to wait            ...
O teorema CAPConsistencyTodos os clientes do banco de dados devem ver omesmos dados, mesmo com atualizaçõessimultâneas.Ava...
Se disponibilidade é prioridade, podemosescrever um node no banco de dados sem esperar outros nodes estarem prontos. Se o ...
Replicação
API RESTful
JSON
GET http://localhost:5984/{"couchdb":"Welcome","version":"1.0.1"}
Criar banco de dadosPUT http://localhost:5984/database            {"ok":true}
Deletar banco de dadosDELETE http://localhost:5984/database             {"ok":true}
Criar documento PUT http://localhost:5984/database/doc-d {"nome":"Henrique","apelido":"Gogó"}    {"ok":true,"id":"doc","re...
Criar documento gerando  o id automaticamente  POST http://localhost:5984/database/  -d {"site":"http://www.gogs.com.br"} ...
Ver documento GET http://localhost:5984/database/doc         {"_id":"doc","_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c","no ...
Atualizar documentoPUT http://localhost:5984/database/doc-d {"_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c",                 ...
Deletar documento                  DELETEhttp://localhost:5984/database/doc?rev=2-  191182436ca9a532ec1124aa91b5a8da      ...
MapReduce
Mapfunction(doc) {  if (doc.city == "Fortaleza")  emit(doc.title,        doc.month+"/"+doc.year);}
Map
Map
Reducefunction(keys, values) {  return values;}
Reduce
Reduce
validate_doc_updatefunction(newDoc, oldDoc, userCtx) { function require(field, message) {   message = message || "Precisa ...
validate_doc_updatePOST http://localhost:5984/database -d{"type": "post"} -H "Content-type:application/json"{"error":"forb...
_changesGET http://localhost:5984/database/_changes?               feed=continuous
Para as linguagens           CouchRest (Ruby)     Biblioteca CouchDB (Python)Cradle (JavaScript server-side – node.js)jque...
import couchdbcouch = couchdb.Server(http://example.com:5984/)db = couch[mydb]doc = {foo: bar}db.save(doc)
Perguntas?             @henriquegogo             www.gogs.com.br
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Upcoming SlideShare
Loading in …5
×

Conhecendo o CouchDB - TDC2011

1,362 views
1,291 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,362
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
25
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Conhecendo o CouchDB - TDC2011

  1. 1. Conhecendo oHenrique Gogó - www.gogs.com.br
  2. 2. Henrique Gogó?
  3. 3. #failProfessor de violãoMúsicoPublicitárioLicenciatura em Letras
  4. 4. #winFortaleza/CeHTML + CSSRubyFront-end developer(jQuery e tal)Node.jsCouchDB
  5. 5. Simbó!
  6. 6. Por que CouchDB?EscalabilidadeReplicaçãoMaster/MasterMVCC (Multiversion concurrency control)Schema freeHTTP / RESTfulJavaScript
  7. 7. Controle de usuário Validação CouchApp Nuvem
  8. 8. Futon
  9. 9. Quem usa?
  10. 10. Como eles usam?
  11. 11. Nuvem e serviços
  12. 12. Característica de bancos NoSQLhttp://www.mongodb.org/display/DOCS/MongoDB,+CouchDB, +MySQL+Compare+Grid
  13. 13. Erlang Linguagem funcional criadadesenvolvimento de sistema distribuídos. Flexível e de fácil escalabilidade e extensibilidade.
  14. 14. É ACID!
  15. 15. Em disco, nunca sobrescreve dados.Leitura e escrita nunca interfere em outrosclientes (MVCC).B-tree sempre incremental (append only).Crash-only conception. (Deu pau? Esquece).
  16. 16. How does concurrency work“ MongoDB uses a read/write ” lock for many operations.http://www.mongodb.org/display/DOCS/How+does+concurrency+work
  17. 17. MVCC Multiversion concurrency control“ Database readers are neverlocked out and never have to wait ”on writers or other readers. http://couchdb.apache.org/docs/overview.html
  18. 18. O teorema CAPConsistencyTodos os clientes do banco de dados devem ver omesmos dados, mesmo com atualizaçõessimultâneas.AvailabilityTodos os clientes do banco de dados podemacessar uma versão dos dados.Partition toleranceO banco pode ser dividido em vários servidores.
  19. 19. Se disponibilidade é prioridade, podemosescrever um node no banco de dados sem esperar outros nodes estarem prontos. Se o banco souber como conciliar essasoperações entre os nodes, alcançamos a“consistência eventual” em troca da alta disponibilidade.
  20. 20. Replicação
  21. 21. API RESTful
  22. 22. JSON
  23. 23. GET http://localhost:5984/{"couchdb":"Welcome","version":"1.0.1"}
  24. 24. Criar banco de dadosPUT http://localhost:5984/database {"ok":true}
  25. 25. Deletar banco de dadosDELETE http://localhost:5984/database {"ok":true}
  26. 26. Criar documento PUT http://localhost:5984/database/doc-d {"nome":"Henrique","apelido":"Gogó"} {"ok":true,"id":"doc","rev":"1-446a0c701e94053b4c3baaa5ef3fe68c"}
  27. 27. 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":"468df12f72c2629fd9319b6 dfd0009dd","rev":"1- 0a48dec3e05fc52dae8b2943a4a55864"}
  28. 28. Ver documento GET http://localhost:5984/database/doc {"_id":"doc","_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c","no me":"Henrique","apelido":"Gogu00f3"}
  29. 29. Atualizar documentoPUT http://localhost:5984/database/doc-d {"_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c", "apelido":"Gogs"} {"ok":true,"id":"doc","rev":"2-191182436ca9a532ec1124aa91b5a8da"}
  30. 30. Deletar documento DELETEhttp://localhost:5984/database/doc?rev=2- 191182436ca9a532ec1124aa91b5a8da {"ok":true,"id":"doc","rev":"3- 4c1033574d7d38e57fe92a1b51fc667d"}
  31. 31. MapReduce
  32. 32. Mapfunction(doc) { if (doc.city == "Fortaleza") emit(doc.title, doc.month+"/"+doc.year);}
  33. 33. Map
  34. 34. Map
  35. 35. Reducefunction(keys, values) { return values;}
  36. 36. Reduce
  37. 37. Reduce
  38. 38. validate_doc_updatefunction(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"); }}
  39. 39. validate_doc_updatePOST http://localhost:5984/database -d{"type": "post"} -H "Content-type:application/json"{"error":"forbidden","reason":"Document must have a title"}
  40. 40. _changesGET http://localhost:5984/database/_changes? feed=continuous
  41. 41. Para as linguagens CouchRest (Ruby) Biblioteca CouchDB (Python)Cradle (JavaScript server-side – node.js)jquery.couch.js (JavaScript client-side)
  42. 42. import couchdbcouch = couchdb.Server(http://example.com:5984/)db = couch[mydb]doc = {foo: bar}db.save(doc)
  43. 43. Perguntas? @henriquegogo www.gogs.com.br

×