SlideShare a Scribd company logo
1 of 28
CouchDB Bianca Caruso da Paixão
Agenda O que é CouchDB? Características Linguagens Suportadas Os Documentos Views Replicação Segurança e Validação Couchdb vs Mongodb Quem usa? Couchdb
O que é CouchDB? Couchdb é um banco de dados orientado a documentos. Isso significa que os dados não são armazenados em tabelas, com campos de tamanho uniforme. Ao invés disso, os registros são armazenados como um documento que contém certas características.  Exemplos: { "_id":"discussion_tables", "_rev":"D1C946B7", "Sunset":false, "FullHours":[1,2,3,4,5,6,7,8,9,10], "Activities": [ {"Name":"Football", "Duration":2, "DurationUnit":"Hours"}, {"Name":"Breakfast“,"Duration":40,"DurationUnit":"Minutes","Attendees":["Jan", "Damien", "Laura"]} ] } Couchdb
Características Última Versão: 0.11.0 É escrito em Erlang, uma linguagem de programação robusta e funcional, ideal para construção de sistemas distribuídos e concorrentes. É facilmente escalável.  É um projeto Open Source, com suporte da Apache.  O couchdb ainda não possui mecanismos de identificação e resolução de failover automático Couchdb
Linguagens Suportadas JavaScript PHP Ruby Python Erlang Couchdb
Os Documentos Um banco de dados CouchDB consiste na coleção de documentos. Cada documento é identificado por uma Unique ID. O CouchDB prove uma API baseada no protocolo HTTP para leitura e atualização (add, edit, delete) Couchdb
Os Documentos Documentos do CouchDB são muito flexíveis, pois não possuem uma estrutura nem conteúdo pré definidos para estes documentos.  São armazenados em formato JSON. Schema-less: Em bancos orientados a documentos não existe o conceito de schema, os documentos podem conter campos diferentes e podem ser armazenados dados diferentes em objetos que possuem um mesmo tipo.  Self contained: Todos os dados referentes a um determinado conceito estão dentro do mesmo documento. Couchdb
Os Documentos Cada documento possui um identificador, e este deve ser bem definido quando a estrutura do documento é montada. Isso porque ele deve ser único, não só em seu database, mas em todos os database quando se estiver trabalhando com Cluster. Couchdb utiliza esse id para o processo de replicação entre os servidores. Dois documentos diferentes, em servidores diferentes, porém com o mesmo id serão considerados o mesmo documento.  Couchdb
Views São as views que permitem a estrutura necessária para a execução de queries sobre os dados. São utilizadas como método de agregação e relatório de documentos. São criadas sobre demanda e dinamicamente de modo que não afetam os documentos originais.  Couchdb pode criar essas views a partir de algoritmos de Map/Reduce. Uma vez construída, o couchdb irá gerenciar através da função Map todos os documentos, relacionados a ela, que são novos ou que sofreram alteração desde a última vez q a view foi construída. Opcionalmente, a função Reduce é executada para cálculo de estatística agregada nos documentos que foram selecionados. (ex: counts, sums, etc) Couchdb
Views Couchdb armazena os resultados dessas views em disco em uma estrutura de Árvore-B, na qual o acesso é muito eficiente. Esta somente é reconstruída quando acessada e se os documentos que se encaixam nos critérios definidos na função de Map são alterados ou criados. Para que não haja a necessidade de reconstruir a view desde o início toda vez que um documento é atualizado, o couchdb atualiza a view somente para aquele documento específico que foi modificado, além disso, também atualiza o índice da view de maneira incremental.  Couchdb
Views Cada view é armazenada em sua própria estrutura de Árvore B, totalmente separada da estrutura dos documentos do banco. Com isso, o espaço em disco que o banco ocupa pode se tornar muito grande. Supondo que um banco de dados com cerca de 30 milhões de documentos ocupe 20GB no disco, se criarmos 8 views, combinando estes documentos, estas podem chegar a ocupar 35GB, levando a um total de 55GB de espaço. Couchdb sacrifica o espaço em disco em prol de performance. Couchdb
Map/Reduce Example: Tickets  Objetivo: select sum(checkout) from ticket; Couchdb
Map/Reduce Map: emit(checkout) Couchdb
Map/Reduce Reduce: sum(checkouts) Couchdb
Map/Reduce Couchdb
Map/Reduce Couchdb
Replicação > Master Master > Master Slave > Multi-Master e de forma bi-direcional entre os masters com detector e gerenciador de conflitos  O Processo de replicação é incremental e rápido, através da cópia de documentos e campos que sofreram alteração desde a última replicação.  Quando dois documentos sofrem alterações, o Couchdb escolhe qual mudança será salva como a última versão, e recebe uma flag  no documento ("conflicts":true) Couchdb
Replicação Em caso de falha na replicação devido a crash ou problemas de rede, a próxima replicação recomeça exatamente no mesmo documento que obteve problemas. É possível implementar uma replicação parcial, que pode ser filtrada através de uma função javascript de modo que apenas documentos específicos sejam replicados. Couchdb
Segurança e Validação Contas Administradoras Podem criar outras contas administradoras e atualizar Design Documents.  Design Documents são documentos especiais que contem as definições de views e outras fórmulas especiais, assim como campos regulares e blobs.  Acesso de Leitura Para proteger seu conteúdo, documentos CouchDB podem ter uma lista de leitores. Isto é uma lista opcional de nomes de leitores que podem ler o documento.  Couchdb
Segurança e Validação Quando um usuário acessa o database, sua credencial (nome e senha) é usada para gerar seu nome de leitor, dinamicamente, através de uma função javascript.   Quando um documento está protegido pela lista de leitor, todo usuário que tentar ler o documento, deve estar listado.  Lista de leitores também se aplicam a views.  Documentos que não acessíveis para um usuário, são dinamicamente filtrados, mantendo a linha do documento e as informações extraídas invisível para não-leitores. Couchdb
Segurança e Validação Acesso para atualização Conforme os arquivos são escritos no disco, eles são validados dinamicamente pelas funções de javascript, tanto para segurança, como validação de dados.  Quando o documento é aprovado em todos os critérios da fórmula de validação, o update é efetivamente executado. Tanto a credencial do usuário, como o documento a ser atualizados são dados como entrada nesta fórmula de validação.  Se houver falha na validação, o update é abortado e o usuário recebe um erro.  Couchdb
Alguns comandos Mostra todas os databases: curl -X GET http://localhost:5984/_all_dbs Criando database: curl -X PUT http://localhost:5984/testdb Infos do database criado: curl -X GET http://localhost:5984/testdb Apagando database: curl -X DELETE http://localhost:5984/testdb
Alguns comandos Mostra Documento: curl -X GET http://localhost:5984/testdb/1ea5789fcc3d2dcb4e246c1e7cb3b9a2  (/database/id_documento) Futton API (no browser): http://127.0.0.1:5984/_utils/
Couchdb vs Mongodb Couchdb
Couchdb vs Mongodb Couchdb
Quem Usa? Alguns Aplicativos do Facebook: Will you Kissme Horoscope Birthday Greeting cards Meebo BBC NetworkApp BerrySki (aplicativo do Black Berry que oferece mapas para GPS) Couchdb
Referencias Quem usa - http://wiki.apache.org/couchdb/CouchDB_in_the_wild wikipedia - http://en.wikipedia.org/wiki/CouchDB FAQ - http://wiki.apache.org/couchdb/Frequently_asked_questions Installation - http://wiki.apache.org/couchdb/Installing_on_RHEL5 Http View API - http://wiki.apache.org/couchdb/HTTP_view_API#Sharing_Code_Between_Views MVCC - http://en.wikipedia.org/wiki/Multiversion_concurrency_control Couchdb insert benchmark -  http://debuggable.com/posts/couchdb-insert-benchmarks:4a4365e2-9d04-4170-9f88-2de34834cda3 Book -  http://manning.com/eernisse/eernisse_meapch1.pdf Map/Reduce - http://www.slideshare.net/gabriele.lana/couchdb-vs-mongodb-2982288 Couchdb
Dúvidas?

More Related Content

What's hot

No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Uma visão geral do OpenLDAP e Active Directory
Uma visão geral do OpenLDAP e Active DirectoryUma visão geral do OpenLDAP e Active Directory
Uma visão geral do OpenLDAP e Active Directoryelliando dias
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Brasil
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPACaelum
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotaçõesdieguinhomcz
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
Servidor de Autenticação Centralizada com OpenLDAP - Thiago Finardi
Servidor de Autenticação Centralizada com OpenLDAP - Thiago FinardiServidor de Autenticação Centralizada com OpenLDAP - Thiago Finardi
Servidor de Autenticação Centralizada com OpenLDAP - Thiago FinardiTchelinux
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 

What's hot (18)

No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Hibernate
HibernateHibernate
Hibernate
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
MongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a DocumentosMongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a Documentos
 
Uma visão geral do OpenLDAP e Active Directory
Uma visão geral do OpenLDAP e Active DirectoryUma visão geral do OpenLDAP e Active Directory
Uma visão geral do OpenLDAP e Active Directory
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geral
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
Autenticação Centralizada
Autenticação CentralizadaAutenticação Centralizada
Autenticação Centralizada
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
Servidor de Autenticação Centralizada com OpenLDAP - Thiago Finardi
Servidor de Autenticação Centralizada com OpenLDAP - Thiago FinardiServidor de Autenticação Centralizada com OpenLDAP - Thiago Finardi
Servidor de Autenticação Centralizada com OpenLDAP - Thiago Finardi
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
LDAP
LDAPLDAP
LDAP
 

Similar to CouchDB Presentation

Similar to CouchDB Presentation (20)

Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
C-Store 7 years later
C-Store 7 years laterC-Store 7 years later
C-Store 7 years later
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
BDD
BDDBDD
BDD
 
Cacti
CactiCacti
Cacti
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
C # banco de dados
C # banco de dadosC # banco de dados
C # banco de dados
 
Introducao banco de dados
Introducao banco de dadosIntroducao banco de dados
Introducao banco de dados
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Modulo 4 active directory e dns
Modulo 4   active directory e dnsModulo 4   active directory e dns
Modulo 4 active directory e dns
 

CouchDB Presentation

  • 2. Agenda O que é CouchDB? Características Linguagens Suportadas Os Documentos Views Replicação Segurança e Validação Couchdb vs Mongodb Quem usa? Couchdb
  • 3. O que é CouchDB? Couchdb é um banco de dados orientado a documentos. Isso significa que os dados não são armazenados em tabelas, com campos de tamanho uniforme. Ao invés disso, os registros são armazenados como um documento que contém certas características. Exemplos: { "_id":"discussion_tables", "_rev":"D1C946B7", "Sunset":false, "FullHours":[1,2,3,4,5,6,7,8,9,10], "Activities": [ {"Name":"Football", "Duration":2, "DurationUnit":"Hours"}, {"Name":"Breakfast“,"Duration":40,"DurationUnit":"Minutes","Attendees":["Jan", "Damien", "Laura"]} ] } Couchdb
  • 4. Características Última Versão: 0.11.0 É escrito em Erlang, uma linguagem de programação robusta e funcional, ideal para construção de sistemas distribuídos e concorrentes. É facilmente escalável. É um projeto Open Source, com suporte da Apache. O couchdb ainda não possui mecanismos de identificação e resolução de failover automático Couchdb
  • 5. Linguagens Suportadas JavaScript PHP Ruby Python Erlang Couchdb
  • 6. Os Documentos Um banco de dados CouchDB consiste na coleção de documentos. Cada documento é identificado por uma Unique ID. O CouchDB prove uma API baseada no protocolo HTTP para leitura e atualização (add, edit, delete) Couchdb
  • 7. Os Documentos Documentos do CouchDB são muito flexíveis, pois não possuem uma estrutura nem conteúdo pré definidos para estes documentos. São armazenados em formato JSON. Schema-less: Em bancos orientados a documentos não existe o conceito de schema, os documentos podem conter campos diferentes e podem ser armazenados dados diferentes em objetos que possuem um mesmo tipo. Self contained: Todos os dados referentes a um determinado conceito estão dentro do mesmo documento. Couchdb
  • 8. Os Documentos Cada documento possui um identificador, e este deve ser bem definido quando a estrutura do documento é montada. Isso porque ele deve ser único, não só em seu database, mas em todos os database quando se estiver trabalhando com Cluster. Couchdb utiliza esse id para o processo de replicação entre os servidores. Dois documentos diferentes, em servidores diferentes, porém com o mesmo id serão considerados o mesmo documento. Couchdb
  • 9. Views São as views que permitem a estrutura necessária para a execução de queries sobre os dados. São utilizadas como método de agregação e relatório de documentos. São criadas sobre demanda e dinamicamente de modo que não afetam os documentos originais. Couchdb pode criar essas views a partir de algoritmos de Map/Reduce. Uma vez construída, o couchdb irá gerenciar através da função Map todos os documentos, relacionados a ela, que são novos ou que sofreram alteração desde a última vez q a view foi construída. Opcionalmente, a função Reduce é executada para cálculo de estatística agregada nos documentos que foram selecionados. (ex: counts, sums, etc) Couchdb
  • 10. Views Couchdb armazena os resultados dessas views em disco em uma estrutura de Árvore-B, na qual o acesso é muito eficiente. Esta somente é reconstruída quando acessada e se os documentos que se encaixam nos critérios definidos na função de Map são alterados ou criados. Para que não haja a necessidade de reconstruir a view desde o início toda vez que um documento é atualizado, o couchdb atualiza a view somente para aquele documento específico que foi modificado, além disso, também atualiza o índice da view de maneira incremental. Couchdb
  • 11. Views Cada view é armazenada em sua própria estrutura de Árvore B, totalmente separada da estrutura dos documentos do banco. Com isso, o espaço em disco que o banco ocupa pode se tornar muito grande. Supondo que um banco de dados com cerca de 30 milhões de documentos ocupe 20GB no disco, se criarmos 8 views, combinando estes documentos, estas podem chegar a ocupar 35GB, levando a um total de 55GB de espaço. Couchdb sacrifica o espaço em disco em prol de performance. Couchdb
  • 12. Map/Reduce Example: Tickets Objetivo: select sum(checkout) from ticket; Couchdb
  • 17. Replicação > Master Master > Master Slave > Multi-Master e de forma bi-direcional entre os masters com detector e gerenciador de conflitos O Processo de replicação é incremental e rápido, através da cópia de documentos e campos que sofreram alteração desde a última replicação. Quando dois documentos sofrem alterações, o Couchdb escolhe qual mudança será salva como a última versão, e recebe uma flag  no documento ("conflicts":true) Couchdb
  • 18. Replicação Em caso de falha na replicação devido a crash ou problemas de rede, a próxima replicação recomeça exatamente no mesmo documento que obteve problemas. É possível implementar uma replicação parcial, que pode ser filtrada através de uma função javascript de modo que apenas documentos específicos sejam replicados. Couchdb
  • 19. Segurança e Validação Contas Administradoras Podem criar outras contas administradoras e atualizar Design Documents. Design Documents são documentos especiais que contem as definições de views e outras fórmulas especiais, assim como campos regulares e blobs. Acesso de Leitura Para proteger seu conteúdo, documentos CouchDB podem ter uma lista de leitores. Isto é uma lista opcional de nomes de leitores que podem ler o documento. Couchdb
  • 20. Segurança e Validação Quando um usuário acessa o database, sua credencial (nome e senha) é usada para gerar seu nome de leitor, dinamicamente, através de uma função javascript.   Quando um documento está protegido pela lista de leitor, todo usuário que tentar ler o documento, deve estar listado. Lista de leitores também se aplicam a views. Documentos que não acessíveis para um usuário, são dinamicamente filtrados, mantendo a linha do documento e as informações extraídas invisível para não-leitores. Couchdb
  • 21. Segurança e Validação Acesso para atualização Conforme os arquivos são escritos no disco, eles são validados dinamicamente pelas funções de javascript, tanto para segurança, como validação de dados. Quando o documento é aprovado em todos os critérios da fórmula de validação, o update é efetivamente executado. Tanto a credencial do usuário, como o documento a ser atualizados são dados como entrada nesta fórmula de validação. Se houver falha na validação, o update é abortado e o usuário recebe um erro. Couchdb
  • 22. Alguns comandos Mostra todas os databases: curl -X GET http://localhost:5984/_all_dbs Criando database: curl -X PUT http://localhost:5984/testdb Infos do database criado: curl -X GET http://localhost:5984/testdb Apagando database: curl -X DELETE http://localhost:5984/testdb
  • 23. Alguns comandos Mostra Documento: curl -X GET http://localhost:5984/testdb/1ea5789fcc3d2dcb4e246c1e7cb3b9a2 (/database/id_documento) Futton API (no browser): http://127.0.0.1:5984/_utils/
  • 26. Quem Usa? Alguns Aplicativos do Facebook: Will you Kissme Horoscope Birthday Greeting cards Meebo BBC NetworkApp BerrySki (aplicativo do Black Berry que oferece mapas para GPS) Couchdb
  • 27. Referencias Quem usa - http://wiki.apache.org/couchdb/CouchDB_in_the_wild wikipedia - http://en.wikipedia.org/wiki/CouchDB FAQ - http://wiki.apache.org/couchdb/Frequently_asked_questions Installation - http://wiki.apache.org/couchdb/Installing_on_RHEL5 Http View API - http://wiki.apache.org/couchdb/HTTP_view_API#Sharing_Code_Between_Views MVCC - http://en.wikipedia.org/wiki/Multiversion_concurrency_control Couchdb insert benchmark - http://debuggable.com/posts/couchdb-insert-benchmarks:4a4365e2-9d04-4170-9f88-2de34834cda3 Book - http://manning.com/eernisse/eernisse_meapch1.pdf Map/Reduce - http://www.slideshare.net/gabriele.lana/couchdb-vs-mongodb-2982288 Couchdb