27
noSQL com CouchDb e PHP [email protected] theoziran.com.br Thursday, May 6, 2010

noSQL com CouchDb e PHP

Embed Size (px)

DESCRIPTION

Apresentando como usar CouchDb com PHP

Citation preview

Page 1: noSQL com CouchDb e PHP

noSQL com CouchDb e PHP

[email protected]

Thursday, May 6, 2010

Page 2: noSQL com CouchDb e PHP

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

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

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

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

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

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

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

Um pouco de ‘orientação a

documentos’ ...

Thursday, May 6, 2010

Page 10: noSQL com CouchDb e PHP

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

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

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

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

Ferramentas• CouchDb Utils

Thursday, May 6, 2010

Page 15: noSQL com CouchDb e PHP

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

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

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

Requisições HTTP com PHP

• cURL

• file_get_contents

• fsockopen

Thursday, May 6, 2010

Page 19: noSQL com CouchDb e PHP

cURL

Thursday, May 6, 2010

Page 20: noSQL com CouchDb e PHP

file_get_contents

Thursday, May 6, 2010

Page 21: noSQL com CouchDb e PHP

fsockopen

Thursday, May 6, 2010

Page 22: noSQL com CouchDb e PHP

Manipulação JSON

• Funções nativas

• json_encode

• json_decode

Thursday, May 6, 2010

Page 23: noSQL com CouchDb e PHP

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

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 26: noSQL com CouchDb e PHP

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

Questões?

• Sigam-me os bons@theoziran

Thursday, May 6, 2010