Introduction
MongoDB (de l'anglais humongous qui peut être traduit par « énorme ») est un système de gestion de base de données orientée documents, répartissable sur un nombre quelconque d'ordinateurs et ne nécessitant pas de schéma prédéfini des données. Il est écrit en C++ et distribué sous licence AGPL. Il fait partie de la mouvance NoSQL.
Les avantages de mongodb sont le nosql, cela signifie qu'il n'existe pas de base de données SQL proprement parlée, donc une grande portabilité et des possibilités de déploiement de base de données dans le cloud computing, dont la possibilité de fabriquer des répliques de base de données un peut partout dans le monde pour optimiser la rapidité d'affichage des pages web, et utiliser des gros algorithmes mapreduce pour les bases de données volumineuses. La license AGPL en fait aussi un atout, car rare sont les technologies qui sont libres et optimisées à ce point dans ce domaine. Parmi les points forts on trouve aussi une adaptation aux langages du coté serveur comme du côté client tel que la lib nodeJS , les langages serveur comme PHP, Perl, Python. Je vous passes toutes les péripéties d'installations du driver PHP sur linux debian, car j'ai fini par réinstaller LAMP proprement (j'utilisais xampp auparavant). Le Windowiens gagnera du temps en installant zwamp.
Liens: conversion sql vers MongoDB :
- Comparaison de la syntaxe sql par rapport à la syntaxe mongo
- Class PHP de conversion Mysql vers MongoDB (que je n'ai pas essayée)
- Querymongo.com Un convertisseur de requêtes SQL vers le langage Mongo (Par RJmetrics)
- Datatypes Pour le descriptif des Type des données stockables dans la collection(binaire et non binaire) avec l'API Perl
- Mongoexport Lien vers le manuel concernant l'export des données avec MongoDB
- Sur le site officiel de PHP SQLtomongo et mongo tutorial .
Le script
Un script permettant de convertir une base de donnée Mysql en collection MongoDB. Ci dessous ou Télécharger.
<?php //Permet d'afficher les erreurs en cas de Bug error_reporting(E_ALL); ini_set("display_errors", 1); // Fonction recuptables sert à la récupération des tables function recuptables( $nombdd ) { //création d'un tableau $tables = array(); //requête sql Show Tables $sql = mysql_query("SHOW TABLES FROM $nombdd ") or die("Erreur de récupération des tables dans $nombdd"); //Boucle de récupération grace à la syntaxe EXPLAIN //Utilitation de la fonction explaintable if( mysql_num_rows( $sql ) > 0 ) { while( $table = mysql_fetch_array( $sql ) ) { $explain = explaintable( $table[0] ); $tables[$table[0]] = $explain; } } //Renvoi le résultat du tableau à la fin de la fonction return $tables; } function explaintable( $tbname ) { $explain = array(); $sql = mysql_query("EXPLAIN $tbname") or die("Erreur de recuperation de la structure de table"); $i = 0; while( $get = mysql_fetch_array( $sql ) ) { array_push( $explain, $get[0] ); $i++; } return $explain; } function verifencodage($string) { if( !mb_check_encoding($string,'UTF-8')) { //Force l'encodage des résultat en UTF-8 return mb_convert_encoding($string,'UTF-8','ISO-8859-1'); } else { return $string; } } // Requete de connection à la base de donnée // Complètez ces champs avec vos identifiants de connection $bdd = "immap"; $mabddmysql = mysql_connect('localhost','root','password'); $configdb = mysql_select_db( $bdd ); $mestables = recuptables( $bdd ); //nom de Votre base de donnée mongoDB $mongobdd = "immap"; try { // Connexion à localhost:27017 $mongoconnection = new Mongo(); $mongobdd = $mongoconnection->selectDB( $mongobdd ); } catch(MongoConnectionException $e) { die("Probleme durant le demarrage de mongoDB. Veuillez redemarrer le serveur Mongo."); } //Boucle de récupération de la structure des tables et de leur contenu foreach( $mestables as $table => $struct ) { //Requête de sélection des tables , configuerez le nombre d'enregistrements en changeant les valeurs suivantes //ex :9999999 = nombre d'enregistrements //SELECT * FROM $table LIMIT 0 , 9999999 $sql = mysql_query("SELECT * FROM $table LIMIT 0 , 9999999") or die( mysql_error() ); $count = mysql_num_rows( $sql ); // Démarre une nouvelle collection (table) mongo $collection = $mongobdd->$table; // Si du contenu est déja présent insérer le contenu if( $count > 0 ) { while( $info = mysql_fetch_array( $sql, MYSQL_NUM )) { $infosize = count( $info ); $mongosql = array(); // for( $i=0; $i < $infosize; $i++ ) { $mongosql[$struct[$i]] = verifencodage($info[$i]); } //requete d'insertion à l'intérieur de la bdd mongo $collection->insert($mongosql); } // Créer simplement une entrée vide } else { for( $i=0; $i < $infosize; $i++ ) { $mongosql[$struct[$i]] = ''; } $collection->insert($mongosql); } } echo "Felicitation! Vérifiez votre base mongo pour l'utiliser !"; ?>