nosql com couchdb e php
DESCRIPTION
Apresentando como usar CouchDb com PHPTRANSCRIPT
![Page 1: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/1.jpg)
noSQL com CouchDb e PHP
Thursday, May 6, 2010
![Page 2: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/2.jpg)
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
![Page 3: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/3.jpg)
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
![Page 4: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/4.jpg)
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
![Page 5: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/5.jpg)
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
![Page 6: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/6.jpg)
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
![Page 7: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/7.jpg)
O que é CouchDb?
• Alta disponibilidade
• Confiabilidade
• Extremamente escalável
• É um projeto ‘top-level’ da Apache Foundation
Thursday, May 6, 2010
![Page 8: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/8.jpg)
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
![Page 9: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/9.jpg)
Um pouco de ‘orientação a
documentos’ ...
Thursday, May 6, 2010
![Page 10: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/10.jpg)
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
![Page 11: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/11.jpg)
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
![Page 12: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/12.jpg)
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
![Page 13: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/13.jpg)
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
![Page 14: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/14.jpg)
Ferramentas• CouchDb Utils
Thursday, May 6, 2010
![Page 15: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/15.jpg)
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
![Page 16: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/16.jpg)
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
![Page 17: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/17.jpg)
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
![Page 18: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/18.jpg)
Requisições HTTP com PHP
• cURL
• file_get_contents
• fsockopen
Thursday, May 6, 2010
![Page 19: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/19.jpg)
cURL
Thursday, May 6, 2010
![Page 20: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/20.jpg)
file_get_contents
Thursday, May 6, 2010
![Page 21: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/21.jpg)
fsockopen
Thursday, May 6, 2010
![Page 22: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/22.jpg)
Manipulação JSON
• Funções nativas
• json_encode
• json_decode
Thursday, May 6, 2010
![Page 23: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/23.jpg)
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
![Page 24: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/24.jpg)
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
![Page 25: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/25.jpg)
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
![Page 26: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/26.jpg)
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
![Page 27: noSQL com CouchDb e PHP](https://reader030.vdocuments.site/reader030/viewer/2022013118/55980c441a28ab262c8b4736/html5/thumbnails/27.jpg)
Questões?
• Sigam-me os bons@theoziran
Thursday, May 6, 2010