将数据库从mysql转换为mongoDb
有没有简单的方法将数据库从mysql更改为mongoDB将数据库从mysql转换为mongoDb,mysql,mongodb,database,Mysql,Mongodb,Database,有没有简单的方法将数据库从mysql更改为mongoDB 或者最好有人建议我做一个好的教程。如果你想找一个工具来帮你做,祝你好运 我的建议是选择你所选择的语言,从一种语言读到另一种语言写到另一种语言。如果我能引用马特·布里格斯的话(这一次解决了我的问题): 司机路是目前为止最直的。导入/导出工具非常棒,但前提是您将它们作为一对使用。如果您的表中包含日期,并且您尝试从db导出并导入到mongo中,那么您将处于一种疯狂的状态 你也很幸运,在c。我们使用的是ruby,有一个3200万行的表迁移到了mo
或者最好有人建议我做一个好的教程。如果你想找一个工具来帮你做,祝你好运
我的建议是选择你所选择的语言,从一种语言读到另一种语言写到另一种语言。如果我能引用马特·布里格斯的话(这一次解决了我的问题): 司机路是目前为止最直的。导入/导出工具非常棒,但前提是您将它们作为一对使用。如果您的表中包含日期,并且您尝试从db导出并导入到mongo中,那么您将处于一种疯狂的状态 你也很幸运,在c。我们使用的是ruby,有一个3200万行的表迁移到了mongo。我们最终的解决方案是在postgres中编写一个疯狂的sql语句,输出json(包括一些非常麻烦的事情,以使日期正常运行),并通过管道将命令行上的查询输出传输到mongoimport。写这篇文章花了令人难以置信的沮丧的一天,而且这类事情永远不会真正改变 因此,如果您可以摆脱它,请将ado.net与mongo驱动程序一起使用。如果没有,我祝你一切顺利:-) (注意,这是来自mongo fanboi的总数) MySQL与其他SQL数据库非常相似,因此我将您发送到topić: 我有点偏爱那种移民工作。它是一个基于eclipse的解决方案,以可视化的方式创建数据迁移“脚本”。我不喜欢可视化编程,但这是一个有问题的领域,我例外 Adrien Mogenet已经为mongodb创建了一个插件 对于一个“简单”的迁移来说,这可能有些过分,但ut是一个很酷的工具 但是,请注意,如果是迁移,那么Nix的建议可能会节省您的时间 有没有简单的方法将数据库从mysql更改为mongoDB 方法#1:以CSV格式从MySQL导出,然后使用。然而,就处理二进制数据的日期而言,这并不总是很有效 方法#2:用您选择的语言编写转移脚本。基本上,您编写一个程序,每次读取MySQL中的一个元素,然后将其插入MongoDB 方法#2优于方法#1,但仍然不够充分 MongoDB使用集合而不是表。MongoDB不支持联接。在我见过的每个数据库中,这意味着MongoDB中的数据结构与MySQL中的结构不同
因此,没有将SQL移植到MongoDB的“通用工具”。您的数据在到达MongoDB之前需要进行转换。您可以使用以下项目。它需要编写类似solr的配置文件。它非常简单明了 您可以使用QCubed()框架来实现这一点。程序如下所示:
如果您使用的是Ruby,也可以尝试: 这是一种超级简单的方法,可以将数据从RDB转换到MongoDB,而不会丢失任何东西 Mongify将读取您的mysql数据库,为您构建一个翻译文件,您所要做的就是映射您希望数据转换的方式 它支持:
- 自动更新ID(到BSON ObjectID)
- 更新引用ID
- 类型转换值
- 将表嵌入到其他文档中
- 保存过滤器之前(允许手动更改数据)
- 还有更多
以下是我使用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);
});
var mysql=require('mysql');
var MongoClient=require('mongodb')。MongoClient;
函数getMysqlTables(mysqlConnection,回调){
mysqlConnection.query(“在Table_Type='BASE Table';”中显示完整的表”,函数(错误、结果、字段){
如果(错误){
回调(错误);
}否则{
var表=[];
结果.forEach(函数(行){
for(行中的var键){
if(行hasOwnProperty(键)){
if(key.startsWith('Tables_in')){
tables.push(行[键]);
}
}
}
});
回调(空,表);
}
});
}
函数tableToCollection(mysqlConnection、tableName、mongoCollection、callback){
var sql='SELECT*FROM'+tableName+';';
查询(sql,函数(错误,结果,字段){
如果(错误){
回调(错误);
}否则{
如果(results.length>0){
mongoCollection.insertMany(结果,{},函数(错误){
如果(错误){
回调(错误);
}否则{
回调(空);
}
});
}否则{
回调(空);
}
}
});
}
MongoClient.connect(“mongodb://localhost:27017/importedDb,函数(错误,db){
如果(错误)抛出错误;
var MysqlCon=mysql.createConnection({
主机:“localhost”,
用户:'
mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json