我们有一个使用 Google Cloud SQL 表的 Google App Maker 应用程序。我们的位置是中欧的布拉格,保存一条记录至少需要令人难以置信的 240 毫秒。
看起来谷歌应用制作工具有一个靠近我位置的代理(延迟~20ms)。但是,我们在US-Central1中设置的实例(Google建议为Google App Maker应用程序提供最佳性能)显示~120ms ping。
我们尝试了很多方法,包括将实例位置更改为德国法兰克福(~25 毫秒)。在这种情况下,它花费的时间甚至更长(每条记录 500 毫秒)。我们的查询似乎以这种复杂的方式往返: 我们的位置(代理)→美国(Google App Maker 主站)→法兰克福(SQL 实例)
我们非常绝望,因为我们目前无法从Google App Maker迁移出去。我坚信,无论是现在还是将来,这都有一些解决方案。
我的资源: db-f1-micro (vCPUs: 1), 内存: 614.4 MB, 存储容量: 10 GB 数据库版本:MySQL 第 2 代 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);
}
}
我们需要每条记录的最大速度为 ~25ms(实际速度的十分之一)。我们有 10000 种产品,导入时间不应超过几分钟。
你们能看看任何解决方案吗,或者有没有办法将记录批量保存到数据库中?非常感谢!
应用制作工具有起有落,您只需要找到应对低谷的解决方法即可。我刚刚处理了一个包含超过五十万条记录的庞大数据库的导入,这是一个相当大的挑战。
在您的情况下,我建议分批保存项目以加快该过程。我认为以 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工程师可以参与其中,但就我现在看到的,这是你最好的机会。