Como Instalar MongoDB no Windows com Wamp

maio 6th, 2010 | by | escalabilidade, mongodb, nosql, wamp

mai
06

Postei recentemente no nosso grupo de nosql no google groups, sobre como instalar o MongoDB e PHP no Windows. Achei a instalação extremamente fácil e vou ensinar pra vocês agora.

Baixe o mongodb essa é a versão 32 bits se o teu pc for 64, baixa esse a versão 64 bits aqui. Enquanto baixa, vai lá no C: e cria duas pastas:
mongodb
data
Dentro da pasta data cria uma pasta chamada db

Vai ficar extamente assim:

c:/mongodb
c:/data/db

Assim que acabar o download do mongodb, extraia todos os arquivos para a pasta mongodb, todos aqueles bin, includes e etc…

Pronto, agora vamos em Iniciar > Executar > e digite: CMD
Agora no prompt de comando digite “cd..” sem aspas, até chegar no c:\
Dai entre na pasta bin do mongodb com o comando:
cd mongodb\bin
e digite mongod
mongod mesmo, com o d no final

Pronto o teu servidor está rodando.
Se quiser pode acessar a página do mongodb em http://localhost:27017 se entrar esta tudo ok.
Agora vamos juntar o MongoDB e PHP instalando as dll’s do driver php usando o wamp, mas o processo é bem semelhante se você quiser instalar o MongDB e PHP sem usar o WAMP.
O WAMP usa o php 5.3 vc6 ts. Vamos baixar esse drive:
http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip

No site do MongoDB tem um monte de drivers pra outros projetos e outras versões do PHP:
http://www.mongodb.org/display/DOCS/Downloads
Extraia a dll do MongoDB para a pasta do PHP, no WAMP você coloca em:
C:\wamp\bin\php\php5.3.1\ext
obs.: esse caminho é do meu wamp, veja onde tu instalou ele.

Agora vai lá no iconezinho do WAMP fecha ele e abre denovo, quando aberto clica uma vez nele vai em PHP > php extensions e procura por php_mongo.dll a hailita ele.
Fecha e abre o WAMP novamente.

Pronto, já é pra tudo funcionar. Entrem em http://www.phpmoadmin.com/
Baixa ele e coloca na tua pasta do apache, a que tu usa para rodar as páginas.

Aqui esta um exemplo de uma página:

[php]
<?php
$conexao = new Mongo();
$db = $conexao->testebd;
$collection = $db->usuarios;

function getTime(){
static $tempo;
if( $tempo == NULL ){
$tempo = microtime(true);
}else{
echo ‘Tempo (segundos): ‘.(microtime(true)-$tempo).”;
}
}

getTime();

for($i=0;$i<1000000;$i++){ //1 milhão de registros.
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);
}
$filter = array(
"title" => "Calvin and Hobbes"
);
$cursor = $collection->find($filter);
$cursor->sort(array("title" => 1))->limit(4)->skip(0);
var_dump($cursor->count(true));
var_dump($cursor->count());
getTime();

echo "<br/><br/><br/>";

foreach ($cursor as $obj) {
echo $obj["title"]. " – " . $obj["_id"] . "<br/>\n";
}
$conexao->close();
?>
[/php]

Isso mesmo, ele vai inserir 1 milhão de registros e vai retornar o tempo, já botem o resultado aqui para agente comparar.

Abraços

3 Comments »

MemCached no Windows e integração com o Wamp Server

maio 5th, 2010 | by | escalabilidade, memcached, nosql, sql, wamp

mai
05

O que é Memcache?

É um serviço que roda stand-alone na máquina, que utiliza uma ou mais portas, e que pode ser inicializado, parado e reinicializado conforme necessidades. Ao contrário da sessão do PHP, que é visível somente dentro do escopo de acesso do usuário (claro que existem maneira de compartilhar sessões), o memcache é visível dentro de toda aplicação, ou seja, se tivermos 100 usuários on-line, eles compartilharão o mesmo cache.
A funcionalidade principal dele consiste em armazenar “qualquer coisa” na memória (RAM) do servidor para uso posterior. Segundo o site do próprio, ele é “um sistema distribuído de alto desempenho para o cacheamento (armazenamento) de objetos na memória, genérico por natureza, mas feito para aumentar a velocidade de sites dinâmicos, diminuindo a carga sobre o banco de dados”.

Quando usar o Memcache?

Suponhamos que você tenha um site que faz várias e várias consultas ao MySQL para exibir uma página e, algumas delas, demoram mais de 1 seguro para ser executada… Isso significa que o seu site não está otimizado e, obviamente, está mais lento do que poderia ser.
A maioria dos servidores – de qualidade – hoje em dia, já vêm com ele instalado… Caso você precise instalar ele no seu, recomendo dar uma olhada no site oficial( http://www.danga.com/memcached/ ) para maiores detalhes.
O que é e como é armazenado
Pense no Memcached como uma tabela de hash gigante. Toda informação individual armazenada possui basicamente 3 elementos:
  1. Identificador: um texto com tamanho máximo de 250 caracteres que identifica um corpo de informação. Equivale à chave primária com a qual já estamos acostumados a trabalhar no modelo relacional. Não há regras com relação ao seu valor: sendo assim, você é livre para identificar suas informações como quiser.
  2. Tempo de duração: o tempo (em segundos) que o Memcached manterá esta informação na memória. O tempo máximo suportado é 30 dias.
  3. Corpo: a informação em si. No caso do Memcached, esta possui tamanho máximo de 1 Mb. Se for pouco pra você, sempre é possível dividir a sua informação em mais de um bloco, compactá-la ou, se preferir, alterar o código fonte do Memcached (eu o li inteiro, e é BEM fácil de entender (se você souber C)).
Lembre-se: não se trata de um banco de dados.

Instalação

Baixe os binários do memcached no site http://code.jellycan.com/memcached/ (pegue os binários win32).
Descompacte o conteúdo do arquivo onde desejar (usei c:memcache), você deverá ter os seguintes arquivos dentro da pasta:
memcache.exe
Abra o terminal do windows. Executar cmd
Instale o memcache com o seguinte comando: c:memcachememcache.exe -d install
Inicialize o serviço com o seguinte comando: c:memcachememcache.exe -d start
Agora com o memcache instalado e iniciado, vamos a configuração do WAMP, antes de mais nada é preciso fazer o download da dll do memcache para windows neste endereço:
php5.2 http://downloads.php.net/pierre/php_memcache-5.2-Win32-vc6-x86-20090408.zip
php5.3 http://downloads.php.net/pierre/php_memcache-cvs-20090703-5.3-VC6-x86.zip
Cole a dll em C:\wamp\bin\php\php5.3.0\ext e cole essa dll dentro, feche o WAMP, inicie-o novamente.
Clique com o botão esquerdo no icone do wamp > php > php extensions > habilite a extensão memcache. Pronto, agora é só fazer um teste com o script postado abaixo e está tudo certo.
[php]
<?php
// Exemplo extraído do site www.php.net
$memcache = new Memcache;
$memcache->connect("localhost",11211);echo "Server's version: " . $memcache->getVersion() . "n";
$tmp_object = new stdClass;
$tmp_object->str_attr = "test";
$tmp_object->int_attr = 123;
$memcache->set("key",$tmp_object,false,10);
echo "Store data in the cache (data will expire in 10 seconds)n";
echo "Data from the cache:n";
var_dump($memcache->get("key"));
?>
[/php]

2 Comments »

Bancos de dados não relacionais e o movimento NoSQL

maio 5th, 2010 | by | bigtable, couchdb, escalabilidade, nosql

mai
05

O CouchDB é um dos mais famosos no time dos key-value stores. Ele usadocumentos para definir uma estrutura no banco, armazenando uma chave associada ao um documento. Um documento é apresentado como JSON. Por exemplo:

{

  "Subject": "Bancos não relacionais"
  "Author": "Nico Stepat"
  "PostedDate": "10/15/2009"
  "Tags": ["database", "nosql", "rest"]
}

Repare a estrutura dos dados é definido através da aplicação, o CouchDB não exige nada, apenas um documento JSON.

Talvez o CouchDB ficou famoso por causa da simples API REST e do uso do JSON, ou da interface grafica bonita ou por causa dos views interessantes usando Map-Reduce ou da replicação Multi-Master ou por que foi escrito em Erlang (como esse eesse também). Seja que for, a promessa principal do NoSQL – sendo escalável – o CouchDB não compriu ainda. Ele não é distribuído sozinho, e precisa de ajudaexterna para tal.

Outra forma de dar alguma estrutura aos dados ficou famosa por causa do Google Bigtable. A idéia é não salvar os dados em linhas como estamos acustomados pelos bancos relacionais. Os dados serão salvos através de colunas. Veja a diferença:

Row-Oriented (3 rows presentes – Nome, Salário, Data):

João,1432.00,15/10/2009
Maria,1511.00,13/10/2009
Pedro,1721.00,01/10/2009

Column-Oriented (mesmo exemplo):

João,Maria,Pedro
1432.00,1511.00,1721.00
15/10/2009,13/10/2009,01/10/2009

No column-oriented vem primeiro TODOS os dados da primeira coluna Nome, depois a segunda coluna Salario e por último a coluna Data.

O artigo completo se encontra em:  http://blog.caelum.com.br/2009/10/30/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/

1 Comment »