web-dev-qa-db-fra.com

convertir la base de données de mysql en mongoDb

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

ou mieux tout me suggère bon tutoriel le faire 

50
user737767

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

Méthode n ° 1: exporte à partir de MySQL au format CSV, puis utilise l'outil mongoimport . Cependant, cela ne fonctionne pas toujours bien en termes de traitement des dates de données binaires.

Méthode n ° 2: enregistrez le transfert dans la langue de votre choix. En gros, vous écrivez un programme qui lit tout d'un élément à la fois dans MySQL, 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 votre structure de données dans MongoDB est différente de celle de MySQL.

De ce fait, il n’existe aucun "outil universel" pour le portage de SQL sur MongoDB. Vos données devront être transformées avant d’atteindre MongoDB.

45
Gates VP

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 et il vous suffira de définir comment vous souhaitez transformer vos données.

Elle supporte:

  • ID de mise à jour automatique (en objet BSON)
  • Mise à jour des identifiants de référence
  • Type Valeurs de casting
  • Incorporation de tableaux dans d'autres documents
  • Avant de sauvegarder les filtres (pour autoriser les modifications des données manuellement)
  • et bien plus encore...

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

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

21
Andrew K

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
umutm

Si quelqu'un cherche encore une solution, j'ai trouvé que le moyen le plus simple est d'écrire un script PHP pour se connecter à votre base de données SQL, récupérer les informations souhaitées à l'aide de l'instruction habituelle Select, transformer les informations en JSON à l'aide de l'option PHP JSON Encoder des fonctions et simplement exporter vos résultats dans un fichier ou directement dans MongoDB. C'est en fait assez simple et direct, la seule chose à faire est de vérifier votre sortie par rapport à un validateur Json. Vous devrez peut-être utiliser des fonctions telles que exploser pour remplacer certains caractères et symboles afin de la rendre valide. Je l'ai déjà fait auparavant, mais je n'ai actuellement pas le script sous la main, mais d'après ce que je me souviens, il s'agissait littéralement d'une demi-page de code. 

Oh, rappelez-vous également que Mongo est un magasin de documents, un mappage de données est donc nécessaire pour le rendre acceptable avec mongo.

1
ali habib

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

  1. Installez QCubed ( http://www.thetrozone.com/qcubed-installation )
  2. Faites le codegen sur votre base de données. (http://www.thetrozone.com/php-code-generation-qcubed-éliminant-sql-hassle)
  3. Mettez votre base de données hors ligne dans le monde afin de ne lancer qu'une seule opération à la fois.
  4. Maintenant, écrivez un script qui lira toutes les lignes de toutes les tables de la base de données et utilisera le getJson sur tous les objets pour obtenir le json. Vous pouvez ensuite utiliser les données pour convertir en tableau et le pousser dans la mongoDB!
1
Vaibhav Kaushal

Pour ceux qui viennent avec le même problème, vous pouvez consulter ce projet Github . Il s'agit d'un développement en cours qui vous aidera à migrer les 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 dans TypeScript afin 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 compatibles MongoDB.

La documentation correspondante est disponible dans le fichier README.md du projet. N'hésitez pas à venir et à contribuer. Voudrais aider si besoin est.

1
Danny Sofftie

Je suis un peu partisan de TalendOpenStudio pour ce genre de travail de migration. C’est une solution basée sur Eclipse qui permet de 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, je fais une exception.

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

C'est probablement trop pour une "simple" migration, mais ut est un outil intéressant.

Notez toutefois que la suggestion de Nix vous permettra probablement de gagner du temps s'il s'agit d'une migration unique.

1
Peter Tillemans

Voici ce que je l'ai fait avec Node.js à cette fin:

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);
});
1
benkamin

Vous pouvez utiliser le projet suivant.Il nécessite l’écriture d’un fichier de configuration.Il est très simple et direct.

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

0
sathis

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

Ma suggestion est simplement de choisir la langue de votre choix, de lire l'une et d'écrire dans une autre.

0
Nix

Si je pouvais citer Matt Briggs (cela a résolu mon problème une fois):

La façon de conduire est de loin le plus simple. Les outils d'importation/exportation sont fantastiques, mais uniquement si vous les utilisez en paire. Vous êtes fous de joie si votre table contient des dates et que vous essayez d'exporter à partir de la base de données et de l'importer dans Mongo.

Tu as aussi de la chance, étant en c #. Nous utilisons Ruby et nous avons migré vers mongo sur une table de 32 millions de lignes. Notre solution finale consistait à créer une déclaration insane sql dans postgres qui produisait un json (y compris quelques jolies choses kludgy pour que les dates se déroulent correctement) et transmettait le résultat de cette requête sur la ligne de commande dans mongoimport. Il a fallu une journée incroyablement frustrante pour écrire et ce n’est pas le genre de chose qui peut vraiment être changée. 

Donc, si vous pouvez vous en tirer, utilisez ado.net avec le pilote Mongo. Sinon, je vous souhaite bonne chance :-)

(notez que cela vient d'un mongo fanboi total)

MySQL est très similaire aux autres bases de données SQL, je vous envoie donc le message suivant: Convertir une table SQL en document mongoDB

0
Zozo

Essayez ceci: Conversion automatique de dump MySQL en mises à jour Mongo en utilisant de simples mappages r2n . https://github.com/virtimus/mysql2mongo

0
Virtimus

Je pense que l’un des moyens les plus simples consiste à exporter la base de données MySQL au format JSON, puis à utiliser mongorestore pour l’importer dans une base de données MongoDB.

Étape 1: exportez la base de données MySQL vers JSON

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

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

Accédez à l'afficheur de schéma> Sélectionner la base de données> Tables> faites un clic droit sur le nom de la table à exporter.

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

Définissez le format de fichier sur .json et entrez un nom de fichier tel que tablename.json.

Note: Toutes les tables devront être exportées individuellement

Étape 2: Importez les fichiers JSON sur une 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 devrez peut-être fournir les détails de l'authentification, ainsi que l'option --jsonArray. Consultez la section mongorestore docs 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 données BLOB/binaires.

0
pengz