60 votes

conversion d'une base de données de mysql à mongoDb

Existe-t-il un moyen simple de changer la base de données de mysql à mongoDB ?

ou mieux, quelqu'un peut-il me suggérer un bon tutoriel pour le faire ?

57voto

Gates VP Points 26481

Existe-t-il un moyen simple de changer la base de données de mysql à mongoDB ?

Méthode n° 1 : exporter à partir de MySQL dans un format CSV, puis utiliser la fonction outil mongoimport . Cependant, cela ne fonctionne pas toujours bien en termes de traitement des dates des données binaires.

Méthode n° 2 : script le transfert dans la langue de votre choix. En gros, vous écrivez un programme qui lit tout à partir de MySQL, un élément à la fois, puis l'insère dans MongoDB.

La méthode n°2 est meilleure que la n°1, mais elle n'est toujours pas adéquate.

MongoDB utilise des collections au lieu de tables. MongoDB ne prend pas en charge les jointures. Dans toutes les bases de données que j'ai vues, cela signifie que la structure de vos données dans MongoDB est différente de la structure dans MySQL.

Pour cette raison, il n'existe pas d'"outil universel" pour le portage de SQL vers MongoDB. Vos données devront être transformées avant d'atteindre MongoDB.

22voto

Anlek Points 505

Si vous utilisez Ruby, vous pouvez également essayer : Mongify

Il s'agit d'un moyen très simple de transformer vos données d'un RDBS en MongoDB sans rien perdre.

Mongify lira votre base de données mysql, construira un fichier de traduction pour vous et tout ce que vous avez à faire est de définir comment vous voulez que vos données soient transformées.

Il prend en charge :

  • Mise à jour automatique des ID (vers BSON ObjectID)
  • Mise à jour des ID de référencement
  • Type Valeurs de la coulée
  • Intégration de tableaux dans d'autres documents
  • Avant de sauvegarder les filtres (pour permettre de modifier les données manuellement)
  • et bien plus encore...

Pour en savoir plus, consultez le site : http://mongify.com/getting_started.html

Il y a également une courte vidéo de 5 minutes sur la page d'accueil qui vous montre à quel point c'est facile.

5voto

benkamin Points 51

Voici ce que j'ai fait avec Node.js dans ce but :

var mysql = require('mysql');
var MongoClient = require('mongodb').MongoClient;

function getMysqlTables(mysqlConnection, callback) {
    mysqlConnection.query("show full tables where Table_Type = 'BASE TABLE';", function(error, results, fields) {
        if (error) {
            callback(error);
        } else {
            var tables = [];
            results.forEach(function (row) {
                for (var key in row) {
                    if (row.hasOwnProperty(key)) {
                        if(key.startsWith('Tables_in')) {
                            tables.push(row[key]);
                        }
                    }
                }
            });
            callback(null, tables);
        }
    });

}

function tableToCollection(mysqlConnection, tableName, mongoCollection, callback) {
    var sql = 'SELECT * FROM ' + tableName + ';';
    mysqlConnection.query(sql, function (error, results, fields) {
        if (error) {
            callback(error);
        } else {
            if (results.length > 0) {
                mongoCollection.insertMany(results, {}, function (error) {
                    if (error) {
                        callback(error);
                    } else {
                        callback(null);
                    }
                });
            } else {
                callback(null);
            }
        }
    });
}

MongoClient.connect("mongodb://localhost:27017/importedDb", function (error, db) {
    if (error) throw error;

    var MysqlCon = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: 8889,
        database: 'dbToExport'
    });

    MysqlCon.connect();

    var jobs = 0;

    getMysqlTables(MysqlCon, function(error, tables) {
        tables.forEach(function(table) {
            var collection = db.collection(table);
            ++jobs;
            tableToCollection(MysqlCon, table, collection, function(error) {
                if (error) throw error;
                --jobs;
            });
        })
    });

    // Waiting for all jobs to complete before closing databases connections.
    var interval = setInterval(function() {
        if(jobs<=0) {
            clearInterval(interval);
            console.log('done!');
            db.close();
            MysqlCon.end();
        }
    }, 300);
});

5voto

umutm Points 343

MongoVUE La version gratuite du site peut le faire automatiquement pour vous.

Il peut se connecter aux deux bases de données et effectuer l'importation.

3voto

pengz Points 125

Je pense que l'un des moyens les plus simples est d'exporter la base de données MySQL en JSON, puis d'utiliser mongorestore pour l'importer dans une base de données MongoDB.

Étape 1 : Exporter la base de données MySQL en JSON

Chargez le fichier mysql dump dans une base de données MySQL si nécessaire.

Ouvrez MySQL Workbench et connectez-vous à la base de données MySQL.

Allez dans le visualiseur de schémas > Sélectionnez la base de données > Tables > cliquez avec le bouton droit de la souris sur le nom de la table à exporter.

Sélectionnez "Assistant d'exportation de données de table".

Définissez le format de fichier à .json et tapez un nom de fichier tel que tablename.json.

Note : Tous les tableaux devront être exportés individuellement.

Étape 2 : Importez les fichiers JSON vers une base de données MongoDB à l'aide de la commande mongorestore.

La commande mongorestore doit être exécutée à partir de la ligne de commande du serveur (et non du shell mongo).

Notez que vous pouvez avoir besoin de fournir les détails d'authentification ainsi que l'option --jsonArray, voir l'onglet docs mongorestore pour plus d'informations

mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json

Remarque : cette méthode ne fonctionnera pas si la base de données MySQL d'origine contient des BLOBs/données binaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X