我们有一个使用Google Cloud SQL表的Google App Maker应用。我们的位置在中欧的布拉格,保存一项记录至少需要240毫秒,令人难以置信。
Google App Maker似乎有一个代理靠近我的位置(等待时间约20毫秒)。但是,我们在美国中部1(Google推荐使用此实例来为Google App Maker应用提供最佳性能)中设置的实例显示〜120ms ping。
我们尝试了很多事情,包括将实例位置更改为德国法兰克福(约25毫秒)。在这种情况下,它花费的时间甚至更长(每条记录500毫秒)。我们的查询似乎是往返于这种复杂的方式: 我们的位置(代理)→美国(Google App Maker主用户)→法兰克福(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);
}
}
我们需要每条记录的最大速度为〜25ms(实际速度的十分之一)。我们有10000种产品,导入时间不会超过几分钟。
请问您有什么解决方法,还是可以将记录批量保存到数据库中?非常感谢!
答案 0 :(得分:2)
App Maker有起有落,您只需要找到起伏的解决方法。我只是处理了一个庞大的数据库的导入,该数据库包含超过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工程师能够参与进来,但就我目前而言,这是您的最佳选择。