web-dev-qa-db-ja.com

データベースをmysqlからmongoDbに変換する

データベースをmysqlからmongoDBに変更する簡単な方法はありますか?

または、良いチュートリアルをお勧めします

53
user737767

データベースをmysqlからmongoDBに変更する簡単な方法はありますか?

方法#1:CSV形式でMySQLからエクスポートしてから、 mongoimportツール を使用します。ただし、これはバイナリデータの日付の処理の点で必ずしもうまく機能するとは限りません。

方法#2:選択した言語で転送のスクリプトを作成します。基本的に、MySQLからすべての要素を一度に1つずつ読み取り、それをMongoDBに挿入するプログラムを作成します。

方法#2は#1よりも優れていますが、それでも十分ではありません。

MongoDBはテーブルの代わりにコレクションを使用します。 MongoDBは結合をサポートしていません。私が見たすべてのデータベースで、これは、MongoDBのデータ構造がMySQLの構造と異なることを意味します。

このため、SQLをMongoDBに移植するための「ユニバーサルツール」はありません。データは、MongoDBに到達する前に変換する必要があります。

49
Gates VP

Rubyを使用している場合は、Mongifyを試すこともできます

これは、データを何も失うことなくRDBSからMongoDBに変換する非常に簡単な方法です。

Mongifyはmysqlデータベースを読み取り、翻訳ファイルを作成します。データを変換する方法をマップするだけです。

以下をサポートします。

  • IDの自動更新(BSON ObjectIDへ)
  • 参照IDの更新
  • 型キャスト値
  • テーブルを他のドキュメントに埋め込む
  • フィルターを保存する前(手動でデータを変更できるようにするため)
  • などなど...

詳細については、 http://mongify.com/getting_started.html をご覧ください。

ホームページには5分間の短いビデオがあり、それがいかに簡単かを示しています。

22
Andrew K

MongoVUE の無料バージョンでは、これを自動的に行うことができます。

両方のデータベースに接続し、インポートを実行できます

5
umutm

誰かがまだ解決策を探しているなら、最も簡単な方法はPHPスクリプトを記述してSQL DBに接続し、通常のSelectステートメントを使用して必要な情報を取得し、情報を変換することですPHP JSON Encode関数を使用してJSONに変換し、単純に結果をファイルに出力するか、MongoDBに直接出力します。 JSONバリデーター、特定の文字や記号を有効にするために爆発などの機能を使用する必要があるかもしれません。しかし、私はこれを以前に実行しましたが、現在スクリプトは手元にありませんコードの。

また、Mongoはドキュメントストアであるため、mongoで受け入れられるようにするには、いくつかのデータマッピングが必要です。

1
ali habib

QCubed( http://qcu.be )フレームワークを使用できます。手順は次のようになります。

  1. QCubedのインストール( http://www.thetrozone.com/qcubed-installation
  2. データベースでcodegenを実行します。 (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. 一度に1つの操作のみが実行されるように、データベースを世界中からオフラインにします。
  4. 次に、データベースのすべてのテーブルからすべての行を読み取るスクリプトを作成し、すべてのオブジェクトでgetJsonを使用してjsonを取得します。その後、データを使用して配列に変換し、mongoDBにプッシュできます!
1
Vaibhav Kaushal

同じ問題でこれに来ている人のために、あなたはこれをチェックアウトすることができます Githubプロジェクト 。これは、単純なコマンドを実行するだけで、MySQLデータベースからMongoDBにデータを移行するのに役立つ継続的な開発です。

TypeScriptでMongoDBスキーマを生成するため、プロジェクトで後で使用できます。各MySQLテーブルはMongoDBコレクションになり、データ型はMongoDB互換に効率的に変換されます。

同じためのドキュメントは、プロジェクトの README.md にあります。気軽に参加して貢献してください。必要に応じて支援したいと思います。

1
Danny Sofftie

私は TalendOpenStudio のような種類の移行ジョブに対しては部分的です。これは、視覚的な方法でデータ移行「スクリプト」を作成するEclipseベースのソリューションです。私はビジュアルプログラミングは好きではありませんが、これは例外を作る問題の領域です。

Adrien Mogenetは、mongodb用の MongoDBConnection プラグインを作成しました。

「単純な」移行にはおそらくやり過ぎですが、utはクールなツールです。

ただし、Nixの提案は、それが1回の移行である場合、おそらく時間を節約することに注意してください。

1
Peter Tillemans

この目的のために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
benkamin

次のプロジェクトを使用できます。solrのような構成ファイルを書き込む必要があります。非常にシンプルで簡単です。

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

0
sathis

あなたのためにそれをするためのツールを探しているなら、幸運。

私の提案は、あなたの選んだ言語を選んで、ある言語から読んで別の言語に書くことです。

0
Nix

マット・ブリッグスを引用できたら(一度問題を解決した):

ドライバーの方法は、FARが最も簡単です。インポート/エクスポートツールは素晴らしいですが、ペアで使用する場合のみです。テーブルに日付が含まれていて、dbからエクスポートしてmongoにインポートしようとすると、大騒ぎになります。

あなたも幸運で、C#にいます。 Rubyを使用しており、mongoに移行した3,200万行のテーブルがあります。最終的な解決策は、postgresでjson(日付を適切に取得するためのかなり厄介なものを含む)を作成し、コマンドラインのクエリの出力をmongoimportにパイプする非常識なSQLステートメントを作成することでした。書くのに信じられないほどイライラする日がかかりましたが、これは本当に変更できるようなものではありません。

そのため、それを回避できる場合は、mongoドライバーでado.netを使用してください。そうでない場合、私はあなたによく願っています:-)

(これは、合計mongo fanboiから来ていることに注意してください)

MySQLは他のSQLデータベースと非常によく似ているので、私はあなたをtopićに送ります: SQLテーブルをmongoDBドキュメントに変換する

0
Zozo

これを試してください:単純なr2nマッピングを使用して、MySQLダンプのMongo更新への自動変換。 https://github.com/virtimus/mysql2mongo

0
Virtimus

最も簡単な方法の1つは、MySQLデータベースをJSONにエクスポートし、mongorestoreを使用してMongoDBデータベースにインポートすることだと思います。

ステップ1:MySQLデータベースをJSONにエクスポートする

必要に応じて、MySQLダンプファイルをMySQLデータベースにロードします。

MySQL Workbenchを開き、MySQLデータベースに接続します

[スキーマビューアー]> [データベースの選択]> [テーブル]に移動し、エクスポートするテーブルの名前を右クリックします。

[テーブルデータエクスポートウィザード]を選択します

ファイル形式を.jsonに設定し、tablename.jsonなどのファイル名を入力します

注:すべてのテーブルを個別にエクスポートする必要があります

ステップ2:mongorestoreコマンドを使用してJSONファイルをMongoDBにインポートする

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
pengz