将数据库从mysql转换到mongoDb
有没有简单的方法来改变数据库从MySQL到mongoDB?
或更好的任何一个build议我很好的教程做到这一点
有没有简单的方法来改变数据库从MySQL到mongoDB?
方法1 :以CSV格式从MySQL导出,然后使用mongoimport工具 。 但是,在处理二进制数据的date方面,这并不总是奏效。
方法#2 :用您select的语言编写传输脚本。 基本上你写一个程序,每次从MySQL的一个元素中读取所有内容,然后将其插入到MongoDB中。
方法#2比#1好,但还不够。
MongoDB使用集合而不是表。 MongoDB不支持连接。 在我看到的每个数据库中,这意味着MongoDB中的数据结构与MySQL中的结构不同。
因此,没有把SQL移植到MongoDB的“通用工具”。 您的数据在到达MongoDB之前需要进行转换。
如果你使用Ruby,你也可以尝试: Mongify
这是一个非常简单的方法,将数据从RDBS转换到MongoDB,而不会丢失任何东西。
Mongify会读取你的mysql数据库,为你build立一个翻译文件,你所要做的就是映射你想如何转换你的数据。
它支持:
- 自动更新ID(到BSON ObjectID)
- 更新引用ID
- types铸造值
- 将表embedded其他文档
- 在保存filter之前(手动更改数据)
- 还有更多…
在http://mongify.com/getting_started.html阅读更多关于它的信息;
主页上还有一段短短5分钟的video,向你展示了它是多么容易。
MongoVUE的免费版本可以为你自动完成。
它可以连接到两个数据库并执行导入
对于那些迁移工作,我对TalendOpenStudio有所偏爱 。 这是一个基于Eclipse的解决scheme,以可视方式创build数据迁移“脚本”。 我不喜欢可视化编程,但这是一个问题域,我作出例外。
Adrien Mogenet为MongoDB创build了一个MongoDBConnection插件。
这可能是一个“简单”的迁移矫枉过正,但ut是一个很酷的工具。
但是请注意,尼克斯的build议可能会为你节省时间,如果它是一个迁移。
你可以使用QCubed( http://qcu.be )框架。 程序会是这样的:
- 安装QCubed( http://www.thetrozone.com/qcubed-installation )
- 在数据库上执行codegen。 (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle);
- 将数据库从世界其他地方离线,以便一次只能运行一个操作。
- 现在编写一个脚本,它将读取数据库所有表中的所有行,并使用所有对象上的getJson来获取json。 然后你可以使用数据转换为数组,并将其推入到mongoDB!
如果你正在寻找一个工具来为你做,祝你好运。
我的build议是select你的select语言,并从一个阅读,并写到另一个。
如果我能引用马特布里格斯(它解决了我的一次):
司机的方式是FAR最直接的。 导入/导出工具是太棒了,但只有当你使用它们作为一对。 如果您的表格包含date,并且您尝试从数据库中导出并导入到mongo中,那么您需要进行疯狂的调整。
你也很幸运,在C#中。 我们使用ruby,并有一个3200万行的桌子,我们迁移到mongo。 我们最后的解决scheme是在postgres中创build一个疯狂的sql语句,输出json(包括一些非常糟糕的事情来获取date),并在命令行上将该查询的输出传送到mongoimport。 写了一个令人难以置信的令人沮丧的一天,而不是那种真正可以改变的东西。
所以,如果你能摆脱它,用mongo驱动程序使用ado.net。 如果没有,我希望你好:-)
(请注意,这是来自mongo fanboi)
MySQL与其他SQL数据库非常相似,所以我将您发送给topić: 将SQL表转换为mongoDB文档
您可以使用下面的项目。它需要solr像configuration文件写。它非常简单和直接。
试试这个:使用简单的r2n映射将MySQL转储自动转换为Mongo更新。 https://github.com/virtimus/mysql2mongo
下面是我为了这个目的而使用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); });
如果任何人仍然在寻找解决scheme,我发现最简单的方法是编写一个PHP脚本连接到您的SQL DB,使用通常的Select语句检索您想要的信息,使用PHP JSON Encode函数将信息转换成JSON,只需将结果输出到文件或直接输出到MongoDB。 实际上它非常简单直接,唯一要做的就是用Jsonvalidation器仔细检查你的输出,你可能不得不使用诸如explode之类的函数来replace某些字符和符号来使其有效。 我之前做过这个,但是我现在手边没有这个脚本,但是从我能记得的那个字面上来看,它实际上只是半页的代码。
哦,还记得Mongo是一个文件存储,所以需要一些数据映射才能让mongo接受它。