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
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
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