Data

2 jun, 2010

Como converter MySQL para MongoDB

Publicidade

Observei
que a maioria dos programadores PHP utiliza MySQL e, para
começar a usar o MongoDB, necessita de uma
base de dados, para começar a programar sua funções. Com
isso, tive a idéia de criar um conversor simples de MySQL
para MongoDB. Aqui vou explicar o seu código e como é simples
utilizar o MongoDB com PHP. Criei
uma interface bem simples para que possamos enviar os dados sem
precisar ficar mudando no código.

Baixe
o MongoDB e instale-o

Essa
interface enviará, via POST, as variáveis de conexão com o banco de
dados MySQL. Vamos começar criando/recebendo as
variáveis de conexão com o banco de dados MySQL.

$host = isset($_REQUEST['host_mysql']) ? $_REQUEST['host_mysql'] : "localhost";
$user = isset($_REQUEST['user_mysql']) ? $_REQUEST['user_mysql'] : "usuario";
$pass = isset($_REQUEST['pass_mysql']) ? $_REQUEST['pass_mysql'] : "senha";
$db = isset($_REQUEST['db_mysql']) ? $_REQUEST['db_mysql'] : "teste_latin";

Agora é hora de criar a conexão
com o MongoDB utilizando uma extensão instalada no
php: http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip

try{
$conexao = new Mongo(); //abre conexão com o MongoDB
$db_mongo = $conexao->$db; //cria a database com o mesmo nome do MySQL
}
catch(MongoConnectionException $e){
die("<h1 class='erro'>Erro do banco de dados MONGODB - Inicie o servidor do MongoDD!</h1><span class='dica'>Dica: Entre no prompt do windows<br />
cd \ <br />
cd mongodb<br />
cd bin<br />
mongod </span>");
}

Caso
o seu MongoDB não esteja rodando, o script indicará o erro e
mostrará a forma como iniciar seu MongoDB no Windows.

Para conseguirmos
pegar o nome de todas as tabelas da nossa database no MySQL
utilizamos a seguinte query:

  
     $query_pega_tabelas= "SHOW TABLES";

O nome do
nosso campo contendo as tabelas será:

  
     $index_tabelas= "Tables_in_".$db; //nome do array com o valor do nome das tabelas via SHOW TABLES

A
variável $db será o nome da nossa database no MySQL.

Após pegarmos os
nomes das nossas tabelas, é hora de irmos de uma
a uma pegando seus dados e inserindo-os. Não
será necessário pegar os metadados (nome,
tipo) dos campos, pois o MongoDB não necessita dessas informações.

        if($result_pega_tabelas=mysql_query($query_pega_tabelas)){    
while($arr_pega_tabelas[] = mysql_fetch_assoc($result_pega_tabelas)){
if(is_array($v)){
foreach($v as $a => $b){
echo "<h3>Tabela: ".$b."</h3>";
$nome_tabela = $b;
$query = 'select * from '.$nome_tabela;

Geramos uma collection para cada
tabela existente no MySQL.

$collection = $db_mongo->$nome_tabela; 

Neste momento estamos rodando linha
por linha da nossa tabela, pegando seus dados.

$rs_select = mysql_query($query); 
echo "<h3>Inserindo em ".$nome_tabela."</h3>";
while($arr_dados = mysql_fetch_assoc($rs_select)){
foreach($arr_dados as $c => $v){

Precisamos codificar nossos valores,
assim como os campos, em utf8. Se o banco
já estiver em utf8, não será necessária
a conversão. Para fazer essa conversão, criei
um pequena função utilizando iconv. Para
converter, meu banco está codificado em latin1, que no caso
será repassado como iso-8859-1. Essa função vai ao final do
script.

function utf8_encode_suissa($s) {
return iconv('iso-8859-1', 'utf-8', $s);
}

Após a conversão para utf8,
inserimos o objeto codificado na nossa collection, que terá o mesmo
nome que a tabela correspondente no MySQL.

                               $obj[utf8_encode_suissa($c)] = utf8_encode_suissa($v); //converto para UTF-8 pois o MongoDB é UTF-8

}

$collection->insert($obj); //aqui inserimos o OBJ codificado em utf-8 no MongoDB

}//fim while

}//fim foreach

}//fim if array

}//fim while

}//fim if

 Ao término
do script, você poderá entrar no phpMoAdmin,
ferramenta para manipular as bases e as collections do MongoDB, e ver
na lista das databases sua nova base criada.

 O scrip
completo com a interface para inserir os dados se encontra em http://www.nosqlbr.com.br/conversor_mysql_mongodb.zip

Adendo:
Instalação MongoDB

Instalar
o MongDB pode ser um pouco trabalhoso. Veja abaixo um pequeno
tutorial. Se depois você ainda tiver dificuldade, basta procurar em
algum fórum, como o NoSQL.com.br, que você encontrará mais ajuda.

  1. Baixe
    o MongoDB
    (versão
    32 bits

    ou versão
    64 bits)

  2. Cria
    as duas pastas:
    c:/mongodb
    c:/data/db
  3. Extraia todos os arquivos
    para
    a pasta mongodb
  4. Abra o prompt de comando e vá até a a pasta c:/mongodb/bin.
    Dentro dela, dê o comando mongod
    (isso
    mesmo, com o
    d
    no
    final)

Pronto,
seu servidor está rodando. Para verificar se está tudo correto,
acesse a página do mongodb em
http://localhost:27017.

Para
unir o MongoDB com o PHP é necessário instalar as DLLs
do driver PHP. Para isso usaremos o WAMP.

  1. Baixe o drive do PHP (O WAMP usa o php 5.3 vc6 ts) (add link
    http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip).

  2. Extraia
    a dll do MongoDB para a pasta do PHP, no WAMP instalado na minha
    máquina está em : C:\wamp\bin\php\php5.3.1\ext
  3. Feche o WAMP e abra-o novamente, vá em PHP > PHP extensions e
    habilite a extensão  php_mongo.dll .
  4. Feche
    e abra o WAMP novamente.

Pronto,
já é pra tudo funcionar.

Se
desejar utilizar o phpmoadmin, faça o download (http://www.phpmoadmin.com)
e o coloque
na pasta do apache.