这可以通过使用promises或async / await来完成吗?
例如:如果主表是(id,uuid,op_1,op_2),那么表应该是table1(id,uuid)table2(id,op_1,op_2)
具有与主表相同顺序的表1和2是具有尽可能多的同步代码的优先级。
在某些情况下我们应该迁移数据,例如将一个表中的大数据拆分成多个表或将生产数据同步到本地等等......
这是我的解决方案:
以下是一些代码:
var maxMigrateId = 0;
redis.get(maxMigrateIdKey, function (err, result) {
if(err){
console.error("[ERROR] - "+err)
}
if(result){
maxMigrateId = result;
}
console.log('MaxMigrateId: ' + maxMigrateId);
mysql_read_pool.query("select id , uuid from {your original table} where id > ? limit 1000", [maxMigrateId], function (err, results) {
if(err){
throw err;
}
console.log('[Query Result Length] - ' + results.length);
var migratePromises = []
migratePromises.push(migrateData(results, mysql_write_pool_prod))
Promise.all(migratePromises).then(()=>{
redis.set(maxMigrateIdKey, maxMigrateId);
console.log('finished');
process.exit();
}).catch((err)=>{
console.log('Error: '+err);
})
});
});
function async migrateData(items, write_pool){
var sql = "insert into ${your target table} (id, uuid) values"
var dataValues = []
items.forEach((data)=>{
var list = [data.id, data.uuid];
var val = "('" + list.join("','") + "')";
dataValues.push(val);
});
sql += dataValues.join(',');
return new Promise((resolve, reject)=>{
write_pool.query(sql, [], function (error, results, fields) {
if (error){
reject(error);
}
resolve(true)
});
});
}