PHP 5.4 + MongoDB
    Conceitos e prática
Quem fala?
Vinícius de Sá - @vdssg

19 anos

Desenvolve na Móveis Simonetti

Estuda Análise e Desenv. de Sistemas na UNISAM

Ama tecnologia e qualquer coisa que agilize as coisas

Programa em PHP, JavaScript, Python
PHP
PHP: Hypertext Preprocessor
Linguagem de programação OpenSource;
Criada em 1995 por Rasmus Lerdorf;
Sintaxe like C/C++ e Perl;
Orientado a Objetos;
6a Linguagem no Ranking TIOBE;
20 mi de WebSites, em mais de 1 mi de ser vidores;
PHP, mas quem usa?
Facebook;
Google;
WikiMedia (WikiPedia);
Yahoo;
Bank of America;
Wordpress.
Tá, mas como eu faço
    pra instalar?
Debian, Ubuntu, Mint: apt-get install php5;
Fedora, CentOS, RedHat: yum install php;
OpenSuse: zypper install php5;
OS X: port install php
Windows(aff): http://windows.php.net/downloads
Mas... no nosso caso.
wget http:/  /br1.php.net/distributions/
php-5.4.7.tar.bz2
tar -jxvf php-5.4.7.tar.bz2
cd php-5.4.7
./configure --disable-all
make
sudo make install
Testando a instalação

cd ˜/
mkdir testes || cd testes
echo "<?php phpinfo(); ?>" > index.php
sudo php -S 127 1:80
               .0.0.
Resultado da
instalação... :)
E o que o PHP tem de
        bom?
Documentação;
Certificação oficial - Zend Technologies;
Modelo orientado a objeto;
Restful, SOAP, AJAX;
Namespaces;
Closures;
Traits;
Interface CLI;
Servidor Web embutido para testes;
Ecossistema (Composer, git, perl, pecl);
Frameworks (Zend, Symfony, CodeIgniter, Yii);
ORM (Doctrine2, Propel);
Instalação de extensões.
E o NoSQL? O que é?

NoSQL são diferentes sistemas de
armazenamento
que vieram para suprir necessidades
em demandas onde os bancos de dados
tradicionais (relacionais) são
ineficazes.
Bancos NoSQL são...
Sem relacionamentos;
Distribuidos;
Open-Source;
Map/Reduce;
Altamente escaláveis(horizontalmente);
Schema-free;
Fáceis ao replicar;
Simples(instalação, API, etc);
NO ACID - Tolerância à falhas;
Robustos(Grandes quantidades de carga e dados);
Então, o que quer dizer NoSQL?
Tipos de bancos NoSQL !
              =)
Wide Column Store;
Document Store;
Key Value;
Graph Databases;
Wide Column Store
Suporte a grande
quantidade de linhas e
colunas;

Subcolunas;

Exemplos:
 Cassandra (Apache);

 Big Table (Google);
Documents Store
Baseado em docs XML
ou JSON;

Localização por ID ou
qualquer outro registro;

Exemplos:

  MongoDB (10gen);

  CouchDB (Apache);
Key Value
Suporte a maior carga
de dados;

Maior escalabilidade;

Exemplos:
  MemCached;

  SimpleDB;
Graph Store
Armazenamento de
objetos;

Navegabilidade pelos
objetos;

Exemplos:

  Neo4j;

  monetdb;
Mas então, qual eu
 devo utilizar?
O banco certo pra
   situação certa!

Cada ferramenta é boa em uma área
especifíca, não tem como atender todas
as situações com um único tipo de banco.
Então, cuidado!
E onde entra o
       MongoDB?
Alternativa para o velho M do LAMP;
Altamente escalável;
Totalmente sem esquemas;
Fácil acesso à informação;
Suporte a várias linguagens e O.S.;
Casos de Uso Mongo
E pra instalar?

Acesse: http://www.mongodb.org/
downloads
Baixe a release para seu sistema;
Descompacte e pronto. :)
Instalação do Mongo: 1




As versões 32-bits só suportam bases com até 2GB
     e não são recomendados para produção!
Instalação Mongo: 2
tar -zxvf mongodb-osx-x86_64-2.2.0.tgz
Instalação Mongo: 3

sudo cp mongodb-osx-x86_64-2.2.0/bin/* /usr/bin/
Instalação Mongo: 4
sudo mkdir -p /data/db
sudo chown `id -u` /data/db
E agora??
sudo mongod
Como eu sei que funcionou?
  Acesse: http://127 1:28017
                    .0.0.
E quem já sabe SQL?
E quem já sabe SQL?
E como é que uso as duas
   coisas? PHP+Mongo
Extensão Mongo p/ PHP
sudo pecl install mongo
echo "extension=mongo.so" >> /usr/local/lib/php.ini
SQL -> Mongo+PHP




http://www.php.net/manual/en/mongo.sqltomongo.php
Conectando ao Mongo
Inserindo em uma Collection
Removendo em uma Collection
Atualizando em uma Collection
Buscando em uma Collection
Projeto prático

CRUD(inserir, buscar, atualizar e deletar);
Dados de uma pessoa:
    nome, telefones, email, observacoes,
    data de nascimento
Conteúdo disponível em:

 vdssgmu@gmail.com
 github.com/viniciusss
 @vdssg
 www.programador.eti.br
Obrigaduuuuuu!

[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB