SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
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 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.
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 componente ZendDb em
aplicações PHP orientadas a objeto utilizando
Zend Framework 2.
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.
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)
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.
Bancos de Dados NoSQL
Sistemas gerenciadores de bancos de dados NoSQL
comumente usados em aplicações web incluem:
Todos são suportados por PHP.
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.
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.
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.
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
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.
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.
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
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.
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.
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).
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
>
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)
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] =>
)
*/
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ê.
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');
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});
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);
?>
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.
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"});
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
)
*/
?>
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();
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.
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)));
?>
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));
?>
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>
● 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>

Weitere ähnliche Inhalte

Was ist angesagt?

Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 

Was ist angesagt? (20)

Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend FrameworkEntendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
 
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Framework web 02 - 2016
Framework web 02 - 2016Framework web 02 - 2016
Framework web 02 - 2016
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.js
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2
 
ASP.Net Core FAQ
ASP.Net Core FAQASP.Net Core FAQ
ASP.Net Core FAQ
 
Framework web 3 - JSF + Spring boot
Framework web 3 - JSF + Spring bootFramework web 3 - JSF + Spring boot
Framework web 3 - JSF + Spring boot
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPR
 
Mecanismo de busca .NET Core + MongoDB
Mecanismo de busca .NET Core + MongoDBMecanismo de busca .NET Core + MongoDB
Mecanismo de busca .NET Core + MongoDB
 
Interfaces ricas JSF
Interfaces ricas JSF Interfaces ricas JSF
Interfaces ricas JSF
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 

Ähnlich wie NoSQL com Zend Framework 2

Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
Rômulo Jales
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
Grupo Treinar
 

Ähnlich wie NoSQL com Zend Framework 2 (20)

Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Minicurso Yii2
Minicurso Yii2Minicurso Yii2
Minicurso Yii2
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Bancos de dados NoSQL
Bancos de dados NoSQLBancos de dados NoSQL
Bancos de dados NoSQL
 
mongodb.pdf
mongodb.pdfmongodb.pdf
mongodb.pdf
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend framework
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
C # banco de dados
C # banco de dadosC # banco de dados
C # banco de dados
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
 

Mehr von Flávio Lisboa

Mehr von Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

NoSQL com Zend Framework 2

  • 1. NoSQL com Zend Framework 2 Flávio Gomes da Silva Lisboa www.fgsl.eti.br
  • 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.
  • 5. E em breve... Zend Framework Componentes Poderosos para PHP 3ª edição Criando Aplicações PHP com Zend e ExtJS
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. O que há de errado com os Sistemas Gerenciadores de Bancos de Dados Relacionais?
  • 19. O que há de errado com os Sistemas Gerenciadores de Bancos de Dados Relacionais? ● Nada, para a maioria das aplicações web.
  • 20. Mas... E quanto às poucas aplicações web muito muito muito grandes, como estas:
  • 21.
  • 23.
  • 25. 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
  • 26. 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.
  • 27. 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.
  • 28. 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).
  • 29. 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 >
  • 30. 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)
  • 31. 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] => ) */
  • 32. 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ê.
  • 33. 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');
  • 34. 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});
  • 35. 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); ?>
  • 36. 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.
  • 37. 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"});
  • 38. 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 ) */ ?>
  • 39. 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();
  • 40. 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.
  • 41. 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))); ?>
  • 42. 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)); ?>
  • 43. E o Zend Framework 2?
  • 44. CACHE
  • 46.
  • 47.
  • 48.
  • 50. 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>