nosql com couchdb e php
DESCRIPTION
Apresentando como usar CouchDb com PHPTRANSCRIPT
noSQL com CouchDb e PHP
Thursday, May 6, 2010
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
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
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
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
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
O que é CouchDb?
• Alta disponibilidade
• Confiabilidade
• Extremamente escalável
• É um projeto ‘top-level’ da Apache Foundation
Thursday, May 6, 2010
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 CouchDbdisponíveis para uso (Amazon EC2)
Thursday, May 6, 2010
Um pouco de ‘orientação a
documentos’ ...
Thursday, May 6, 2010
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
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
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
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
Ferramentas• CouchDb Utils
Thursday, May 6, 2010
API (JSON) RESTful
• API para manipulação dos dados
• A manipulação dos dados é baseadaem requisições HTTP
• Independente de linguagem
• (Até) Linguagens client-side podem ser usadas
Thursday, May 6, 2010
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/idThursday, May 6, 2010
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":"[email protected]"}'
Thursday, May 6, 2010
Requisições HTTP com PHP
• cURL
• file_get_contents
• fsockopen
Thursday, May 6, 2010
cURL
Thursday, May 6, 2010
file_get_contents
Thursday, May 6, 2010
fsockopen
Thursday, May 6, 2010
Manipulação JSON
• Funções nativas
• json_encode
• json_decode
Thursday, May 6, 2010
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
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
Referências
• http://www.ibm.com/developerworks/br/library/os-couchdb/
• http://wiki.apache.org/couchdb/
• http://books.couchdb.org/relax/
Thursday, May 6, 2010
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
Questões?
• Sigam-me os bons@theoziran
Thursday, May 6, 2010