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

y a-t-il un moyen facile de changer la base de données de mysql en mongoDB ?

ou mieux n'importe qui me suggèrent bon tutoriel le faire

46
demandé sur Community 2011-06-06 15:46:32

12 réponses

y a-t-il un moyen facile de changer la base de données de mysql en mongoDB ?

Method #1 : export de MySQL dans un format CSV et ensuite utiliser le mongoimport tool . Cependant, cela ne fonctionne pas toujours bien en termes de gestion des dates de données binaires.

Méthode #2 : script le transfert dans la langue de votre choix. Fondamentalement, vous écrivez un programme qui lit tout de MySQL un élément à la fois et l'insère dans MongoDB.

Méthode #2 est meilleure que #1, mais elle n'est toujours pas adéquate.

MongoDB utilise des collections au lieu de tableaux. MongoDB ne supporte pas les jointures. Dans chaque base de données que j'ai vu, cela signifie que votre structure de données en MongoDB est différente de la structure en MySQL.

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

42
répondu Gates VP 2011-06-07 15:21:38

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

c'est 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 cartographier comment vous voulez que vos données soient transformées.

il supporte:

  • Mise à jour automatique IDs (to BSON ObjectID)
  • mise à Jour de référencement Id
  • Type valeurs de coulée
  • intégration de tableaux dans d'autres documents
  • avant de sauvegarder les filtres (pour permettre des modifications aux données manuellement)
  • , et bien plus...

plus d'informations à ce sujet à: http://mongify.com/getting_started.html

Il ya aussi une courte vidéo de 5 min sur la page d'accueil qui vous montre comment il est facile.

21
répondu Andrew K 2015-03-17 02:51:44
La version gratuite de

MongoVUE peut le faire automatiquement pour vous.

il peut se connecter aux deux bases de données et effectuer l'importation""

5
répondu umutm 2012-12-12 13:38:33

je suis un peu partielle à TalendOpenStudio pour ce genre de migration des emplois. C'est une solution basée sur eclipse pour créer des "scripts" de migration de données de manière visuelle. Je n'aime pas la programmation visuelle, mais c'est un domaine problématique que je fais une exception.

Adrien Mogenet a créé un MongoDBConnection plugin pour mongodb.

il est probablement exagéré pour une "simple" migration, mais ut est un frais outil.

N'oubliez pas, cependant, que la suggestion de Nix vous fera probablement gagner du temps s'il s'agit d'une migration.

1
répondu Peter Tillemans 2011-06-06 12:05:11

vous pouvez utiliser QCubed ( http://qcu.be ) cadre pour cela. La procédure serait quelque chose comme ceci:

  1. Install QCubed ( http://www.thetrozone.com/qcubed-installation )
  2. faire le codegen sur votre base de données. (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. prenez votre base de données hors ligne du reste du monde afin que seulement une opération fonctionne à la fois.
  4. écrivent maintenant un script qui lira toutes les lignes de toutes les tables de la base de données et utiliseront le getJson sur tous les objets pour obtenir le json. Vous pouvez alors utiliser les données pour convertir en tableau et le pousser dans le mongoDB!
1
répondu Vaibhav Kaushal 2012-06-26 04:41:13

pour ceux qui viennent à cela avec le même problème, vous pouvez consulter ce GitHub project . Il s'agit d'un développement continu qui vous aidera à migrer des données de la base de données MySQL vers MongoDB en exécutant simplement une commande simple.

il générera des schémas MongoDB en TypeScript pour que vous puissiez les utiliser plus tard dans votre projet. Chaque table MySQL sera une collection MongoDB, et les types de données seront efficacement convertis en leurs compatibles MongoDB.

la documentation pour le même peut être trouvée dans le projet README.md . N'hésitez pas à venir et à contribuer. Voudrais de l'aide en cas de besoin.

1
répondu Danny Sofftie 2018-10-04 11:39:33

si vous cherchez un outil pour le faire pour vous, bonne chance.

ma suggestion est de simplement choisir la langue de votre choix, et lire de l'un et écrire à l'autre.

0
répondu Nix 2011-06-06 11:54:44

si je pouvais citer Matt Briggs (il a résolu mon roblem une fois):

la voie du conducteur est de loin la plus droite. Les outils d'exportation/importation sont fantastiques, mais seulement si vous les utilisez comme une paire. Vous êtes dans pour un tour sauvage si votre table comprend des dates et vous essayez d'exporter à partir de la db et d'importer dans mongo.

Vous avez de la chance aussi, étant en c#. Nous utilisons du rubis, et avons une table de 32 millions de rangées que nous avons migré à mongo. Notre solution finale était de créer une déclaration SQL insensée dans postgres qui produisait json (y compris des choses assez kludgy pour obtenir des dates aller correctement) et piped la sortie de cette requête sur la ligne de commande dans mongoimport. Il a fallu une journée incroyablement frustrante pour écrire, et n'est pas le genre de chose qui peut vraiment être changé.

donc si vous pouvez vous en tirer, utilisez ado.net avec le chauffeur de mongo. Si pas, je vous souhaite bien :-)

(note que cela vient d'un total Mongo fanboi)

MySQL est très similaire à d'autres bases de données SQL, donc je vous envoie à la topić: Convertir une table SQL pour mongoDB document

0
répondu Zozo 2017-05-23 12:10:40

vous pouvez utiliser le projet suivant.Il nécessite l'écriture d'un fichier de configuration similaire à solr.Elle est très simple et directe.

http://code.google.com/p/sql-to-mongo-importer /

0
répondu sathis 2011-07-23 06:10:11

essayez ceci: Conversion automatisée du dump MySQL en Mises à jour Mongo en utilisant des mappages R2N simples. https://github.com/virtimus/mysql2mongo

0
répondu Virtimus 2013-02-13 23:35:35

voilà ce que j'ai fait avec Node.js à cet effet:

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);
});
0
répondu benkamin 2017-03-10 22:50:19

si quelqu'un est toujours à la recherche d'une solution, j'ai trouvé que la manière la plus facile est d'écrire un script PHP pour se connecter à votre base de données SQL, récupérer les informations que vous voulez en utilisant l'habituelle déclaration Select, transformer les informations en JSON en utilisant les fonctions PHP JSON Encode et tout simplement la sortie de vos résultats au fichier ou directement à MongoDB. Il est en fait assez simple et simple, la seule chose à faire est de vérifier votre sortie contre un validateur Json, vous pouvez avoir à utiliser des fonctions comme exploser pour remplacer certains caractères et symboles pour le rendre valide. J'ai fait cela avant mais je n'ai pas actuellement le script à portée de main mais d'après ce que je me souviens c'était littéralement une demi-page de code.

oh rappelez-vous aussi que Mongo est un magasin de documents, donc il faut un peu de mappage des données pour qu'il soit acceptable avec mongo.

0
répondu ali habib 2017-08-14 14:01:41