конвертирование базы данных из mysql в mongoDb - PullRequest
52 голосов
/ 06 июня 2011

Есть ли какой-нибудь простой способ изменить базу данных с mysql на mongoDB?

или лучше, если кто-нибудь предложит мне хороший учебник, сделайте это

Ответы [ 13 ]

48 голосов
/ 07 июня 2011

существует ли простой способ изменить базу данных с mysql на mongoDB?

Метод # 1 : экспортировать из MySQL в формате CSV и затем использовать инструмент mongoimport .Тем не менее, это не всегда хорошо работает с точки зрения обработки дат двоичных данных.

Метод # 2 : сценарий передачи на выбранном вами языке.По сути, вы пишете программу, которая читает все из MySQL по одному элементу за раз, а затем вставляет его в MongoDB.

Метод # 2 лучше, чем # 1, но все еще не подходит.

MongoDB использует коллекции вместо таблиц.MongoDB не поддерживает объединения.В каждой базе данных, которую я видел, это означает, что ваша структура данных в MongoDB отличается от структуры в MySQL.

Из-за этого не существует «универсального инструмента» для переноса SQL в MongoDB.Ваши данные должны быть преобразованы прежде, чем они достигнут MongoDB.

22 голосов
/ 27 июля 2012

Если вы используете Ruby, вы также можете попробовать: Mongify

Это супер простой способ преобразовать ваши данные из RDBS в MongoDB, не теряя ничего.

Mongify прочитает вашу базу данных mysql, создаст для вас файл перевода, и все, что вам нужно сделать, это отобразить, как вы хотите преобразовать свои данные.

Поддерживает:

  • Автоматическое обновление идентификаторов (до BSON ObjectID)
  • Обновление идентификаторов ссылок
  • Тип значения Casting
  • Встраивание таблиц в другие документы
  • Перед сохранением фильтров (чтобы разрешить изменение данных вручную)
  • и многое, многое другое ...

Подробнее об этом можно узнать по адресу: http://mongify.com/getting_started.html

На домашней странице также есть короткое 5-минутное видео, показывающее, насколько это просто.

5 голосов
/ 12 декабря 2012

Бесплатная версия MongoVUE может сделать это автоматически для вас.

Может подключаться к обеим базам данных и выполнять импорт

1 голос
/ 03 октября 2018

Для тех, кто приходит к этому с той же проблемой, вы можете проверить этот проект Github .Это постоянная разработка, которая поможет вам перенести данные из базы данных MySQL в MongoDB, просто выполнив простую команду.

Он будет генерировать схемы MongoDB в TypeScript, чтобы вы могли использовать их позже в своем проекте.Каждая таблица MySQL будет коллекцией MongoDB, и типы данных будут эффективно преобразованы в их MongoDB-совместимые.

Документация для них может быть найдена в README.md проекта.Не стесняйтесь войти и внести свой вклад.Хотел бы помочь в случае необходимости.

1 голос
/ 14 августа 2017

Если кто-то все еще ищет решение, я обнаружил, что самый простой способ - написать PHP-скрипт для подключения к вашей БД SQL, получить нужную информацию с помощью обычного оператора Select, преобразовать информацию в JSON с помощью PHP JSON Кодировать функции и просто выводить результаты в файл или напрямую в MongoDB. Это на самом деле довольно просто и прямо, единственное, что нужно сделать, это дважды проверить вывод с помощью валидатора Json, вам, возможно, придется использовать такие функции, как explode, чтобы заменить определенные символы и символы, чтобы сделать его действительным. Я делал это раньше, однако в настоящее время у меня нет сценария под рукой, но, насколько я помню, это было буквально половина страницы кода.

О, также помните, что Mongo - это хранилище документов, поэтому требуется некоторое отображение данных, чтобы оно стало приемлемым для mongo.

1 голос
/ 11 марта 2017

Вот что я сделал для этого с Node.js:

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 голос
/ 26 июня 2012

Вы можете использовать QCubed (http://qcu.be) framework для этого. Процедура будет выглядеть примерно так:

  1. Установите QCubed (http://www.thetrozone.com/qcubed-installation)
  2. Сделайте codegenв вашей базе данных. (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. Переведите вашу базу данных в автономный режим из остального мира, чтобы одновременно выполнялась только одна операция.
  4. Теперь напишите сценарий, который будет читать все строки из всех таблицбазы данных и использовать getJson для всех объектов, чтобы получить json. Затем вы можете использовать данные для преобразования в массив и вставить их в mongoDB!
1 голос
/ 06 июня 2011

Я неравнодушен к TalendOpenStudio для такого рода задач миграции. Это решение на основе затмения для визуального создания «сценариев» переноса данных. Я не люблю визуальное программирование, но из этой проблемной области я делаю исключение.

Adrien Mogenet создал плагин MongoDBConnection для mongodb.

Вероятно, для "простой" миграции это излишне, но ut это крутой инструмент.

Имейте в виду, однако, что предложение Nix, вероятно, сэкономит ваше время, если это будет миграция.

0 голосов
/ 24 мая 2019

Я думаю, что один из самых простых способов - экспортировать базу данных MySQL в JSON, а затем использовать mongorestore для импорта ее в базу данных MongoDB.

Шаг 1: Экспорт базы данных MySQL в JSON

При необходимости загрузите файл дампа mysql в базу данных MySQL

Откройте MySQL Workbench и подключитесь к базе данных MySQL

Перейдите в просмотрщик схем> Выберите базу данных> Таблицы> щелкните правой кнопкой мыши на именитаблицы для экспорта

Выберите «Мастер экспорта табличных данных»

Установите формат файла в .json и введите имя файла, например tablename.json

Примечание. Всетаблицы нужно будет экспортировать по отдельности

Шаг 2. Импортируйте JSON-файлы в MongoDB с помощью команды mongorestore

Команда mongorestore должна запускаться из командной строки сервера (не оболочки mongo)

Обратите внимание, что вам может потребоваться предоставить данные аутентификации, а также параметр --jsonArray, для получения дополнительной информации см. mongorestore docs

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

Примечание. Этот метод не будет работать, если исходная база данных MySQL содержит BLOB / двоичные данные.

0 голосов
/ 14 февраля 2013

Попробуйте это: Автоматическое преобразование дампа MySQL в обновления Mongo с использованием простых отображений r2n. https://github.com/virtimus/mysql2mongo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...