wake-up-neo.com

konvertierung der Datenbank von MySQL in MongoDb

gibt es eine einfache Möglichkeit, die Datenbank von MySQL in MongoDB zu ändern?

oder besser, jemand schlägt mir vor, ein gutes Tutorial zu machen 

50
user737767

gibt es eine einfache Möglichkeit, die Datenbank von MySQL in MongoDB zu ändern?

Methode # 1: Exportieren Sie aus MySQL in ein CSV-Format und verwenden Sie dann das mongoimport-Tool . Dies funktioniert jedoch nicht immer gut im Hinblick auf die Behandlung von Datumsangaben für binäre Daten.

Methode # 2: Skript die Übertragung in Ihrer bevorzugten Sprache. Grundsätzlich schreiben Sie ein Programm, das alles einzeln aus MySQL liest und dann in MongoDB einfügt.

Methode # 2 ist besser als # 1, ist aber immer noch nicht ausreichend.

MongoDB verwendet Sammlungen anstelle von Tabellen. MongoDB unterstützt keine Joins. In jeder Datenbank, die ich gesehen habe, bedeutet dies, dass sich Ihre Datenstruktur in MongoDB von der Struktur in MySQL unterscheidet.

Aus diesem Grund gibt es kein "universelles Werkzeug" für die Portierung von SQL nach MongoDB. Ihre Daten müssen umgewandelt werden, bevor sie MongoDB erreichen.

45
Gates VP

Wenn Sie Ruby verwenden, können Sie auch Folgendes versuchen: Mongify

Es ist eine sehr einfache Möglichkeit, Ihre Daten von einem RDBS zu MongoDB zu konvertieren, ohne dabei etwas zu verlieren.

Mongify wird Ihre MySQL-Datenbank lesen, eine Übersetzungsdatei für Sie erstellen und alles, was Sie tun müssen, ist die Zuordnung, wie Sie Ihre Daten transformieren möchten.

Es unterstützt:

  • Automatische Aktualisierung von IDs (nach BSON ObjectID)
  • Referenzier-IDs aktualisieren
  • Geben Sie Casting-Werte ein
  • Einbetten von Tabellen in andere Dokumente
  • Vor dem Speichern von Filtern (um Änderungen an den Daten manuell zuzulassen)
  • und sehr viel mehr...

Lesen Sie mehr dazu unter: http://mongify.com/getting_started.html

Es gibt auch ein kurzes Video von 5 Minuten auf der Homepage, das Ihnen zeigt, wie einfach es ist.

21
Andrew K

Die kostenlose Version von MongoVUE kann dies automatisch für Sie tun.

Es kann eine Verbindung zu beiden Datenbanken herstellen und den Import durchführen

5
umutm

Wenn jemand noch nach einer Lösung sucht, habe ich festgestellt, dass der einfachste Weg ist, ein PHP -Skript zu schreiben, um eine Verbindung zu Ihrer SQL-Datenbank herzustellen, die gewünschten Informationen mit der üblichen Select-Anweisung abzurufen, die Informationen in JSON mit dem PHP JSON Kodiert Funktionen und gibt Ihre Ergebnisse einfach in eine Datei oder direkt in MongoDB aus. Es ist eigentlich ziemlich einfach und unkompliziert, das einzige, was Sie tun müssen, ist, Ihre Ausgabe mit einem Json-Validator zu überprüfen. Möglicherweise müssen Sie Funktionen wie explodieren, um bestimmte Zeichen und Symbole zu ersetzen, um sie gültig zu machen. Ich habe das schon vorher gemacht, aber ich habe derzeit noch kein Skript zur Hand, aber von dem, woran ich mich erinnern kann, war es buchstäblich eine halbe Seite Code. 

Denken Sie auch daran, dass Mongo ein Dokumentenspeicher ist. Es ist also ein gewisses Daten-Mapping erforderlich, damit es für Mongo akzeptabel ist.

1
ali habib

Sie können dafür das QCubed-Framework ( http://qcu.be ) verwenden. Die Prozedur wäre etwa so: 

  1. Installieren Sie QCubed ( http://www.thetrozone.com/qcubed-installation )
  2. Tun Sie den Code in Ihrer Datenbank. (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. Schalten Sie Ihre Datenbank vom Rest der Welt offline, sodass jeweils nur eine Operation ausgeführt wird.
  4. Schreiben Sie nun ein Skript, das alle Zeilen aus allen Tabellen der Datenbank liest und für alle Objekte den getJson verwendet, um den Json zu erhalten. Sie können die Daten dann verwenden, um sie in ein Array zu konvertieren und in die MongoDB zu verschieben.
1
Vaibhav Kaushal

Für diejenigen, die das gleiche Problem haben, können Sie dieses Github-Projekt ausprobieren. Dies ist eine fortlaufende Entwicklung, die Ihnen dabei hilft, Daten von der MySQL-Datenbank zu MongoDB zu migrieren, indem Sie einfach einen einfachen Befehl ausführen. 

Es generiert MongoDB-Schemas in TypeScript, damit Sie sie später in Ihrem Projekt verwenden können. Jede MySQL-Tabelle ist eine MongoDB-Sammlung, und Datentypen werden effizient in ihre MongoDB-kompatiblen Dateien konvertiert.

Die Dokumentation dazu finden Sie in README.md des Projekts . Fühlen Sie sich frei, zu kommen und beizutragen. Möchte helfen, wenn nötig.

1
Danny Sofftie

Ich bin ein bisschen zu TalendOpenStudio für diese Art von Migrationsjobs. Es handelt sich um eine auf Eclipse basierende Lösung zur visuellen Erstellung von Datenmigrationsskripts. Ich mag visuelle Programmierung nicht, aber dies ist eine Problemdomäne, bei der ich eine Ausnahme mache.

Adrien Mogenet hat ein MongoDBConnection Plugin für Mongodb erstellt.

Es ist wahrscheinlich zu viel für eine "einfache" Migration, aber ut ist ein cooles Werkzeug.

Beachten Sie jedoch, dass der Vorschlag von Nix Ihnen wahrscheinlich Zeit spart, wenn es sich um eine Migration handelt.

1
Peter Tillemans

Folgendes habe ich mit Node.js zu diesem Zweck gemacht:

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

Sie können das folgende Projekt verwenden. Es muss eine solr-ähnliche Konfigurationsdatei geschrieben werden. Es ist sehr einfach und unkompliziert.

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

0
sathis

Wenn Sie nach einem Werkzeug suchen, um es für Sie zu erledigen, viel Glück. 

Mein Vorschlag ist, einfach die Sprache der Wahl zu wählen, von einer zu lesen und in eine andere zu schreiben.

0
Nix

Wenn ich Matt Briggs zitieren könnte (es hat mein Problem einmal gelöst):

Der Fahrerweg ist bei weitem der geradlinigste. Die Import/Export-Tools sind fantastisch, aber nur, wenn Sie sie als Paar verwenden. Sie werden eine wilde Fahrt erleben, wenn Ihre Tabelle Daten enthält und Sie versuchen, aus der Datenbank zu exportieren und in Mongo zu importieren.

Sie haben auch Glück, in c # zu sein. Wir verwenden Ruby und haben einen 32-Millionen-Row-Table, den wir zum Mongo migriert haben. Unsere Endlösung bestand darin, eine wahnsinnige SQL-Anweisung in Postgres zu erstellen, die Json ausgab (einschließlich einiger hübscher Dinge, um ein korrektes Datum zu erhalten) und die Ausgabe dieser Abfrage über die Befehlszeile in den Mongoimport leitete. Es hat einen unglaublich frustrierenden Tag gedauert, um zu schreiben, und es ist nicht das, was man wirklich ändern kann. 

Wenn Sie damit durchkommen können, verwenden Sie ado.net mit dem Mongo-Treiber. Wenn nicht, wünsche ich dir alles Gute :-)

(Beachten Sie, dass dies von einem gesamten Mongo-Fanboi kommt)

MySQL ist anderen SQL-Datenbanken sehr ähnlich, daher sende ich Sie an den Benutzer: Konvertiert die SQL-Tabelle in das MongoDB-Dokument

0
Zozo

Versuchen Sie Folgendes: Automatisierte Konvertierung von MySQL-Dump in Mongo-Updates mithilfe einfacher r2n-Zuordnungen . https://github.com/virtimus/mysql2mongo

0
Virtimus

Ich denke, eine der einfachsten Möglichkeiten ist, die MySQL-Datenbank nach JSON zu exportieren und sie dann mit mongorestore in eine MongoDB-Datenbank zu importieren.

Schritt 1: Exportieren Sie die MySQL-Datenbank nach JSON

Laden Sie die mysql-Dump-Datei bei Bedarf in eine MySQL-Datenbank

Öffnen Sie die MySQL Workbench und stellen Sie eine Verbindung zur MySQL-Datenbank her

Gehen Sie zum Schema-Viewer> Datenbank auswählen> Tabellen> klicken Sie mit der rechten Maustaste auf den Namen der zu exportierenden Tabelle

Wählen Sie "Assistent zum Exportieren von Tabellendaten".

Stellen Sie das Dateiformat auf .json ein und geben Sie einen Dateinamen wie tablename.json ein

Hinweis: Alle Tabellen müssen einzeln exportiert werden

Schritt 2: Importieren Sie die JSON-Dateien mit dem Befehl mongorestore in eine MongoDB

Der Befehl mongorestore sollte über die Server-Befehlszeile ausgeführt werden (nicht über die Mongo-Shell).

Beachten Sie, dass Sie möglicherweise die Authentifizierungsdetails sowie die Option --jsonArray angeben müssen. Weitere Informationen finden Sie in den mongorestore docs

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

Hinweis: Diese Methode funktioniert nicht, wenn die ursprüngliche MySQL-Datenbank BLOBs/Binärdaten enthält.

0
pengz