NoSQL com Zend Framework 2
Flávio Gomes da Silva Lisboa
www.fgsl.eti.br
Quem sou eu?
● Bacharel em Ciência da Computação com pós-graduação em Aplicações
Corporativas usando Orientação a Objetos ...
Autor de
20132012201020092008
http://www.novatec.com.br/autores/flaviogomes/
Saindo do forno...
E em breve...
Zend Framework Componentes Poderosos para PHP 3ª edição
Criando Aplicações PHP com Zend e ExtJS
Autor também de
http://www.perse.com.br
Escreve no blog
http://romocavaleirodoespaco.blogspot.com.br/
Programação (← →)
Nesta palestra aprenderemos a utilizar a
abstração de MongoDB do PHP para persistir
dados no lugar do co...
Bancos de Dados Relacionais
O banco de dados relacional é a arquitetura mais comum e
difundida para organização de dados e...
Bancos de Dados Relacionais:
ACID
Além de implementar funções CRUD (usando SQL), transações em
bancos de dados relacionais...
Bancos de Dados NoSQL
Bancos de dados NoSQL armazenam os dados
em um formato livremente estruturado e não
fornece (tipicam...
Bancos de Dados NoSQL
Sistemas gerenciadores de bancos de dados NoSQL
comumente usados em aplicações web incluem:
Todos sã...
Bancos de Dados de Arquivos
Simples
Bancos de dados de arquivos simples armazenam os
dados em arquivos de texto... simples...
Bancos de Dados XML
XML é uma linguagem de marcação que define
um conjunto de regras para codificar documentos
em um forma...
Camadas de Abstração
Aplicações web tipicamente suportam mais do que um banco
de dados, tipicamente através do uso de módu...
Camadas de Abstração em PHP
Camadas de abstração amplamente usadas no PHP
incluem:
PDO: suportado por uma extensão PHP
ODB...
Camadas de Abstração X Funções Nativas
Camadas de abstração suportam portabilidade de código.
Quando desenver (corretament...
O que há de errado com os Sistemas
Gerenciadores de Bancos de Dados Relacionais?
O que há de errado com os Sistemas
Gerenciadores de Bancos de Dados Relacionais?
● Nada, para a maioria das aplicações web.
Mas...
E quanto às poucas aplicações web muito muito
muito grandes, como estas:
Desempenho
Escalabilidade
MongoDB
MongoDB (de "huMONGOus" – talvez a combinação de 'huge' +
'monstrous') é um banco de dados NoSQL de código aberto....
O básico do MongoDB
Um documento é a unidade básica de dados para o
MongoDB (é similar a um registro em um banco de
dados ...
Como e quando usar MongoDB
MongoDB é usado para aplicações web de larga
escala. Na maioria das vezes para armazenar
dados ...
Instalando MongoDB
Dois passos são requeridos: o primeiro é instalar o servidor de
banco de dados, o segundo é instalar o ...
Usando MongoDB
MongoDB pode ser usado:
● A partir da linha de comando
● A partir do PHP
● Usando algum sistema de gerencia...
Conectando a um servidor de banco
de dados MongoDB
Para conectar com o MongoDB a partir do PHP,
você precisa criar um obje...
Conectando a um servidor de banco
de dados MongoDB
<?php
$connection = new
MongoClient("mongodb://username:password@localh...
Selecionando um banco de dados
Uma vez que você tenha estabelecido a conexão com o servidor de
banco de dados, você a usar...
Criando/Selecionando uma Coleção
Uma vez que você tenha acessado um banco de dados, você
pode selecionar uma coleção:
<?ph...
Armazenando um objeto
MongoDB é usado para armazenar objetos e documentos:
<?php
// creating an array
$student1 = array(st...
MongoDB: Incluindo dados
<?php
$connection = new Mongo("mongodb://andres:password@localhost");
$collection = $connection->...
Chaves primárias e object ids
MongoDB usa identificadores únicos para cada
documento (chamados chaves primárias ou
objecti...
MongoDB: procurando um
documento
O método findOne() é usado para encontrar o
primeiro casamento em uma coleção.
Pode ser c...
MongoDB: procurando um
documento
<?php
$document = $collection->findOne(array("module_name" => "im2801"));
print_r($docume...
MongoDB: procurando todos os
documentos
<?php
$cursor = $collection->find();
foreach ($cursor as $key => $val)
{
echo "$ke...
MongoDB: atualizando uma coleção
Você pode usa o método update para atualizar uma coleção. O método update
aceita três par...
MongoDB: atualizando uma coleção
<?php
// substitui o documento inteiro pelo valor do primeiro array
$collection->update(a...
MongoDB: removendo dados de
uma coleção
Remover dados é tão simples quanto adicionar dados:
<?php
$criteria = array('_id'=...
E o Zend Framework 2?
CACHE
SESSÃO
https://github.com/doctrine/DoctrineMongoODMModule
Referências
● Baravalle, A. PHP and NoSQL. Disponível em
<http://www.baravalle.com/presentations/im2801/lecture9.html>
● B...
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
Próximos SlideShares
Carregando em…5
×

NoSQL com Zend Framework 2

665 visualizações

Publicada em

Palestra ministrada na PHP Conference Brasil 2015

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
665
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

NoSQL com Zend Framework 2

  1. 1. NoSQL com Zend Framework 2 Flávio Gomes da Silva Lisboa www.fgsl.eti.br
  2. 2. Quem sou eu? ● Bacharel em Ciência da Computação com pós-graduação em Aplicações Corporativas usando Orientação a Objetos e Tecnologia Java pela Universidade Tecnológica Federal do Paraná. Programador formado pelo Centro Estadual de Educação Tecnológica Paula Souza. ● Chefe do setor de adequação da solução e mobilidade do projeto Expresso 3 na Coordenação Estratégica de Ações Governamentais do Serviço Federal de Processamento de Dados (Serpro). ● Zend PHP Certified Engineer, Zend Framework Certified Engineer e Zend Framework 2 Certified Architect.
  3. 3. Autor de 20132012201020092008 http://www.novatec.com.br/autores/flaviogomes/
  4. 4. Saindo do forno...
  5. 5. E em breve... Zend Framework Componentes Poderosos para PHP 3ª edição Criando Aplicações PHP com Zend e ExtJS
  6. 6. Autor também de http://www.perse.com.br
  7. 7. Escreve no blog http://romocavaleirodoespaco.blogspot.com.br/
  8. 8. Programação (← →) Nesta palestra aprenderemos a utilizar a abstração de MongoDB do PHP para persistir dados no lugar do componente ZendDb em aplicações PHP orientadas a objeto utilizando Zend Framework 2.
  9. 9. Bancos de Dados Relacionais O banco de dados relacional é a arquitetura mais comum e difundida para organização de dados estruturados. O conteúdo é armazenado em tabelas e acessado através de uma linguagem especialista, SQL. Em muitos casos, uma interface gráfica de usuário é disponibilizada para simplificar a interação com os bancos de dados. Sistemas gerenciadores de bancos de dados relacionais comumente usados em aplicações Web incluem Oracle (proprietário), SQL Server (proprietário), MySQL/MariaDB (software livre), PostgreSQL (software livre) e SQLite (domínio público). Todos são suportados por PHP.
  10. 10. Bancos de Dados Relacionais: ACID Além de implementar funções CRUD (usando SQL), transações em bancos de dados relacionais são ACID: Atômicas: tudo ou nada. Se uma parte da transação falha, tudo falha Consistente: cada transação pode mover um banco de dados somente entre estados válidos Isoladas: cada transação em processo mas não finalizada será isolada de outras transações Duráveis: uma vez que uma transação tenha sido efetivada, suas mudanças serão refletidas no banco de dados (isso inclui sobreviver a uma quebra do sistema)
  11. 11. Bancos de Dados NoSQL Bancos de dados NoSQL armazenam os dados em um formato livremente estruturado e não fornece (tipicamente) o mesmo nível de controle (no nível do banco de dados) sobre os resultados retornados (por exemplo, ordenação). Eles são com frequência altamente otimizados para simples operações de recuperação e persistência, com o objetivo de alta performance.
  12. 12. Bancos de Dados NoSQL Sistemas gerenciadores de bancos de dados NoSQL comumente usados em aplicações web incluem: Todos são suportados por PHP.
  13. 13. Bancos de Dados de Arquivos Simples Bancos de dados de arquivos simples armazenam os dados em arquivos de texto... simples (como arquivos .txt). Você normalmente precisará desenvolver as funções CRUD para interagir com seu armazenamento de dados e enquanto garante a segurança dos dados armazenados. Banco de dados de arquivos simples são tipicamente usados somente quando outras soluções não estão disponíveis ou em circunstâncias onde a complexidade da aplicação a ser desenvolvida é mínima.
  14. 14. Bancos de Dados XML XML é uma linguagem de marcação que define um conjunto de regras para codificar documentos em um formato que é tanto legível por humanos quando por máquinas. XML pode ser usada para armazenar dados estruturados em arquivos de texto e as funções DOM do PHP permitem interagir facilmente com a árvore de documento.
  15. 15. Camadas de Abstração Aplicações web tipicamente suportam mais do que um banco de dados, tipicamente através do uso de módulos de abstração ou clases de abstração. Isso permite usar a mesma base de código com diferentes bancos de dados – sem necessidade de desenvolver novamente. Por exemplo, o projeto Drupal suporta nativamente MySQL/MariaDB, PostgreSQL ou SQLite, e suporta SQL Server, Oracle e MongoDB com módulos adicionais.
  16. 16. Camadas de Abstração em PHP Camadas de abstração amplamente usadas no PHP incluem: PDO: suportado por uma extensão PHP ODBC: suportado por uma extensão PHP (amplamente usada para interagir com bancos de dados em ambientes Microsoft) Doctrine: suportado por extensões e módulos PHP Zend DB: suportado por extensões e módulos PHP
  17. 17. Camadas de Abstração X Funções Nativas Camadas de abstração suportam portabilidade de código. Quando desenver (corretamente) usando uma camada de abstração, você pode substituir seu sistema gerenciador de banco de dados. Por exemplo, você pode codificar uma aplicação usando MySQL como um back-end e então colocá-la em produção em um back- end Oracle. Qualquer camada de abstração que você decidir usar trará um custo em termos de desempenho.
  18. 18. O que há de errado com os Sistemas Gerenciadores de Bancos de Dados Relacionais?
  19. 19. O que há de errado com os Sistemas Gerenciadores de Bancos de Dados Relacionais? ● Nada, para a maioria das aplicações web.
  20. 20. Mas... E quanto às poucas aplicações web muito muito muito grandes, como estas:
  21. 21. Desempenho
  22. 22. Escalabilidade
  23. 23. MongoDB MongoDB (de "huMONGOus" – talvez a combinação de 'huge' + 'monstrous') é um banco de dados NoSQL de código aberto. MongoDB foi originalmente desenvolvido pela 10gen, uma empresa criada por Eliot Horowitz e Dwight Merriman (o fundador do DoubleClick). Os objetivos do MongoDB eram: ● Reter muitas das funcionalidades de sistemas de gerenciamento de bancos de dados relacionais. ● Permitir escalabilidade horizontal. ● Garantir uma interface "elegante" para desenvolvedores
  24. 24. O básico do MongoDB Um documento é a unidade básica de dados para o MongoDB (é similar a um registro em um banco de dados relacional) Uma coleção é um grupo de documentos (é o equivalente livre de esquema de uma tabela em um banco de dados relacional) Uma única instância de MongoDB pode hospedar múltiplos bancos de dados independentes, cada um dos quais tem suas próprias coleçõs e permissões.
  25. 25. Como e quando usar MongoDB MongoDB é usado para aplicações web de larga escala. Na maioria das vezes para armazenar dados estruturados na forma de objetos – mas ele é muito mais poderoso.
  26. 26. Instalando MongoDB Dois passos são requeridos: o primeiro é instalar o servidor de banco de dados, o segundo é instalar o módulo PHP. Enquanto quase nenhuma configuração é necessária para instalar MongoDB, instalar o módulo PHP requer familiaridade com as configurações do arquivo php.ini. Esteja ciente de que MongoDB pode facilmente crescer usando vários GBs – você pode ter de customizar seu arquivo de configuração se quiser obter desempenho para espaço em disco (tipicamente em máquinas de desenvolvimento).
  27. 27. Usando MongoDB MongoDB pode ser usado: ● A partir da linha de comando ● A partir do PHP ● Usando algum sistema de gerenciamento de banco de dados ●MongoDB shell version: 2.4.9 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user >
  28. 28. Conectando a um servidor de banco de dados MongoDB Para conectar com o MongoDB a partir do PHP, você precisa criar um objeto Mongo, passando nome de usuário, senha, servidor e porta e o nome do banco de dados. O servidor padrão é localhost, e a porta padrão é 27017 (você não precisa normalmente mudar esses parâmetros)
  29. 29. Conectando a um servidor de banco de dados MongoDB <?php $connection = new MongoClient("mongodb://username:password@localhost/database_name"); print_r($connection); /* Mongo Object ( [connected] => 1 [status] => [server:protected] => [persistent:protected] => ) */
  30. 30. Selecionando um banco de dados Uma vez que você tenha estabelecido a conexão com o servidor de banco de dados, você a usará para acessar um banco de dados: <?php $db = $connection->dbname; // opens the database dbname ?> Se você tem direitos administrativos para o MongoDB e o banco de dados não existir, o MongoDB automaticamente criará um novo banco de dados para você.
  31. 31. Criando/Selecionando uma Coleção Uma vez que você tenha acessado um banco de dados, você pode selecionar uma coleção: <?php $collection = $db->addresses; ?> Equivalente ao console do MongoDB, db.createCollection('addresses');
  32. 32. Armazenando um objeto MongoDB é usado para armazenar objetos e documentos: <?php // creating an array $student1 = array(student_id => "u1111111", module_name => "im2801", mark => 41); collection->insert($student1); ?> Equivalente ao console do MongoDb, db.addresses.insert({'student_id' : 'u1111111', 'module_name' : 'im2801', 'mark' : 41});
  33. 33. MongoDB: Incluindo dados <?php $connection = new Mongo("mongodb://andres:password@localhost"); $collection = $connection->andres->students; // creating an array $student1 = array("student_id" => "u1111111", "module_name" => "im2801", "mark" => 41); $collection->insert($student1); $student1 = array("student_id" => "u1111112", "module_name" => "im2801", "mark" => 42); $collection->insert($student2); ?>
  34. 34. Chaves primárias e object ids MongoDB usa identificadores únicos para cada documento (chamados chaves primárias ou objectids). A menos que outro comportamento seja configurado, MongoDB automaticamente criará objectIds. O ObjectId é composto de um timestamp, bem como informação sobre a máquina onde foi criado. Como um objeto, tem métodos que podem ser invocados.
  35. 35. MongoDB: procurando um documento O método findOne() é usado para encontrar o primeiro casamento em uma coleção. Pode ser chamado sem parâmetros ou usando um array com os parâmetros. Equivale ao console do MongoDB, db.addresses.findOne({"module_name" : "im2801"});
  36. 36. MongoDB: procurando um documento <?php $document = $collection->findOne(array("module_name" => "im2801")); print_r($document); /* Array ( [_id] => MongoId Object ( [$id] => 528c2686eae33e20048b4567 ) [student_id] => u1111111 [module_name] => im2801 [mark] => 41 ) */ ?>
  37. 37. MongoDB: procurando todos os documentos <?php $cursor = $collection->find(); foreach ($cursor as $key => $val) { echo "$key: "; print_r($val); } ?> Equivale ao console do MongoDB, db.[COLLECTION].find();
  38. 38. MongoDB: atualizando uma coleção Você pode usa o método update para atualizar uma coleção. O método update aceita três parâmetros: ● Um array, especificando a consulta ● Um segundo array, especificando a substituição ● Um terceiro array opcional, com quaisquer opções MongoCollection::update(array $criteria, array $new_object [, array $options = array() ]) Por padrão, MongoDB atualizará somente o primeiro casamento no documento. Para opções avançadas, consulte a documentação.
  39. 39. MongoDB: atualizando uma coleção <?php // substitui o documento inteiro pelo valor do primeiro array $collection->update(array("student_id" => "u1111111", "module_name" => "im2801"), array("mark" => 45)); // apenas muda o valor referido pelo primeiro array $collection->update(array("student_id" => "u1111111", "module_name" => "im2801"), array("$set" => array("mark" => 45))); ?>
  40. 40. MongoDB: removendo dados de uma coleção Remover dados é tão simples quanto adicionar dados: <?php $criteria = array('_id'=> new MongoId('4ba667b0a90578631c9caea1')); $collection->remove($criteria, array("justOne" => true)); ?>
  41. 41. E o Zend Framework 2?
  42. 42. CACHE
  43. 43. SESSÃO
  44. 44. https://github.com/doctrine/DoctrineMongoODMModule
  45. 45. Referências ● Baravalle, A. PHP and NoSQL. Disponível em <http://www.baravalle.com/presentations/im2801/lecture9.html> ● Brown, C., DeHayes, D., Hoffer, J., Martin, E. and Perkins, W. (2011) Managing information technology. 7th edn. New Jersey: Pearson Education. ISBN-10: 0132146320 or ISBN-13: 978- 0132146326. ● Connolly, T. M. and Begg, C. E. (2010) Database Systems: A Practical Approach to Design, Implementation and Management, 5/E, Pearson/Addison Wesley. ● Harrison, G. 10 things that you should know about NoSQL databases. Disponível em <http://www.techrepublic.com/blog/10-things/10-things-you-should-know-about-nosql- databases/> ● High Scalability. What the Heck are people using NoSQL for. Disponível em <http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html> ● PHP Group. Database Extensions. Disponível em <http://php.net/manual/en/refs.database.php> ● Weil, K. How They use NoSQL in Twitter.Disponível em <http://www.infoq.com/presentations/NoSQL-at-Twitter>

×