我们有一个使用 Google Cloud SQL 表的 Google App Maker 应用。我们的位置是中欧布拉格,保存一项记录至少需要令人难以置信的 240 毫秒。
看起来 Google 应用制作工具在我的位置附近有一个代理(延迟约 20 毫秒)。然而,我们在 US-Central1 设置的实例(Google 推荐该实例为 Google App Maker 应用程序提供最佳性能)显示约 120 毫秒 ping。
我们尝试了很多方法,包括将实例位置更改为德国法兰克福(~25 毫秒)。在这种情况下,花费的时间甚至更长(每条记录 500 毫秒)。我们的查询似乎是以这种复杂的方式往返的:
我们的位置(代理)→ 美国(Google App Maker master)→ 法兰克福(SQL 实例)
我们非常绝望,因为目前我们无法从 Google App Maker 迁移出去。我坚信无论是现在还是将来都会有一些解决方案。
我的资源:
db-f1-micro(vCPU:1),内存:614.4 MB,存储容量:10 GB
数据库版本:MySQL 2nd Gen 5.7,实例区域:us-central1-a
连接性:公共 IP,我的位置:捷克共和国布拉格
function serverSaveData() {
var recordData = [];
recordData[0] = ['NewField_String']
recordData[1] = ['NewField1_String'];
for (var i = 0 ; i < recordData.length; i ++) {
var newProduct = app.models.testDB.newRecord();
newProduct.NewField = recordData[i][0];
newProduct.NewField1 = recordData[i][1];
var time = new Date().toString();
app.saveRecords([newProduct]);
console.log('Product saved: ' + time);
}
}
我们需要每条记录的速度最大约为 25 毫秒(实际速度的十分之一)。我们有 10000 种产品,导入时间不会超过几分钟。
请问各位有什么解决办法吗,或者有没有办法将记录批量保存到数据库中?太感谢了!
应用制作工具有起有落,您只需要找到解决方法。我刚刚处理了一个包含超过 50 万条记录的庞大数据库的导入,这是一个相当大的挑战。
对于您的情况,我建议批量保存项目以加快过程。我认为批量保存2000条记录就足够了。
你可以这样做:
function saveData(){
//get the data
var data = getData();
var totalRecords = data.length;
var batchLimit = 2000;
var totalRounds = Math.ceil(totalRecords / batchLimit);
var round = 1;
var roundlimit = batchLimit;
var currentItem = 0;
do{
var recordsToSave = [];
for(var i=currentItem; i<roundlimit; i++){
var recordData = data[i];
var newProduct = app.models.testDB.newRecord();
newProduct.newField = recordData.newFielddData;
newProduct.newFiled2 = recordData.newField2Data;
recordsToSave.push(newProduct);
}
if(recordsToSave.length){
app.saveRecords(recordsToSave);
}
currentItem += batchLimit;
roundlimit += batchLimit;
round++;
} while(round <= totalRounds);
}
我使用了与上面类似的解决方案,完成了 680,000 多条记录到 appmaker 的导入。它可能需要更多的调整,但你明白了。至于连接延迟,抱歉我无能为力。希望 Google App Maker 工程师能够参与进来,但就我现在看来,这是你最好的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)