スキーマを変更せずに、テーブルを mysql から mongodb に直接インポートしようとしています。
私はそのための小さなノードスクリプトを書きましたが、私の問題はそれを実装する方法にあります。
ループ内で使用しているときに、mongo db insert limit を使用するという制限に達したのかもしれません。逆だったらこの問題は来なかったと思います(多分ない!)
これが問題です。mysql テーブルの行は 100,000 を超えていますが、ループ ヒットが約 30000 を超えると、挿入されるアイテムの数が減ります。
したがって、以下のスクリプトを使用して完全にインポートした後、mysql テーブルに 100,000 のアイテムがあったとします。最大で 37000 程度しか取得できません。
私の強い疑いは、ノード スクリプト/ノード mongodb コネクタ、またはスクリプトのバグ、または最後に mongodb 同時 db 挿入の制限のいずれかです。
以下にスクリプトを貼り付けます。私がそれを回避することを願っています。
ありがとう、
var http = require('http'),
mysql = require('mysql'),
mongo = require('mongodb').MongoClient,
format = require('util').format;
var connection = mysql.createConnection({
user: "xxx",
password: "xxx",
database: "mydb"
});
connection.connect();
var query = "select * from mytable";
var mysqlrows = '';
connection.query(query, function(err,rows,fields){
if(err) throw err;
console.log(rows.length+'rows found.');
mongo.connect('mongodb://root:root@127.0.0.1:27017/mydb', function(err, db){
if (err)
throw err;
var collection = db.collection('mytable');
for(var i=0; i<rows.length;i++)
{
//console.log(JSON.stringify(rows[i]));
(function(i){
collection.insert(rows[i],function(err,docs){});
console.log(i);
})(i);
}
db.close();
});
});
connection.end();