1. noSQL com CouchDb
e PHP
theoziran@gmail.com
theoziran.com.br
Thursday, May 6, 2010
2. Quem sou eu?
• Theoziran Lima
• Analista de Sistemas formado pela
Faculdade iDEZ
• Atua como Analista e Desenvolvedor de
Sistemas na Acade Sistemas
• Membro da coordenação do PHP-PB
Thursday, May 6, 2010
3. Sumário
• O que é CouchDb?
• Bancos orientados a documentos
• Como funciona?
• Manipulação dos dados
• Opções de manipulação com PHP
• HelloWord (‘Twitter’) com PHP e
CouchDb
Thursday, May 6, 2010
4. O que é CouchDb?
• Em Abril de 2005, Damien Katz postou em
seu blog um novo engine database que
estava trabalhando
• O CouchDB foi escrito originalmente em
C++, mas em abril de 2008, o projeto foi
movido para a plataforma Erlang.
Thursday, May 6, 2010
5. O que é CouchDb?
• É uma banco de dados orientado
a documentos
• O acesso é feito a através
da API de JavaScript
Object Notation
(JSON) RESTful
Thursday, May 6, 2010
6. O que CouchDb não é?
• Um banco de dados relacional
• noSQL é sem SQL, beleza neh!?
• Um substitudo para os bancos relacionais
• Um banco orientado a objetos
Thursday, May 6, 2010
7. O que é CouchDb?
• Alta disponibilidade
• Confiabilidade
• Extremamente escalável
• É um projeto ‘top-level’ da Apache
Foundation
Thursday, May 6, 2010
8. CouchDb
• O CouchDb pode ser instalado na maioria
dos sistemas POSIX, incluindo Linux e
MacOS
• Não existe versão oficial para Windows
• Já existem servidores com CouchDb
disponíveis para uso (Amazon EC2)
Thursday, May 6, 2010
10. Armazenamento em
documentos
• É o armazenamento de documentos
autocontidos:
• Não existe o conceito de tabelas,
relacionamentos e linhas
• Todos os dados estão nos documentos
• Os documentos são auto suficientes
• Os documentos podem ter anexos
Thursday, May 6, 2010
11. Cenário dos bancos
não relacionais
• A idéia não é subsituir os bancos
relacionais
• Alternativa para projetos onde ele é mais
adequado que os bancos relacionais:
• Wikis, blogs e sistemas de gerenciamento
de documentos.
Thursday, May 6, 2010
12. Como funciona?
• Possui mecanismo de armazenamento em
B-tree
• Fornece mecanismos para procurar, inserir
e editar documentos
• Utiliza MapReduce na recuperação dos
dados (Mapear/Reduzir)
Thursday, May 6, 2010
13. Trantamento de
concorrência
• Não há mecanismo de bloqueio
• MVCC (Multiversion Concurrency control)
• O cliente recebe a última versão do
documento
• Só é vista as alterações quando a
transação é completada
• É usado o mesmo mecanismos nos banco
de dados modernos (MySQL, Oracle...)
Thursday, May 6, 2010
15. API (JSON) RESTful
• API para manipulação dos dados
• A manipulação dos dados é baseada
em requisições HTTP
• Independente de linguagem
• (Até) Linguagens client-side podem
ser usadas
Thursday, May 6, 2010
16. API (JSON) RESTFul
• Quatro operações básicas para trabalhar
com documentos
• Create: HTTP PUT /db/id
• Create: HTTP POST /id
• Read: HTTP GET /db/id
• Update: HTTP PUT /db/id
• Delete: HTTP DELETE /db/id
Thursday, May 6, 2010
17. Manipulando dados
• curl -X GET http://localhost:5984/_all_dbs
• curl -X PUT http://localhost:5984/pessoa
• curl -X GET http://localhost:5984/_all_dbs
• curl -X POST http://localhost:5984/pessoa -
d '{"nome":"Theoziran Lima","idade":
21,"email":"theoziran@gmail.com"}'
Thursday, May 6, 2010
23. HelloWorld
• Aplicação ler os últimos twits com a
hashtag #ensol
• Armanezar em uma estrutura no CouchDb
• Ler a estrutura e mostrar na tela
• Apagar dos documentos
... vou mostrar o código pronto pra
TENTAR driblar Murphy’ Law
Thursday, May 6, 2010
24. Exemplo Map
• curl -X POST http://localhost:5984/posts/
_temp_view -d '{"map":"function(doc){ if
(doc.from && doc.from == "gomex" )
{ emit(doc._id, doc); } }"}'
Thursday, May 6, 2010
26. Conclusão
• Apache CouchDb ainda está no começo
• Sendo adotado em bastante aplicações
(Facebook apps, iPhone apps...)
• Ganhando espaço em relação aos Db`s
relacionais mesmo sem ser essa intenção
(será mesmo!?)
Thursday, May 6, 2010