quarta-feira, 2 de junho de 2010

Como converter MySQL para MongoDB

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("

Erro do banco de dados MONGODB - Inicie o servidor do MongoDD!

Dica: Entre no prompt do windows         cd \         cd mongodb         cd bin         mongod "
); } 
 
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 "

Tabela: ".$b."

"
;                        $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 "

Inserindo em ".$nome_tabela."

"
; 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 de 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.
 
 
 Fonte : iMasters
 

 
 

Nenhum comentário:

Postar um comentário